常见问题汇总
语音识别
常见问题
1.语音识别结果与音频内容不匹配
- 语音识别返回结果与音频内容不匹配,例如:“嗨嗨嗨”、“嗯嗯嗯嗯嗯”、“什么”等错误返回。
- 解决方法:排查音频采样率、声道、格式等参数是否符合接口规范。如与要求不符,需要用工具对音频进行转码,转码工具跳转。
2.3300错误码怎么办?
- 语音识别api使用的是HTTP POST方法, BODY里直接放置json, Content-Type头部为 application/json。 并非常见的浏览器表单请求(application/x-www-form-urlencoded或者multipart/x-www-form-urlencoded)。
- 必填字段:format rate channel cuid token cuid token cuid token cuid token,请勿漏填。此外 (speech, len) 及 (url, callback) 这两组参数必须二选一,如果都填,默认处理第一组。
- 必填字段如format rate channel cuid token,请勿漏填。此外 (speech, len) 及 (url, callback) 这两组参数必须二选一,如果都填,默认处理第一种,并确认音频时长截取为60s以下。
3.3309错误码怎么办?
- wav和amr的音频,服务端会自动转为pcm,这个过程中导致转码出错。请确认下format及rate参数与音频一致,并确认音频时长截取为60s以下。
4.3301错误码怎么办?
- 识别结果实际为空。可能是音频质量过差,不清晰,或者是空白音频。
- 有时也可能是pcm填错采样率。如16K采样率的pcm文件,填写的rate参数为8000。
5.行业与场景限制
- 根据工信部《综合整治骚扰电话专项行动方案》、《关于推进综合整治骚扰电话专项行动的工作方案》,相关能力不得用于商业营销类、恶意骚扰类和违法犯罪类骚扰电话类场景,也不支持在贷款、理财、信用卡、股票、基金、债券、保险、售房租房、医疗机构、保健食品、人力资源服务、旅游等场景的骚扰电话营销行为。
6. 商务合作的流程是怎样的?
- 请在Speech官网底部点击“商务合作”,详细描述您的需求。或者在百度云提交工单申请合作。
7. 一句话说完后,如何控制不自动停止识别?/ 为何我静音一段时间后,自动停止了识别?
- 关闭VAD即可。
8. 离线可以支持识别任意词识别(听写识别)吗?
- 我们推荐使用在线识别,离线识别仅支持命令词识别。如果您有强烈、明确的离线任意词识别的场景,请详细描述您的需求,在官网底部点击“商务合作”,我们会有专人联系。
9. 觉得识别不准确怎么办?
- 请对类似的语音做多次尝试,并整理录音文件、识别的日志(带sn)、期望的识别结果以及实际的识别结果文件,在QQ群或通过百度云工单提交给我们。
10. 为何我的App进入后台后,自动停止了识别/唤醒?
- 3.0.5.6 版本进入后台后不再打断唤醒/识别
- iOS后台唤醒会出现很多问题导致产品可用性不能满足上线要求,同时为了规避各程序间的冲突,sdk会主动停止唤醒。
具体问题如:
- 与siri冲突,长按home键会被siri把录音能力夺取
- 顶部出现红条
- 无法唤起任何应用,即使程序自己都无法唤起
-
程序被系统杀死的问题无解,即便通过类似hack(比如某些程序后台播放音频)的方式保证存活率,也会导致播放和录音冲突
鉴于以上考虑,程序切到后台会自动停止唤醒功能。
11.如何同时集成语音识别和语音合成?两个.a名字是一样的,内容一样么?
- 内容不一样,同时集成只需将.a换个名字重新导入即可。同名的资源文件内容是一样的。
12.集成到自身工程之后,启动报错“vad: start error”
- 一般是因为资源文件没有正确引入。请参考demo工程资源文件的引入办法,并且在代码中检查获得资源文件的指针不为nil。
13. 识别时报错:“Server app name unknown”
- 请确认填写了正确的 api_key, secret_key, app_id,且在官网正确绑定了包名。
- 请确认您的应用的并发和日配额没有超限。
语音合成
移动端SDK常见问题
1. Android播放多段长文本
建议使用sdk内部的队列缓存。 int speak(String text, String utteranceId);
如一开始一次性调用10次speak方法,收到合成结束的onSynthesizeFinish回调后(可以收到utteranceId参数),再加入1句新的。保持sdk内部队列中一直有10个句子。
SDK内部会按照队列次序不断合成。自动按照次序播放
2. Android控制播放暂停及自定义播放
SDK是无论何种场景都会一直播放。比如有电话接入,需要暂停播放。用户需要自行实现,收到系统电话接入的事件调用pause方法, 结束后调用resume方法。
如果觉得SDK的播放方式您不满意,可以调用synthesize() 方法仅合成不播放。通过onSynthesizeDataArrived 获取音频数据,自行处理播放。
3.Android高亮当前在读的文字
onSpeechProgressChanged()根据播放音频的时长百分比回调进度,由于每个字的发音不是等长的,和实际读的文字会有误差。当一次合成的文件较长时,误差尤为明显。
4. Android播放过程中切换发音人
在线发音人, 要求在引擎空闲时切换。 SDK内部有合成队列和播放队列。其中合成队列独立,调用的句子在合成队列结束后加入播放队列。
引擎空闲是指合成队列为空,即合成全部完成。 即onSynthesizeFinish中,收到的utteranceId为最后一个。utteranceId参数是speak或synthesize方法的第二个参数。
也可以随时调用stop方式,比如最近的一句话说完时,清空播放队列和合成队列,达到引擎空闲的状态。
具体请参见demo的SwitchSpeakerListener类。
5. ios如何同时集成语音识别和语音合成?两个.a名字是一样的,内容一样么?
内容不一样,同时集成只需将.a换个名字重新导入即可。同名的资源文件内容是一样的。
6. ios如何获得合成的音频数据
请参考Demo中的synthesizerNewDataArrived
方法。注意合成的数据是逐段返回的,如果需要完整的音频,开发者自行拼接数据即可。
7. ios如何管理AudioSession
请开发者参考SDK头文件 BDS_SYNTHESIZER_PARAM_ENABLE_AVSESSION_MGMT
和BDS_SYNTHESIZER_PARAM_AUDIO_SESSION_CATEGORY_OPTIONS
配置说明或者文档关于AVAudioSession部分。如果无法达成预期效果,建议收取合成的音频数据,自行播放。
8. ios如何实现后台播放、如何实现锁屏界面的播放、显示
SDK内部不会对后台、锁屏相关功能做任何控制,但会在必要的时候调用setActive接口对外部音频进行打断及恢复,会影响某些场景下的锁屏显示,如果开发者不希望SDK对AudioSession进行操作自己管理,可以通过参数配置接口,把BDS_SYNTHESIZER_PARAM_ENABLE_AVSESSION_MGMT对应的value设置为NO,即可屏蔽SDK内部的操作。建议开发者自行收取合成音频数据,播放音频的同时来实现相关功能。
9. 商务合作的流程是怎样的?
请在AI官网底部点击“商务合作”,详细描述您的需求。或者在百度云提交工单申请合作。
10. 如何反馈使用问题
在反馈问题之前,请开发者务必在Demo测试并复现。
通过各个渠道反馈问题时,请务必详细描述以下信息:
问题描述:(具体问题,稳定复现/概率)
SDK 版本:(是否已经切换到最新版本)
是否已在Demo中复现:请务必在Demo中复现遇到的错误。无法在Demo复现的问题相对难以定位原因。
若能在Demo中复现,请描述:
SDK:(SDK类型,版本号)
初始化引擎代码:(在线引擎、离线引擎代码片段)
APPID:
复现逻辑:(如何复现)
完整日志:(附上开启Debug模式的,从启动到结束的完整日志)
呼叫中心
常见问题:
Q:用户侧呼叫软件提示“407 COMPLETE”错误信息
A:检查log/mrcp_debug.log日志。看是否存在连接超时、请求参数不正确等错误。
Q:mrcp服务端口号如何配置?
A:在conf/unimrcpserver.xml进行配置,默认SIP端口5060。如果公司有防火墙限制,请记得打开相应端口。
Q:提示service unavailiable,MRCP session错误等
A:可能是mrcp server没有启动成功、网络不通等。如果使用MRCP自带测试工具测试正常,则可能是用户前端配置错误。
Q:提示“MRCP session has not opened after 5000 ms”错误
A:检查log/mrcp_debug.log日志。若无错误信息,则需检查FreeSWITCH配置。
Q:是否可以使用${SERVER_ROOT}/mrcp-server/bin中的asrclient进行识别?
A:asrclient仅为辅助测试验证工具,如果用来识别较长的音频,则可能会因说话停顿被VAD截断导致不能完全识别。
Q:是否有VAD功能?
A:系统自带VAD功能。
Q:语音识别时,日志中出现err_no:-2错误
A:音频不够清晰或者有环境噪声被误识别。可检查audio目录下相应音频是否清晰。相关错误码可查看错误码
部分。
Q:是否可通过发送超时时间参数,用户在该时间内不说话则认为超时?
A:conf/mrcp-asr.conf中NO_INPUT_TIMEOUT_MS为全局默认超时时间,每次请求都有效。用户也可通过发送RECOGNIZER_HEADER_NO_INPUT_TIMEOUT自行设置单次请求超时时间,默认请求开始时开始计时。用户可通过在请求时发送RECOGNIZER_HEADER_START_INPUT_TIMERS为false设定开始时不计时,然后在合适的时机,发送RECOGNIZER_START_INPUT_TIMERS事件开始计时。
Q:是否有办法使用asrclient 批量识别多个文件 ?
A:不支持,请自行开发前端呼叫软件。
Q:合成日志出现“not supported voice name”错误
A:合成目前仅支持conf/mrcp-proxy.conf里默认配置的发音人。请不要在请求时设置SYNTHESIZER_HEADER_VOICE_NAME,或者设置为与配置中相同的发音人 fduxiaowen
Q:使用FreeSWITCH软电话听不到TTS声音
A:检查MRCP服务器audio目录下的pcm是否有生成的TTS音频。若存在正确音频,则MRCP TTS功能正常。需检查FreeSWITCH相关配置。
Q:在mrcp_debug.log里出现unsupportedcontent_type:application/xml是什么原因?
A:根据标准,识别请求content_type要写成application/srgs+xml、text/uri-list等。
Q:unimrcpserver.xml里面的sip-ip和sip-ext-ip应该怎么填写?sip-ip是本地ip,那sip-ext-ip呢?
A:sip-ext-ip文档中未要求填写,不用填写。
Q:mrcp server是在检测800ms无用户说话语音输入时,就认为一段话结束,执行asr吗?还是用户边说话边asr吗?
A:根据传送的语音流实时识别,默认识别时长55秒,说话间隔超过800ms截断。
Q:请问你们MRCP server返回的格式支持 NLSML 数据格式吗?
A:现在返回的识别结果,content-type就是application/nlsml+xml的。
Q:MRCP返回检测到说话得消息比较灵敏,噪声误识别有什么办法优化嘛?
A:可以在mrcp-asr.conf中DETECT_START_OF_INPUT_BY_VAD参数设置为0。参数改为0后,单字识别结果将会被忽略,只有SINGLE_WORD_WHTIL_LIST白名单中的单字可以被识别。
Q:遇到问题如何求助
A:可以将audio下相应logid的所有音频及log/mrcp_debug.log日志文件发送至bsic-support@baidu.com。
DEMO 及 SDK问题反馈
- SDK及DEMO BUG反馈格式:
- 现象描述 调用我们的xxx方法之后,报错。
- 输入参数:(DEMO中含有“反馈”两个字的日志)
- 输出结果:
- 音频文件: 通过OUT_FILE参数获取录音音频;
- 用户日志:先清空日志,之后调用我们的某个方法结束。请提供给我们之中的完整日志。
- 手机信息: 手机型号, android、ios版本号等信息
问题反馈及商务沟通请联系:
邮箱:bsic-support@baidu.com