基于Aispeech的智能对话APP(六)--开启终止识别,VAD相关设置,获取性别年龄信息

    技术2022-07-10  195

    基于Aispeech的智能对话APP(六)--开启/终止识别

    一.开启/终止识别1.1 开启/停止/取消识别1.2 实时回传音量1.3 更新云端识别模型 二.VAD相关设置2.1 开启/关闭VAD 三.获取性别/年龄信息3.1 获取性别/年龄信息 四.代码下载

    本篇博文是我自己在学习Aispeech的过程中,分享我遇到的问题以及如何解决。在文章的最后我会上传其代码。感兴趣的小伙伴,请自行下载。

    一.开启/终止识别

    如果您期望仅开启识别并获取识别结果,可以在需要的时候调用下面的接口。 ASREngine

    //获取识别引擎 ASREngine asrEngine = DDS.getInstance().getAgent().getASREngine(); //开启识别 asrEngine.startListening(new ASREngine.Callback() { @Override public void beginningOfSpeech() { AILog.i(TAG, "检测到用户开始说话"); } /** * @buffer 音频数据属性:单声道 16bit */ @Override public void bufferReceived(byte[] buffer) { AILog.i(TAG, "用户说话的音频数据"); } @Override public void endOfSpeech() { AILog.i(TAG, "检测到用户结束说话"); } /** * @results. eof 为 0 代表识别过程中的结果, 为 1 代表识别结束的最终结果 * {"var":"今","sessionId":"0b48c0d086efc42d55bbf1068137655d","recordId":"6b3ccb1ee745d42fa6ddb74330b1c059","eof":0} * {"var":"今天 天气","sessionId":"0b48c0d086efc42d55bbf1068137655d","recordId":"6b3ccb1ee745d42fa6ddb74330b1c059","eof":0} * {"sessionId":"0b48c0d086efc42d55bbf1068137655d","pinyin":"jin tian tian qi","recordId":"6b3ccb1ee745d42fa6ddb74330b1c059","eof":1,"text":"今天 天气"} */ @Override public void partialResults(String results) { AILog.i(TAG, "实时识别结果反馈"); } /** * @results. {"sessionId":"0b48c0d086efc42d55bbf1068137655d","recordId":"6b3ccb1ee745d42fa6ddb74330b1c059","eof":1,"text":"今天天气","pinyin":"jin tian tian qi"} */ @Override public void finalResults(String results) { AILog.i(TAG, "最终识别结果反馈"); } @Override public void error(String error) { AILog.i(TAG, "识别过程中发生的错误"); } @Override public void rmsChanged(float rmsdB) { AILog.i(TAG, "用户说话的音量分贝"); } }); //主动结束此次识别 asrEngine.stopListening(); //取消此次识别 asrEngine.cancel();

    设置实时回传音量

    // 设置实时回传音量大小, 默认为true // 设置false之后, ASREngine.Callback.rmsChanged()不再回传音量变化值 DDS.getInstance().getAgent().getASREngine().enableVolume(boolean enable);

    1.1 开启/停止/取消识别

    开启/停止/取消识别代码:

    public void startListening() { //获取识别引擎 ASREngine asrEngine = DDS.getInstance().getAgent().getASREngine(); //开启识别 try { asrEngine.startListening(new ASREngine.Callback() { @Override public void beginningOfSpeech() { Log.i(TAG, "检测到用户开始说话"); } @Override public void bufferReceived(byte[] buffer) { Log.i(TAG, "用户说话的音频数据"); } @Override public void endOfSpeech() { Log.i(TAG, "检测到用户结束说话"); } @Override public void partialResults(String results) { Log.i(TAG, "实时识别结果反馈:" + results); } @Override public void finalResults(String results) { Log.i(TAG, "最终识别结果反馈"); } @Override public void error(String error) { Log.i(TAG, "识别过程中发生的错误"); } @Override public void rmsChanged(float rmsdB) { Log.i(TAG, "用户说话的音量分贝"); } }); toMain(); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void stopListening() { try { //获取识别引擎 ASREngine asrEngine = DDS.getInstance().getAgent().getASREngine(); //主动结束此次识别 asrEngine.stopListening(); toMain(); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void cancelListening() { try { //获取识别引擎 ASREngine asrEngine = DDS.getInstance().getAgent().getASREngine(); asrEngine.cancel(); toMain(); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }

    1.2 实时回传音量

    实时回传音量代码:

    public void disableVolume() { // 设置实时回传音量大小, 默认为true // 设置false之后, ASREngine.Callback.rmsChanged()不再回传音量变化值 try { DDS.getInstance().getAgent().getASREngine().enableVolume(false); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void enableVolume() { // 设置实时回传音量大小, 默认为true // 设置false之后, ASREngine.Callback.rmsChanged()不再回传音量变化值 try { DDS.getInstance().getAgent().getASREngine().enableVolume(true); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }

    1.3 更新云端识别模型

    更新云端识别模型代码:

    public void updateAsrModel1() { try { DDS.getInstance().getAgent().getASREngine().updateAsrModel("aihome"); toMain(); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void updateAsrModel2() { try { DDS.getInstance().getAgent().getASREngine().updateAsrModel("airobot"); toMain(); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void updateAsrModel3() { try { DDS.getInstance().getAgent().getASREngine().updateAsrModel("aicar"); toMain(); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void updateAsrModel4() { try { DDS.getInstance().getAgent().getASREngine().updateAsrModel("aicommon"); toMain(); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void getAsrModel() { try { String asrMode = DDS.getInstance().getAgent().getASREngine().getAsrModel(); Log.d(TAG, "asrMode:" + asrMode); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }

    二.VAD相关设置

    如果您期望修改VAD后端检测的时间,可以在需要的时候调用下面的接口。

    参数说明 millis 后端检测时间,单位毫秒,默认500毫秒。即若VAD在用户说话时停顿超过一定的时间,则认为用户已经说完,发出sys.vad.end消息,结束录音。

    setVadPauseTime

    //设置VAD后端停顿时间 DDS.getInstance().getAgent().getASREngine().setVadPauseTime(1000); //获取VAD后端停顿时间 DDS.getInstance().getAgent().getASREngine().getVadPauseTime();

    2.1 开启/关闭VAD

    开启/关闭VAD代码:

    public void enableVad() { try { DDS.getInstance().getAgent().getASREngine().enableVad(); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void disableVad() { try { DDS.getInstance().getAgent().getASREngine().disableVad(); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }

    三.获取性别/年龄信息

    在初始化DDS SDK的时候加入如下配置:

    config.addConfig(DDSConfig.K_USE_GENDER, "true"); config.addConfig(DDSConfig.K_USE_AGE, "true");

    然后订阅message:sys.dialog.start 内容为:{“gender”:“male”,“age”:“youth”,“reason”:“wakeup.major”}

    gender就是性别字段,age就是年龄字段,性别年龄信息只有在主唤醒词唤醒后,才会发出。

    3.1 获取性别/年龄信息

    获取性别/年龄信息代码:

    public void getGenderWithPcm() { byte[] buffer = AssetsUtil.getFile(this, "xiaole.wav"); try { String genderResult = DDS.getInstance().getAgent().getASREngine().getGenderWithPcm(buffer); Log.d(TAG, "genderResult = " + genderResult); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void getAsrppWithPcm() { // 需要添加此配置才能生效 // config.addConfig(DDSConfig.K_USE_AGE,"true"); // config.addConfig(DDSConfig.K_USE_GENDER,"true"); byte[] buffer = AssetsUtil.getFile(this, "xiaole.wav"); try { String asrppResult = DDS.getInstance().getAgent().getASREngine().getAsrppWithPcm(buffer, ASREngine.AsrppType.GENDER, ASREngine.AsrppType.AGE); Log.d(TAG, "asrppResult = " + asrppResult); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }

    四.代码下载

    如果有问题无法解决或者对代码有兴趣的小伙伴,可以直接下载DUIdemo2.6.zip。

    Processed: 0.014, SQL: 9