语音识别功能集成总结

14 篇文章 0 订阅

一、场景

业务需求,需要集成语音识别功能,供移动端使用。

二、调研

经过初步了解,决定集成国内主流的三家厂商,科大讯飞、百度、腾讯。 讯飞不用说,在语音识别这块之前被评为全球最聪明的50家公司之一,后面两个都是传统的大厂。

三、基本技术概念

VAD  Voice Activity Detection, 语音端点检测技术。

这个技术的主要任务是从带有噪声的语音中准确的定位出语音的开始和结束点,因为语音中含有很长的静音,也就是把静音和实际语音分离开来,因为是语音数据的原始处理,所以VAD是语音信号处理过程的关键技术之一。它的好坏,直接影响成败,由于技术本身的特殊性,所以在涉及语音信号处理的领域,端点检测技术的应用非常广泛。语音识别系统在识别或者声学模型训练阶段所遇到的第一个技术就是端点检测,把静音和噪声作为干扰信号从原始数据中去除,并且端点检测对于语音识别系统的性能至关重要。

四、集成

1、科大讯飞

账号注册地址:https://www.xfyun.cn/doc/platform/quickguide.html

集成文档说明地址:语音听写 Android SDK 文档 | 讯飞开放平台文档中心

其移动端的说明为语音转写,没有区分长语音和短语音,也就是所谓的实时语音转写,集成还算方便,使用过程中系统会根据VAD检测自动结束识别。

回调事件:

开始

onBeginOfSpeech

结束

onEndOfSpeech

文本结束

onResult 中有isLast 自动判断

参数设置说明:https://www.xfyun.cn/doc/asr/voicedictation/Android-SDK.html#_2%E3%80%81sdk%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97

2、百度

账号注册地址: https://cloud.baidu.com/doc/UserGuide/s/Fkiprudwp

集成文档说明地址:https://ai.baidu.com/ai-doc/SPEECH/5khq3i39w

实时语音识别中分长语音和短语音两种模式,后者即开启静音检测,但是不支持设置超时时间,实际上不使用其自训练模型,只支持设置语言pid。

 回调事件,苹果平台:

正常短语音识别结束回调流程:

EVoiceRecognitionClientWorkStatusEnd

EVoiceRecognitionClientWorkStatusFinish

EVoiceRecognitionClientWorkStatusChunkEnd

用户无语音说话状态下检测到的流程:

EVoiceRecognitionClientWorkStatusError

长语音识别,用户无语音说话状态下检测

EVoiceRecognitionClientWorkStatusStart

EVoiceRecognitionClientWorkStatusChunkEnd

EVoiceRecognitionClientWorkStatusChunkEnd

EVoiceRecognitionClientWorkStatusChunkEnd

EVoiceRecognitionClientWorkStatusLongSpeechEnd

百度在集成过程中遇到了参数设置不生效的问题,调试了好久,提了工单才知道很多官网上列出的参数是需要其自训练模型的,这一点并没有说明清楚,需要吐槽一下。

百度开发者一个账号只能有半年的有效免费试用期限,如果过期会报错如下:

2021-11-08 14:08:34.985 15556-16225/com.org.BaseWebviewApp E/ASREngine: EVoiceRecognitionClientWorkStatusError errorDomain : 33 errorCode : -3004 desc : Server app name unknown.[(-3004)4: Open api request limit reached] mLastRecognitionResult:

 

3、腾讯

账号注册地址: https://cloud.tencent.com/document/product/378/17985

集成文档说明地址:语音识别 实时语音识别 - SDK 文档 - 文档中心 - 腾讯云

实时语音识别也分长短语音两种模式,静音检测开启后,支持设置超时时间。

回调事件, SDK 安卓平台还有缺陷:

3.1 目前的回调在开启静音检测后,超时后语音识别成功,不会回到onSuccess,所以暂时将语音识别文本返回放在了状态回调 onStopRecord 中。

3.2 另外就是在demo中的识别分片间隔设置太大,如果没注意的话,可能会导致自己设置的静音超时时间不生效的假象。

final AudioRecognizeConfiguration audioRecognizeConfiguration = new AudioRecognizeConfiguration.Builder()

.setSilentDetectTimeOut(true)// 是否使能静音检测,true表示不检查静音部分

.audioFlowSilenceTimeOut(3000) // 静音检测超时停止录音

.minAudioFlowSilenceTime(2000) // 语音流识别时的间隔时间

.minVolumeCallbackTime(80) // 音量回调时间

.sensitive(2.5f)

.build();

3.3 在多次重复调用开启语音识别时,可能是由于前一次任务没有结束,接口不支持并发,会导致第二次启动报错,然后终止整个识别任务。

2021-02-24 12:11:40.652 5332-5389/com.tencent.iot.speech.app I/WebsocketTaskManager: WebSocketListener onMessage String{"code":4008,"message":"客户端数据上传超时"}

2021-02-24 12:11:40.654 5332-5389/com.tencent.iot.speech.app I/MainActivity: onFailure..:code=4008, message=客户端数据上传超时

以上就是三个厂商在集成过程中总结的基本特性,总体来说,科大讯飞是老玩家了,这个比较成熟,SDK也应该好久没有更新了,在识别准确度和语音以及方言支持方面,确认无人能及。

百度的官方文档说明不够清晰,在一些参数的调试方面会让开发者比较疑惑。 腾讯也行在大力开发这方面的功能,所以更新比较频繁,就在我集成的过程中,其SDK都有了版本更新,所以对于、

集成使用者来说多少有点小白鼠的味道,不过其对于工单的反馈非常积极,也许是最新的考核机制如此,连开发都如当年的淘宝卖家一样,一再恳请五星好评了。

五、各个厂商接口统一

由于移动端提供的native功能对于前段调用来说要磨平厂商差异,所以对于接口需要进行统一处理,最终基于折中,将使用方式都改为了默认使用长语音识别,一次识别控制在60秒以内。当然科大讯飞没有

这种模式,只能将其超时时间尽量设大,来减少体验中的不一致了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java离线集成语音识别是指在Java语言环境下使用离线模式进行语音识别的技术。离线语音识别是指不依赖于网络连接进行语音识别任务的方法,相比在线语音识别,具有更好的隐私保护和稳定性。 在Java中实现离线集成语音识别,通常需要以下步骤: 1. 数据采集与预处理:使用Java语言配合相关的语音采集设备(如麦克风)进行声音的采集。采集到的声音数据需要进行预处理,包括降噪、格式转换等操作,以确保后续的识别准确性。 2. 特征提取:通过Java的音频处理库,对预处理后的声音数据进行特征提取,将声音信息转换为可以用于识别的特征向量。常用的特征提取方法包括MFCC(Mel频率倒谱系数)等。 3. 构建模型:使用Java的机器学习库或深度学习框架,使用提取到的特征向量训练离线语音识别模型。通常可以采用HMM(隐马尔可夫模型)或DNN(深度神经网络)等算法构建模型。 4. 识别:使用训练好的模型对新的声音数据进行识别。将预处理和特征提取的过程应用到输入声音数据上,并将处理后的特征向量输入到训练好的模型中进行识别。识别结果可以是文字转写或语音指令等。 需要注意的是,离线集成语音识别对硬件资源要求较高,因为离线模式下需要进行大量的数据处理和模型计算。此外,对于Java离线集成语音识别的开发,也可以考虑使用相关的第三方库或API,以简化开发过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值