百度语音识别开发笔记

ops/2024/9/25 17:19:42/

目录

简述

开发环境

1、按照官方文档步骤开通短语音识别-普通话

2、创建应用

3、下载SDK

4、SDK集成

5、相关接口简单说明

5.1权限和key

5.2初始化

5.3注册回调消息

5.4开始转换

5.5停止转换

6、问题


简述

最近想做一些语音识别的应用,对比了几个大厂提供的语音合成,其中有些提供了几个月免费试用,对于我想长期使用的显然是不合适,其中百度的语音识别可以按照调用量进行收费,对于我这种厂期小使用量非常合适,一条才3里,3条才1分。所以就做一下百度语音识别的集成,这里只讲一下最简单的使用,很多参数可以设置,需要自己去研究了。

开发环境

android studio:Android Studio Jellyfish | 2023.3.1
语音识别版本:bdasr_V3_20210628_cfe8c44

1、按照官方文档步骤开通短语音识别-普通话

语音技术 (baidu.com)

2、创建应用

这里顺便打开文档和下载SDK

创建后会得到appid,api key,secret key

3、下载SDK

语音技术 (baidu.com)

例程和相关文档在这个压缩包中。

4、SDK集成

语音技术 (baidu.com)

将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,当然百度的文档里使用了另一个方法集成,也可以使用。

5、相关接口简单说明

部分接口说明在压缩包的 demo_development_doc.md文件里

5.1权限和key

在您的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

5.2初始化

初始化EventManager对象

val asr: EventManager = EventManagerFactory.create(LocalContext.current, "asr")

5.3注册回调消息

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)

5.4开始转换

/*** 基于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 // 这里可以替换成你需要测试的jsonasr.send(event, json, null, 0, 0)// 如果这里的json是“{}”,会到AndroidMainfest.xml中查找meta-data去填充id和ak,sk
//    asr.send(event, "{}", null, 0, 0)Log.i(TAG, "输入参数:$json")
}

5.5停止转换

/*** 点击停止按钮* 基于SDK集成4.1 发送停止事件*/
private fun stop(asr: EventManager) {Log.i(TAG, "停止识别:ASR_STOP")asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0) //
}

6、问题

报错,并且不进行识别

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,需要设置为压缩,这可能与百度编译库的时候的选项相关。


http://www.ppmy.cn/ops/35746.html

相关文章

杰发科技AC7801——支持的纠错功能

1. 复位寄存器保留复位类型 低压检测复位&#xff08;LVD Reset&#xff09; 集成了一个低压保护系统&#xff0c;以便在电源电压发生变化期间保护存储器内容和控制 MCU 系统状态。该系统由上电复位(POR)电路和 LVD 电路组成&#xff0c;LVD 可以配置为不同的复位基准&#x…

ComfyUI 基础教程(十三):ComfyUI-Impact-Pack 面部修复

SD的WebUI 中的面部修复神器 ADetailer,无法在ComfyUI 中使用。那么如何在ComfyUI中进行面部处理呢?ComfyUI 中也有几个面部修复功能,比如ComfyUI Impact Pack(FaceDetailer),以及换脸插件Reactor和IPAdapter。 ComfyUI-Impact-Pack 是一个功能强大的插件,专为 ComfyUI …

Node.js及其生态:分享Node.js的基础知识,包括调试,流,模块等。同时也可以介绍一些流行框架如Express,Koa,NestJS等

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞 I/O 模型&#xff0c;使其轻量又高效。Node.js 的包生态系统&#xff08;npm&#xff09;是全球最大的开源库生态系统。 一些基础概念&#xff1a; 调试&#xff1a;你可以使用…

202003青少年软件编程(Python)等级考试试卷(二级)

第 1 题 【单选题】 运行下方代码段,输出的结果是(   )。 a=(1,2,3)print(type(a))A :<class ‘float’> B :<class ‘int’> C :<class ‘str’> D :<class ‘tuple’> 正确答案:D 试题解析: 第 2 题 【单选题】 content.txt中原来的内容…

牛客网刷题 | BC78 KiKi说祝福语

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 2020年来到了&#…

VS Code 远程连接 SSH 服务器

文章目录 一、安装 Remote - SSH 扩展并连接远程主机二、免密连接远程主机1. 生成 SSH 密钥对2. 将公钥复制到远程服务器3. 配置 SSH 客服端4. 连接测试 随着技术的不断迭代更新&#xff0c;在 Linux 系统中使用 Vim、nano 等基于 Shell 终端的编辑器&#xff08;我曾经也是个 …

2024蓝桥杯RSA-Theorem

方法1&#xff1a;直接使用工具yafu解题 yafu的使用方法 安装&#xff1a;解压后直接使用即可&#xff0c;在文件包内&#xff0c;执行命令终端&#xff0c;输入命令行 1、如果数比较小&#xff0c;进入该文件的目录后可以直接使用: yafu-x64 factor(n) 如果是powershell&…

K8S Redis-Cluster安装(含redis-cluster-proxy、RedisInsight)

参考&#xff1a;在 K8S 中快速部署 Redis Cluster & Redisinsight 参考&#xff1a;Redis 中文文档&#xff08;一&#xff09; helm redis-cluster [rootk8s-master01 redis-cluster]# helm search repo redis-cluster NAME CHART VERSION APP …