百度语音识别开发笔记

news2024/9/24 3:27:03

目录

简述

开发环境

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 // 这里可以替换成你需要测试的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")
}

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.coloradmin.cn/o/1645106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电路笔记 :芯片封装、电阻电容封装类型介绍

芯片的零件型号、位号和封装 项目定义作用零件型号每个零件在设计和制造中的唯一标识符号用于识别零件的特定规格、制造商和其他重要信息位号在电路图或设计图纸上标识每个零件位置的符号帮助准确定位每个零件的位置&#xff0c;以便正确安装到相应位置上封装电子元器件的外部…

AXS2005 2.4W单通道AB类音频功率放大器 兼容HAA8002,LTK8002,NS8002

深圳市润泽芯电子有限公司为爱协生一级代理 技术支持 欢迎试样~Tel&#xff1a;18028786817 AXS2005是爱协生推出的2.4W单通道AB类音频功率放大器 可兼容HAA8002&#xff0c;LTK8002&#xff0c;NS8002&#xff0c;XS8002&#xff0c;XA8002&#xff0c;8002B。 简介 AXS2005…

网络基础(1)网络编程套接字TCP,守护进程化

TCP协议 下面我们来学习一下TCP套接字的使用。 也就是使用一下基本的接口。首先TCP套接字的使用和UDP套接字的使用是大同小异的&#xff0c;但是多了一些步骤。 这里回顾一下&#xff1a;UDP是不可靠的&#xff0c;无连接的协议。而TCP则是可靠的&#xff0c;面向连接的协议…

LNMP部署wordpress

1.环境准备 总体架构介绍 序号类型名称外网地址内网地址软件02负载均衡服务器lb0110.0.0.5192.168.88.5nginx keepalived03负载均衡服务器lb0210.0.0.6192.168.88.6nginx keepalived04web服务器web0110.0.0.7192.168.88.7nginx05web服务器web0210.0.0.8192.168.88.8nginx06we…

真希望我父母读过这本书的笔记(二)

系列文章目录 真希望我父母读过这本书的笔记&#xff08;一&#xff09; 真希望我父母读过这本书的笔记&#xff08;二&#xff09; 文章目录 系列文章目录PART 5 培养心理健康的孩子亲子关系决定心理健康互动及来回交流如何开始交流互看游戏交流恐惧症 若遇棘手之际&#xff0…

机器学习---朴素贝叶斯

朴素贝叶斯是一种用于分类和预测任务的算法&#xff0c;他的原理是基于贝叶斯定理。其中朴素的意思是假设各特征之间相互独立。这个实验我是用的老师课后作业的题目预测某天是否会打乒乓球&#xff0c;假设每个特征独立。 目录 贝叶斯公式&#xff1a; 训练集&#xff1a; 处…

视频剪辑:视频文件元数据修改工具,批量操作提升效率和准确性

在视频剪辑和后期处理的过程中&#xff0c;除了对视频本身的编辑和修改&#xff0c;元数据的管理和修改同样重要。元数据&#xff0c;如标题、艺术家、专辑封面等&#xff0c;不仅提供了视频文件的基本信息&#xff0c;还有助于更好地组织、搜索和共享视频内容。而针对视频文件…

微信答题链接怎么做_新手也能快速上手制作

在数字营销日新月异的今天&#xff0c;如何有效吸引用户参与、提升品牌曝光度&#xff0c;成为了每一个营销人都在思考的问题。而微信答题链接&#xff0c;作为一种新兴的互动营销方式&#xff0c;正以其独特的魅力&#xff0c;在营销界掀起一股新的热潮。今天&#xff0c;就让…

XSS Challenges 靶场通关解析

前言 XSS Challenges&#xff08;跨站脚本攻击挑战&#xff09;是一种用于学习和测试跨站脚本&#xff08;XSS&#xff09;漏洞的实验性平台。这些挑战旨在帮助安全研究人员和开发人员了解XSS漏洞的工作原理、检测方法和防御技巧。 通常&#xff0c;XSS Challenges平台提供一…

高德地图在vue3项目中使用:实现画矢量图、编辑矢量图

使用高德地图实现画多边形、矩形、圆&#xff0c;并进行编辑保存和回显。 1、准备工作 参考高德地图官网&#xff0c;进行项目key申请&#xff0c;链接: 准备 2、项目安装依赖 npm i amap/amap-jsapi-loader --save3、地图容器 html <template><!-- 绘制地图区域…

使用脚本启动AppImage应用程序

因为特殊需求不能直接双击运行appimage程序&#xff0c;需要用到脚本启动 1.创建一个.desktop文件 2.添加以下内容 [Desktop Entry] //这是一个配置的开始 TypeApplication //定义了应用程序的类型&#xff0c;这里是Application Namemyapp //应用程序的名称 //应用…

ASP.NET网络商店销售管理系统的设计与实现

摘 要 随着软件技术的不断进步和发展&#xff0c;信息化的管理方式越来越广泛的应用于各个领域&#xff0c;对于任何网站系统的管理来说开发一套现代化的成员管理软件是十分必要的。通过这样的软件系统&#xff0c;可以做到成员的规范管理和快速查询&#xff0c;从而减少管理…

小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具

文章目录 小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具概述笔记效果编译AStyle的DLL初次使用接口的小疑惑测试程序 - 头文件测试程序 - 实现文件测试程序 - RC备注END 小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具 概述 上一个实验(vs2019 - ast…

记对MYSQL蜜罐的溯源反制研究

Mysql蜜罐的利用 Mysql任意文件读取 mysql蜜罐通过搭建一个简单的mysql服务&#xff0c;如果攻击者对目标客户进行3306端口爆破&#xff0c;并且用navicat等工具连接蜜罐服务器&#xff0c;就可能被防守方读取本地文件&#xff0c;包括微信配置文件和谷歌历史记录等等&#x…

LNMP一键安装包

LNMP一键安装包是什么? LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Alibaba/Amazon/Mint/Oracle/Rocky/Alma/Kali/UOS/银河麒麟/openEuler/Anolis OS Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQ…

sql中索引的使用分析

主要学习和记录sql中索引的使用 1.批量在库里插入了27W条数据 CREATE DEFINERroot% PROCEDURE 批量插入() BEGIN #Routine body goes here... DECLARE i int; SET i1; WHILE (i<100000) DO insert into kucun_info (shop_name,shop_code,shop_price,sh…

C#图像:1.图像区域分割与提取

&#xff08;1&#xff09;创建一个名为SplitImage的窗体的应用程序&#xff0c;将窗体改名为FormSplitImage。 &#xff08;2&#xff09;创建一个名为ImageProcessingLibrary的类库程序&#xff0c;为该工程添加名为ImageProcessing的静态类 &#xff08;3&#xff09;为Imag…

Video2Game:革新游戏开发,重塑虚拟世界的未来

Video2Game&#xff1a;革新游戏开发&#xff0c;重塑虚拟世界的未来 一、Video2Game的提出与意义二、Video2Game的核心技术三、Video2Game的实现与应用四、代码实例与未来展望 在数字化和虚拟化日益盛行的今天&#xff0c;高质量的交互式虚拟环境&#xff0c;如游戏和模拟器&a…

【精品毕设推荐】基于Javaee的影视创作论坛的设计与实现

点击下载原文及代码 摘 要 随着时代的发展&#xff0c;互联网的出现&#xff0c;给传统影视行业带来的最大便利就是&#xff0c;方便了影视从业人员以及爱好者的交流和互动&#xff0c;而为用户提供一个书写影评&#xff0c;阅读影评以及回复影评的平台&#xff0c;以影评为…

云原生专栏丨基于K8s集群网络策略的应用访问控制技术

在当今云计算时代&#xff0c;Kubernetes已经成为容器编排的事实标准&#xff0c;它为容器化应用提供了强大的自动化部署、扩展和管理能力。在Kubernetes集群中&#xff0c;网络策略(Network Policy)作为对Pod间通信进行控制的关键功能&#xff0c;对保障应用安全和隔离性起到了…