【置顶】语音识别Android版本问题及答案汇总贴

0半君0 2016年1月18日提问

  • 44 回答

    如何使用离线识别,怎么申请?

    离线识别无需申请,所有开发者都可以免费使用。要使用离在线功能(正式授权),请确保

    1. 开放平台中已经绑定了包名
    2. 程序的AndroidManifest.xml(如果是ios请参考文档查看设置方式)配置APP_ID
    3. 不要设置临时授权路径

    注意事项:

    1. 离在线是纯在线的一个补充,至少联网一次才能真正使用离线
    2. 离线的参数配置比较复杂,务必参考文档和demo一步一步对比

    临时离线授权文件在哪里下载?

    临时授权的下载地址:http://yuyin.baidu.com/applicense/downloadLicense

    对于最新版本的Android语音识别SDK,可以直接使用正式授权。参考“如何使用离线识别,怎么申请?”

    Android Studio如何集成语音SDK?

    截止目前(2016.8)语音SDK上不支持通过gradle命令来直接引入,后续将会支持。对于Android Studio请通过拷贝jar和so 加配置命令的方式来引入语音SDK

    Android版本无法获取录音机权限

    • 如果targetSdkVersion设置为>=23的值,需要程序中动态获取录音权限如。
    requestPermissions(new String[]{
                    Manifest.permission.RECORD_AUDIO
            }, YOUR_REQUEST_CODE); // requestPermissions是Activity的方法
    • 如果targetSdkVersion<23,仍有无法录音问题,则可能是AndroidManifest.xml中未声明"android.permission.RECORD_AUDIO"导致或因为安全软件非正常方式限制录音导致。

    Android SDK 2.1版本如何使用离线

    2.1版本支持离线命令词识别,但不支持离线撰写(如果确实有撰写需求,暂请使用2.0版本)

    2.1版本集成离线(命令词)识别的步骤:

    • 使用语法编辑器编辑语法,http://yuyin.baidu.com/asr#m5,编辑并保存得到baiduspeechgrammar.bsg语法文件(文件名可以随意更改)
    • 将baiduspeechgrammar.bsg文件放置到assets目录
    • 识别参数中增加代码 intent.putExtra("grammar", "assets:///baiduspeechgrammar.bsg")
    • 集成完毕。

    需要注意的是离线识别需要联网获取授权,参见“如何使用离线识别,怎么申请?”


44个答案
  • 3 评论
    liu10028 2016年1月18日回答

    问题:

    Android语音识别,识别过程正确,但是识别结果为“哦,啊,我,啊,噢”等数据


    答案:

    可能原因:

    1.采样率和参数不一致

    2.语音质量有问题



  • 1 评论
    liu10028 2016年1月18日回答

    问题:

    Android单独用语音识别没问题加了在线语音合成的armeabi和armeabi_v7a 语音识别就报错了


    答案:

    删除armeabi_v7a,只保留armeabi目录。


  • 0 评论
    liu10028 2016年1月18日回答

    问题:

     Android离在线融合SDK,离线识别使用常见问题:


    答案:

    1、是否下载离线资源包了,并在程序中设置了指定离线资源包的资源路径。(如果没有下载或者指定资源路径会报错误码:7051、7052)

    2、离线识别只支持16K采样率。不支持8K采样率(常错误码7057)

    3、离线识别支持部分垂类(设置了不支持的垂类会报错误码7058)


  • 0 评论
    liu10028 2016年1月18日回答

    问题:

    Android离线识别要同时使用离线指令里面的两个垂直领域怎么设置?


    答案:

    离线版本不能加在多个垂类,如果想离线使用多个垂直领域建议使用在线识别。


  • 0 评论
    liu10028 2016年1月18日回答

    问题:

    Android 离在线识别,报错EVEN_ERROR:#5,other Clienterror,reason:#7051,StartRecognizing error.(connot switch to online:network unavailable.)


    答案:

    错误7051是由于没有指定离线资源包的路径。需要从官网下载离线资源包并在程序中设置指定离线资源包的路径。


  • 0 评论
    liu10028 2016年1月18日回答

    问题:

    Android离在线融合SDK,android语音识别可以设置成离线模式吗?有网络的时候也用离线模式可以吗?


    答案:

    离线只能作为在线识别补充,不能完全离线,网络不佳或没有网络(离线需要定期联网更新授权)时自动切换使用,肯定离线更快,而且不需要流量


  • 2 评论
    liu10028 2016年1月18日回答

    问题

    Android在线1.6在线识别 ,语义解析为空,不返回语义解析结果。


    答案

    1、通过VoiceRecognitionConfig.setResourceType(3) 3指的资源类型为:语音识别+语义解析+wise 

    2、输入法模式下不支持语义解析。


  • 0 评论
    liu10028 2016年1月18日回答

    问题:

    196609错误码,一般的出错原因和解决方案?

     

    答案

    错误码为30001(16进制)录音设备不可用,请尝试以下解决方案:

    1.重启手机。

    2.查看是否使用虚拟机,建议真机调试,虚拟机很多不能识别到麦克风设备

    3.查看你的工程是否添加了录音权限

    4.查看是否其他应用占用了录音权限


  • 0 评论
    liu10028 2016年1月18日回答

    问题:

    339972错误码,一般的出错原因和解决方案?

     

    答案

    错误码53004(16进制),可能原因:

    1.key 填写有问题

    2.没有申请识别服务

    3.本机网络问题


  • 0 评论
    liu10028 2016年1月18日回答

    问题:

    百度语音识别时怎么加入标点符号?


    答案

    现在语音识别支持两种vad模式的识别,搜索模式(search)和输入模式(input),搜索模式下适合短句识别默认不带标点,输入模式下适合长语音的识别并且带标点符号,请根据实际场景需要选择合适的模式。


  • 1 评论
    liu10028 2016年1月18日回答

    问题:

    语音识别SDK支持的音频格式、采样率有哪些?


    答案:

    支持的压缩格式有:pcm、wav、opus、speex、amr、x-flac。原始 PCM 的录音参数必须符合 8k/16k 采样率、16bit 位深、单声道


  • 1 评论
    liu10028 2016年1月18日回答

    问题:

    百度语音能否接收蓝牙设备的语音输入进行处理?


    答案:

    百度语音SDK内部不带蓝牙录音,您可以自行使用蓝牙录音,将音频流传入SDK进行识别。


  • 0 评论
    liu10028 2016年1月18日回答

    问题

    java.lang.NoClassDefFoundError: com.baidu.voicerecognition.android.VoiceRecognitionConfig


    答案:

    VoiceRecognition.jar包的导入有问题,请尝试以下解决方案:

    将VoiceRecognition.jar删除重新导入,Java Build Path->Libraries 加入VoiceRecognition.jar然后在order and export 中勾选VoiceRecognition.jar相关依赖项(当前工程的VoiceRecognition.jar 在 android private libraries 下面)然后Clean下当前工程。


  • 0 评论
    liu10028 2016年1月19日回答

    问题

    百度语音识别能完全离线吗?android语音识别可以设置成离线模式吗,有网络的时候也用离线模式可以吗?


    答案:

    离线只能作为在线识别补充,不能完全离线,网络不佳或没有网络(离线需要定期联网更新授权)时自动切换使用,肯定离线更快,而且不需要流量


  • 0 评论
    liu10028 2016年1月19日回答

    问题:

    如何才能提高语音识别的准确率?


    答案:

    1.自定义语音识别设置:打开百度开放云平台,在目前创建的应用下进行自定义语音识别设置。上传识别关键词文本,保存并生效。

    2.设置对应的语音识别垂类:在代码中填写识别的垂类领域,识别结果将优先指向已设置的垂类,可以使得识别结果更准确


  • 0 评论
    liu10028 2016年1月19日回答

    问题: 

    如何在语言识别时获取音频文件?


    答案:

    使用Android SDK1.6版本时:

    当VoiceClientStatusChangeListener.onClientStatusChange(int status, Object obj) 的status是VoiceRecognitionClient.CLIENT_STATUS_AUDIO_DATA时,obj为byte[]音频数据,直接保存成文件即可。

    使用Android SDK2.0离在线融合版本时:

    intent.putExtra(Constant.EXTRA_OUTFILE, "sdcard/outfile.pcm")  当次识别的录音自动保存到文件下面。

    以上相关接口的使用在各个SDK demo 里面均有使用示例,请参考使用。


  • 0 评论
    liu10028 2016年1月19日回答

    问题:

    语音识别垂类是什么意思?


    答案; 

    语音识别垂类就是特指某个领域的意思,开发者可以根据用户使用场景设定特定领域使得识别结果更准确。比如垂直领域设定为”音乐“,则在语音识别时会优先识别为音乐相关的歌曲名歌手名或者歌词。


  • 0 评论
    liu10028 2016年1月19日回答

    问题:

    使用Android SDK2.0 离在线融合SDK时出错

    SpeechRecognizer(29677):bind to recognition service failed


    答案:

    使用离在线融合SDK时,需要注册百度的语音识别服务,请在AndroidManifest.xml 中添加

    <service android:name="com.baidu.speech.VoiceRecognitionService" android:exported="false" />


  • 0 评论
    liu10028 2016年1月19日回答

    问题:

    百度在线识别有识别次数限制吗?


    答案

    语音识别服务开通之后即可获得50000次/日的在线识别调用额度,如果无法满足需求可以申请提高配额,审核通过后可以无限制使用,具体操作请参考 http://yuyin.baidu.com/docs/asr/82


  • 1 评论
    liu10028 2016年1月19日回答

    问题:

    百度语音支持音频文件识别吗,怎么使用?


    答案:

    在Android SDK1.6 版本中提供了feedAudioBuffer(byte[] buffer,int offset,int size) 接口支持音频数据传入识别,具体查看SDK demo参考示例。

    在Android SDK2.0 版本中可以设置文件路径,对文件进行识别 intent.putExtra(“infile”, "sdcard/file.pcm")

    请注意音频文件格式必须符合:原始 PCM 的音频参数必须符合 8k/16k 采样率、16bit 位深、单声道。识别的音频长度最大为60S,采样率的参数设置注意与你的音频参数一致。


  • 0 评论
    liu10028 2016年1月19日回答

    问题:

    在项目中同时使用其他百度SDK,引起编译错误。

    Unable to execute dex: Multiple dex files define Lcom/baidu/android/common/logging/Configuration;

    [2015-10-22 11:02:57 - VoiceRecognitionDemo] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/baidu/android/common/logging/Configuration;


    答案:

    与其他百度SDK冲突一般是由于使用了相同的基础库galaxy.jar,请检查是否重复导入了该jar包,在项目当中仅保留一份即可


  • 0 评论
    liu10028 2016年1月19日回答

    问题

    Android在线识别errorCode = 262144是什么原因?


    答案:

    错误码40000(16进制),联网错误.请检查:

    1.本机网络环境是否正常,

    2.使用公用网络的话请检查网络是否屏蔽了百度语音的服务器地址和端口(服务器地址vop.baidu.com 端口80)


  • 0 评论
    厉天 2016年1月19日回答

    问题:

    离在线融合sdk中(Android端),对于slot数据, 在线文档上没有找到详细的说明介绍,

    1)对于name、song、artist。。。。 这些槽数据中,是否有数量上限的限制

    2)对于各个槽中的每一项数据,是否有长度限制?

    3)对于各个槽中的中每一项数据,有哪些合法性限制?

    4)这些数据文法的编译:

      a) 是每次识别时都会编译,还是首次编译之后后续不再编译;

      b) 是否每次识别都需要携带这些槽数据;

      c) 可不可以根据识别场景单独传入某个槽的数据,还是5个离线槽都要传递数据

       

    答案:

    1.建议不超过500个。

    2.最好不要超过10个汉字的长度。

    3.对于槽中的数据不要出现 空格,特殊字符,英文(英文识别效果较差)等以免影响识别效果。

    4.ab.由于这些数据的编译时间很短,基本可以忽略消耗时间,所以每次识别前编译对性能消耗不大,建议每次识别前编译一次。c.可以根据自己识别场景在识别之前传入需要的槽数据。

  • 0 评论
    liu10028 2016年1月19日回答

    问题:

    53006错误码,一般的出错原因和解决方案?

     

    答案:

    53006的错误是语音过长,建议一次识别的语音长度控制在60s以内。


  • 0 评论
    厉天 2016年1月19日回答

    问题:

    我按照开发指南申请了离线授权,但是还是提示我授权失败,什么原因?


    回答:

    使用的是临时授权

     1.请检查是否设置intent.putExtra("license-file-path", "/sdcard/temp_license_2015-05- 19"),授权文件是否访问正常。

     2.临时授权文件的有效期是30天,如果超过期限授权将失败,建议申请正式授权。

    使用的是正式授权

     1.如果之前使用的是临时授权,请删除临时授权的相关代码,否则将优先使用临时授权。

     2.请检查appkey,包名信息等是否都填写正确。

     3.首次使用的时候,会自动下载授权文件,请保证在首次使用时网络连接正常,否则无法下载 离线授权文件。



  • 0 评论
    liu10028 2016年1月19日回答

    问题:

    百度语音能够持续识别吗?


    答案:

    百度语音一次最长识别60S的语音.


  • 0 评论
    水寒319 2016年1月21日回答

    问题:

    apk根据需求需要做成系统内置的,放到system/app下是否能使用离线功能?


    答案:

    如果将app放到system/app目录下,程序将没有system/app目录的读取权限,不能访问到so库,从而会导致不能进行使用离线功能。


  • 0 评论
    水寒319 2016年1月22日回答

    问题:

    Android语音识别,怎么上传联系人?


    答案:

    可以通过uploadContacts()方法,上传联系人,Demo如下:

    private void uploadContacts(){
    DataUploader dataUploader = new DataUploader(ApiDemoActivity.this);
    dataUploader.setApiKey(Constants.API_KEY, Constants.SECRET_KEY);

    String jsonString = "[{\"name\":\"兆维\", \"frequency\":1}, {\"name\":\"林新汝\", \"frequency\":2}]";
    try{
    dataUploader.uploadContactsData(jsonString.getBytes("utf-8"));
    }catch (Exception e){
    e.printStackTrace();
    }
    }


    上传联系人之后可以可以通过enablecontacts(),启动通讯录识别。

     
    1. public void enableContacts()


  • 0 评论
    水寒319 2016年2月16日回答

    问题:

    android语音识别为什么会出现引擎忙这个问题?


    答案:

    出现引擎忙的原因一般是:上一次识别位结束就开始了要求下一次识别,

    解决方法:识别结束前不要开始下次识别。


  • 0 评论
    xiao12345658 2016年2月18日回答

    同一个app为什么有些手机报java.util.concurrent.ExecutionException: java.lang.Exception: #5, Other client side errors., reason: #7052, startRecognizing error.这个错误 ,有些使用正常。离在线包已下载且路径正确。

  • 0 评论
    AutumnwindHK 2016年3月5日回答

    123

  • 0 评论
    枫柳蝶韵 2016年5月25日回答

    离线识别错误


    Caused by: java.lang.Exception: #2, Other network related errors.. network unavailable.(cannot switch to offline: params not supported.)

  • 0 评论
    186*****717 2016年6月8日回答

    MediaPlayer-JNI: QCMediaPlayer mediaplayer NOT present

    MediaPlayer: Should have subtitle controller already set


    在小米4 手机上调用的时候 一直处在 麦克风启动中 不知道怎么回事

  • 0 评论
    c5812 2016年6月20日回答

    是不是录音权限被安全软件禁用了

  • 0 评论
    priverbs 2016年7月30日回答

    可以先录音,后识别吗?

  • 0 评论
    chong1352 2016年8月5日回答

    支持语义识别的是用

    VoiceRecognitionClient

    还是用

    SpeechRecognizer

    为什么不统一接口

  • 0 评论
    cnsaturn 2016年8月15日回答

    百度ASR 只要设置了离线路径就OOM,不设置在线是完全可以行

  • 0 评论
    anyptt 2016年9月7日回答

      

  • 0 评论
    风驰天下hg 2016年9月28日回答

    下载了离在线融合SDK Android,写程序的时候一直找不到DialogRecognitionListener这个类

  • 0 评论
    158*****886 2016年10月11日回答

    使用离在线包的时候,报错:-EVENT_ERROR, #5, Other client side errors. request token failed, error: unknown, desc: unknown client id, used AK=this/this(cannot switch to offline: params not supported.)

    我只想使用在线功能,不知道哪里出了问题,求教。先谢了。

  • 0 评论
    無碼亂射 2016年10月25日回答

    小米Note 4.4.4系统 语音识别demo 提示无法打开麦克风(已打开权限)

    三星s7 6.0系统 语音识别 开始识别直接结束 提示无法识别


    一共测试了 三部手机 采样率 虽然小 但是 可见 兼容性 有待提高

  • 0 评论
    破茧化蝶014 2017年2月3日回答

    02-03 10:58:28.455 7999-9513/com.sunlike E/AndroidRuntime: FATAL EXCEPTION: Thread-8629

                                                               Process: com.sunlike, PID: 7999

                                                               java.lang.UnsatisfiedLinkError: No implementation found for int com.baidu.speechsynthesizer.utility.SpeechDecoder.decode(byte[], int, short[], int[], int, int) (tried Java_com_baidu_speechsynthesizer_utility_SpeechDecoder_decode and Java_com_baidu_speechsynthesizer_utility_SpeechDecoder_decode___3BI_3S_3III)

                                                                   at com.baidu.speechsynthesizer.utility.SpeechDecoder.decode(Native Method)

                                                                   at com.baidu.speechsynthesizer.b.a$a.run(SpeechDataOrganizer.java:294)

    这个是什么问题

  • 0 评论
    banglsb007 2017年2月21日回答

    System.err(20549): java.lang.UnsupportedOperationException: easr not found!

    System.err(20549): at com.baidu.speech.EventManagerVadModule$ModelVad.<init>(EventManagerVadModule.java:31)

    请问这是什么问题?


  • 0 评论
    灵犀一动_ 2017年3月6日回答

    我加了<service android:name="com.baidu.speech.VoiceRecognitionService" android:exported="false" />可是还是显示这个错E/SpeechRecognizer: bind to recognition service failed


撰写答案