赞
踩
目录
最近想做一些语音识别的应用,对比了几个大厂提供的语音合成,其中有些提供了几个月免费试用,对于我想长期使用的显然是不合适,其中百度的语音识别可以按照调用量进行收费,对于我这种厂期小使用量非常合适,一条才3里,3条才1分。所以就做一下百度语音识别的集成,这里只讲一下最简单的使用,很多参数可以设置,需要自己去研究了。
android studio:Android Studio Jellyfish | 2023.3.1
语音识别版本:bdasr_V3_20210628_cfe8c44
这里顺便打开文档和下载SDK
创建后会得到appid,api key,secret key
例程和相关文档在这个压缩包中。
将core/libs/bdasr_V3_xxxxx_xxxxx.jar 复制到您的项目的同名目录中。
下面这篇文章讲了如何导入jar包到工程中,使用方法二。
android studio 导入第三方的jar包,add as library的位置-腾讯云开发者社区-腾讯云 (tencent.com)
其实就是在BaiduSpeechRecognition\app\build.gradle.kts中
将 core/src/main/jniLibs 下armeabi等包含so文件的5个目录,复制合并到BaiduSpeechRecognition\app\src\main\jniLibs目录中。
经过上面步骤后就已经集成好了SDK,当然百度的文档里使用了另一个方法集成,也可以使用。
部分接口说明在压缩包的 demo_development_doc.md文件里
在您的core\src\main\AndroidManifest.xml文件里 替换您的appId appKey secretKey
添加权限
- <uses-permission android:name="android.permission.RECORD_AUDIO" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
- tools:ignore="ScopedStorage" />
如果你的开始识别时使用的不自己设置参数,需要在AndroidManifest.xml中添加meta-data
初始化EventManager对象
val asr: EventManager = EventManagerFactory.create(LocalContext.current, "asr")
- val yourListener = // 自定义输出事件类
- EventListener { name, params, data, offset, length ->
- if (name == SpeechConstant.CALLBACK_EVENT_ASR_READY) {
- // 引擎就绪,可以说话,一般在收到此事件后通过UI通知用户可以说话了
- Log.e(TAG, "CALLBACK_EVENT_ASR_READY")
- }
- if (name == SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL) {
- // 一句话的临时结果,最终结果及语义结果
- Log.e(TAG, "CALLBACK_EVENT_ASR_PARTIAL $params $data")
- // {"results_recognition":["开始"],"result_type":"partial_result","best_result":"开始","origin_result":{"err_no":0,"result":{"word":["开始"],"confident":[99]},"raf":112,"corpus_no":7363482792138232974,"sn":"09cd77b2-2c14-4d89-9673-68279c3a4567","product_id":1537,"product_line":"open","result_type":"TS_RESULT_TYPE_MIDDLE"},"error":0}
- // {"results_recognition":["开始说话说话说话来了来我操。"],"result_type":"final_result","best_result":"开始说话说话说话来了来我操。","origin_result":{"err_no":0,"result":{"word":["开始说话说话说话来了来我操。"],"confident":[0]},"corpus_no":7363482792138232974,"sn":"09cd77b2-2c14-4d89-9673-68279c3a4567","product_id":1537,"product_line":"open","result_type":"TS_RESULT_TYPE_ONEBSET"},"error":0}
- }
- // ... 支持的输出事件和事件支持的事件参数见“输入和输出参数”一节
- }
- // 注册自己的输出事件类
- asr.registerListener(yourListener)

- /**
- * 基于SDK集成2.2 发送开始事件
- * 点击开始按钮
- * 测试参数填在这里
- */
- private fun start(asr: EventManager) {
- val params: MutableMap<String, Any> = AuthUtil.getParam().toMutableMap()
- val event: String = SpeechConstant.ASR_START // 替换成测试的event
- // 基于SDK集成2.1 设置识别参数
- params[SpeechConstant.ACCEPT_AUDIO_VOLUME] = false
- // params.put(SpeechConstant.NLU, "enable");
- // params.put(SpeechConstant.BDS_ASR_ENABLE_LONG_SPEECH, true);//长语音 优先级高于VAD_ENDPOINT_TIMEOUT
- // params.put(SpeechConstant.VAD_ENDPOINT_TIMEOUT, 0); // 长语音
-
- // params.put(SpeechConstant.IN_FILE, "res:///com/baidu/android/voicedemo/16k_test.pcm");
- // params.put(SpeechConstant.VAD, SpeechConstant.VAD_DNN);
- // params.put(SpeechConstant.PID, 1537); // 中文输入法模型,有逗号
-
- /* 语音自训练平台特有参数 */
- // params.put(SpeechConstant.PID, 8002);
- // 语音自训练平台特殊pid,8002:模型类似开放平台 1537 具体是8001还是8002,看自训练平台页面上的显示
- // params.put(SpeechConstant.LMID,1068);
- // 语音自训练平台已上线的模型ID,https://ai.baidu.com/smartasr/model
- // 注意模型ID必须在你的appId所在的百度账号下
- /* 语音自训练平台特有参数 */
-
- /* 测试InputStream*/
- // InFileStream.setContext(this);
- // params.put(SpeechConstant.IN_FILE,
- // "#com.baidu.aip.asrwakeup3.core.inputstream.InFileStream.createMyPipedInputStream()");
-
- // 请先使用如‘在线识别’界面测试和生成识别参数。 params同ActivityRecog类中myRecognizer.start(params);
- // 复制此段可以自动检测错误
- // AutoCheck(getApplicationContext(), object : Handler() {
- // fun handleMessage(msg: Message) {
- // if (msg.what === 100) {
- // val autoCheck: AutoCheck = msg.obj as AutoCheck
- // synchronized(autoCheck) {
- // val message: String =
- // autoCheck.obtainErrorMessage() // autoCheck.obtainAllMessage();
- // txtLog.append(message + "\n")
- // // 可以用下面一行替代,在logcat中查看代码
- // }
- // }
- // }
- // }, enableOffline).checkAsr(params)
- val json: String? =
- (params as Map<*, *>?)?.let { JSONObject(it).toString() } // 可以替换成自己的json // 这里可以替换成你需要测试的json
- asr.send(event, json, null, 0, 0)
- // 如果这里的json是“{}”,会到AndroidMainfest.xml中查找meta-data去填充id和ak,sk
- // asr.send(event, "{}", null, 0, 0)
- Log.i(TAG, "输入参数:$json")
- }

- /**
- * 点击停止按钮
- * 基于SDK集成4.1 发送停止事件
- */
- private fun stop(asr: EventManager) {
- Log.i(TAG, "停止识别:ASR_STOP")
- asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0) //
- }
报错,并且不进行识别
- 2024-05-06 10:23:35.801 7712-7736 ASREngine com.example.baiduspeechrecognition E EVoiceRecognitionClientWorkStatusError errorDomain : 20 errorCode : 1 desc : VAD start: start error. mLastRecognitionResult:
- 2024-05-06 10:23:35.802 7712-7736 ASREngine com.example.baiduspeechrecognition D generateErrorResult errDomain = 20 errCode = 1
解决
百度语音识别开发问题及解决方法_e/asrengine: evoicerecognitionclientworkstatuserro-CSDN博客
解决办法在这篇文章的留言里。
******百度智能云工程师: 您好您这边在AndroidManifest文件application标签增加android:extractNativeLibs="true"
浅谈extractNativeLibs_android:extractnativelibs-CSDN博客
这篇文章讲了这个选项的用处,这个选项是打包时候是否压缩so,需要设置为压缩,这可能与百度编译库的时候的选项相关。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。