您的位置:首页 > 其它

百度在线语音识别接入经验

2015-07-20 15:46 375 查看
由于最近项目需要语音识别,所以去接了一下语音识别的SDK。

分别接了讯飞的语音识别,和百度的。至于优缺点嘛,感觉讯飞的实时识别速度比较快,然后百度的是一次性上传,如果你一次识别的语音太多,就会识别比较慢,特别是在线识别。当然了百度的优点就是可以自己控制语音断点,讯飞的暂时还没有找到这个方法(有找到的麻烦告诉我)。

当然了,最后选择百度的原因在于,讯飞的审核,要求app小于50M。好吧!我的包没法变小了!

进入正题,接入的方法就不说了,按照官方的文档,肯定是可以接上的!

现在说说我遇到的几个坑,主要是IOS下面的

1.语音识别后应用的声音变小了

解决方法:在语音识别之后将Audiosession设置回来,百度语音识别的时候讲Audiosession设置为了录音状态,代码如下:

//将声音模式调回正常状态
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err = nil;
[audioSession setCategory :AVAudioSessionCategoryAmbient error:&err];
if(err)
{
//        NSOSStatusErrorDomain
NSLog(@"audioSession: %@  code = %d %@", [err domain], [err code], [[err userInfo] description]);
return;
}


2.在IOS8之后,使用语音识别之后,整个应用静音。

解决方法:在百度语音中有这样一个接口:

//- - - - - - - - - - - - - - - -功能设置- - - - - - - - - - - - - - - - - - - -
// 定制功能
// 定制语义解析功能请传入key=BDVR_CONFIG_KEY_NEED_NLU,如果开启此功能,将返回带语义的json串,含义详见开发文档说明
#define BDVR_CONFIG_KEY_NEED_NLU @"nlu"
// 定制通讯录识别功能请传入key=BDVR_CONFIG_KEY_ENABLE_CONTACTS,如果开启此功能,将优先返回通讯录识别结果
#define BDVR_CONFIG_KEY_ENABLE_CONTACTS @"enable_contacts"
// 定制SDK是否对AudioSession进行操作,如果外部需要操作AudioSession,应当通过此接口禁止SDK对AudioSession进行操作
#define BDVR_CONFIG_KEY_DISABLE_AUDIO_SESSION_CONTROL @"disable_audio_session_control"
- (void)setConfig:(NSString *)key withFlag:(BOOL)flag;
我们使用最后一个,然后自己控制Audiosession,这样就可以解决这个问题。代码如下:

// 定制SDK是否对AudioSession进行操作,如果外部需要操作AudioSession,应当通过此接口禁止SDK对AudioSession进行操作
[[BDVoiceRecognitionClient sharedInstance] setConfig:BDVR_CONFIG_KEY_DISABLE_AUDIO_SESSION_CONTROL withFlag:true];


然后,其中还碰到了一些其他的问题,不过都是小事,相信大家都能搞定,这里就不再详细的说了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: