业务需求,需要集成语音识别功能,供移动端使用。
经过初步了解,决定集成国内主流的三家厂商,科大讯飞、百度、腾讯。 讯飞不用说,在语音识别这块之前被评为全球最聪明的50家公司之一,后面两个都是传统的大厂。
VAD Voice Activity Detection, 语音端点检测技术。
这个技术的主要任务是从带有噪声的语音中准确的定位出语音的开始和结束点,因为语音中含有很长的静音,也就是把静音和实际语音分离开来,因为是语音数据的原始处理,所以VAD是语音信号处理过程的关键技术之一。它的好坏,直接影响成败,由于技术本身的特殊性,所以在涉及语音信号处理的领域,端点检测技术的应用非常广泛。语音识别系统在识别或者声学模型训练阶段所遇到的第一个技术就是端点检测,把静音和噪声作为干扰信号从原始数据中去除,并且端点检测对于语音识别系统的性能至关重要。
账号注册地址:https://www.xfyun.cn/doc/platform/quickguide.html
集成文档说明地址:https://www.xfyun.cn/doc/asr/voicedictation/Android-SDK.html
其移动端的说明为语音转写,没有区分长语音和短语音,也就是所谓的实时语音转写,集成还算方便,使用过程中系统会根据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
账号注册地址: 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
百度在集成过程中遇到了参数设置不生效的问题,调试了好久,提了工单才知道很多官网上列出的参数是需要其自训练模型的,这一点并没有说明清楚,需要吐槽一下。
账号注册地址: https://cloud.tencent.com/document/product/378/17985
集成文档说明地址:https://cloud.tencent.com/document/product/1093/35722
实时语音识别也分长短语音两种模式,静音检测开启后,支持设置超时时间。
回调事件, 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秒以内。当然科大讯飞没有
这种模式,只能将其超时时间尽量设大,来减少体验中的不一致了。