我想做语音识别是这样的:
(以Android平台为例)在native C/C++层通过JNI调用Baidu的Java SDK,希望是给BaiduSDK传PCM数据,然后得出识别结果,最好是能够离线。
针对Baidu语言识别SDK,提供的android demo,我做了这些了解:
1. 首先review了Baidu_Voice_Combine_SDK_Android(VoiceRecognition-2.0.1.jar)的demo逻辑。
发现这个SDK通过intent的方式,并实现了一个Android框架下的RecognitionService,最终提供开发者一个"Baidu版的"SpeechRecognizer。
据Android reference http://developer.android.com/reference/android/speech/SpeechRecognizer.html文档显示,SpeechRecognizer所有调用都只能在UI线程。这样底层就C/C++就无法做线程异步逻辑。
总体上,Combine包虽然提供了部分离线ASR的feature,但是对调用线程有要求。
2. 转而,我分析了一下Baidu-Voice-SDK-Android-1.6.2(VoiceRecognition-1.6.2.jar)的demo
从该demo来看,Baidu的SDK提供了接受PCM数据的接口,并且没有明显的线程要求。但是该SDK貌似无法实现离线识别功能
请教的问题:
1. 目前在Android/iOS native C/C++ 下Baidu语音识别是否还无法同时满足以下需求
- * 无线程调用限制
- * 能接收PCM数据(已按Baidu要求resample成8kHz或16kHz)
- * 离线(或"离在线融合")
2. 如果Baidu开放语音识别SDK无法同时满足这样的需求,是否有商务合作的可能?
Thx!~~
关于问题1:
- natvie代码可以访问主线程,并且跨线程是android开发的基本的技能,可以从网上找到大量资料
- 2.x版本的Android SDK可以通过infile参数直接传入pcm的路径(并且该参数也支持实时音频流,如果对java熟悉的话应该不会太难),可以参考http://yuyin.baidu.com/docs/asr/169的infile或demo。
- 离线也支持infile参数,参考上一段
关于问题2:
- 可以发送邮件至voice_feedback@baidu.com