云端识别
ASR SDK支持Android平台的在线语音API接入, 开发者通过集成SDK获取从采集音频到识别结果输出的全链路支持。结合DUI平台强大的可定制语言模型的特性,开发者可以通过上传说法和词表的方式,对偏僻的说法以及用户相关内容的识别效果进行优化。
内置录音机
语音识别SDK按平台内置有录音机,可完成识别过程中的音频采集任务。
音频压缩
支持符合16Khz采样率、16bit数据位宽的PCM音频识别,SDK内部会对音频进行压缩。
VAD功能
VAD (语音活动检测)功能为可选项,开启后可启用本地的语音活动检测功能。关闭后,只能通过实体按键结束语音输入。
允许设置VAD后端点检测超时时间,开启后若说话停顿时长超过阈值,则主动结束本次识别的输入。
实时反馈识别结果
支持流式返回识别结果。当用户开口说话时,部分识别结果就绪后,能立即展示该部分结果。
初始化
AICloudASREngine mEngine = AICloudASREngine.createInstance();
AICloudASRConfig.Builder cloudASRBuilder = new AICloudASRConfig.Builder()
.setServer("wss://asr.dui.ai/runtime/v2/recognize")//设置服务器地址,默认不用设置
.setEnablePunctuation(false)//设置是否启用标点符号识别,默认为false关闭
.setEnableEmotion(true)
.setResourceType(type)//设置识别引擎的资源类型,默认为comm
.setLocalVadEnable(true)
.setCloudVadEnable(false)
.setEnableNumberConvert(true)//设置启用识别结果汉字数字转阿拉伯数字功能
.setVadResource(SampleConstants.VAD_RES)
.setVadPauseTime(500)
.setCustomWakeupWord(jsonArray)//设置自定义唤醒词
.setWakeupWordVisible(false)//是否过滤setCustomWakeupWord设置的oneshot句首唤醒词,默认为false,不顾虑
.setEnableSNTime(true)//设置rec结果增加对齐信息接口
//.setEnableTone(false)//设置音调功能接口
.setEnableLanguageClassifier(true)//设置语言分类功能接口
.setCloudVadEnable(true);//设置是否开启服务端的vad功能,默认开启为true
mEngine.init(cloudASRBuilder.build(), new AIASRListener(){
@Override
public void onReadyForSpeech() {
resultText.setText("请说话...");
}
@Override
public void onBeginningOfSpeech() {
resultText.setText("检测到说话");
}
@Override
public void onEndOfSpeech() {
resultText.append("检测到语音停止,开始识别...\n");
}
@Override
public void onRmsChanged(float rmsdB) {
showTip("RmsDB = " + rmsdB);
}
@Override
public void onError(AIError error) {
Log.e(Tag, "error:" + error.toString());
resultText.setText(error.toString());
}
@Override
public void onResults(AIResult results) {
if (results.isLast()) {
if (results.getResultType() == AIConstant.AIENGINE_MESSAGE_TYPE_JSON) {
String recordId = results.getRecordId();
Log.i(Tag, "recordId = " + recordId);
Log.i(Tag, "result JSON = " + results.getResultObject().toString());
// 可以使用JSONResultParser来解析识别结果
// 结果按概率由大到小排序
JSONResultParser parser = new JSONResultParser(results.getResultObject()
.toString());
resultText.append("识别结果为 : " + parser.getText() + "\n");
resultText.append("识别结果为 : " + results.getResultObject().toString());
}
}
}
@Override
public void onInit(int status) {
Log.i(Tag, "Init result " + status);
if (status == AIConstant.OPT_SUCCESS) {
resultText.setText("初始化成功!");
btnStart.setEnabled(true);
btnStop.setEnabled(true);
} else {
resultText.setText("初始化失败!code:" + status);
}
}
@Override
public void onResultDataReceived(byte[] buffer, int size, int wakeupType) {
}
@Override
public void onRawDataReceived(byte[] buffer, int size) {
}
});
启动识别
AICloudASRIntent intent = new AICloudASRIntent();
intent.setWaitingTimeout(5000);//设置等待识别结果超时时长,默认5000ms
intent.setNoSpeechTimeOut(5000); //设置无语音超时市场,默认5000ms
//intent.setMaxSpeechTimeS(0)//音频最大录音时长
intent.setSaveAudioPath("/sdcard/aispeech");//保存的音频路径,格式为.ogg
mEngine.start(intent);
停止识别
mEngine.cancel();
引擎销毁
if(mEngine!=null) mEngine.destroy();