文章40 | 阅读 20916 | 点赞0
接口功能 | 接口原型 | 接口描述 |
---|---|---|
实例化ASR客户端对象 | Optional createAsrClient(Context context) | 实例化一个ASR客户端对象,该对象用于调用ASR引擎能力 |
初始化ASR服务 | void init(AsrIntent intent, AsrListener asrListener) | 初始化ASR服务。传入回调,用于等待ASR功能接口的调用过程和结果;以及传入初始化参数,初始化ASR引擎 |
开始听取和识别语音 | void startListening(AsrIntent asrIntent) | 开始听取和识别语音。如果识别的是音频文件,则读取文件识别。<br>如果识别PCM语音数据流,则结合writePcm(byte[], int)来识别。在调用此方法前,需要先调用init(AsrIntent, AsrListener)来初始化ASR引擎服务 |
停止识别语音 | void stopListening() | 调用此方法,已经获取到的语音会完成识别,未获取到的语音将不再识别。<br>一般在默认场景下,无需调用此方法去停止识别,因为语音识别会自动地决策语音是否已经完成,然后自动地停止识别。然而,也可以调用此方法来直接在某刻手动地停止识别。<br>调用此方法前,需要先调用init(AsrIntent, AsrListener)来初始化ASR引擎服务。 |
写入PCM数据流,进行语音识别 | void writePcm(byte[] bytes, int length) | 调用此方法,写入PCM语音数据流,并对PCM进行语音识别。<br>调用此方法前,需要先调用init(AsrIntent, AsrListener)来初始化ASR引擎服务。<br>在调用startListening(AsrIntent)}之后,将获取的PCM数据通过此方法来下发给ASR引擎处理。<br>PCM数据流长度存在限制:PCM数据流大小不能超过800KB,另外PCM数据流对应的音频长度不能超过20s。length代表有效长度,当前只支持1280或者640字节 |
取消语音识别 | void cancel() | 取消语音识别,已经获取到的语音也不再识别。调用此方法前,需要先调用init(AsrIntent, AsrListener)来初始化ASR引擎服务 |
销毁ASR服务 | void destroy() | 取消所有ASR任务,销毁ASR引擎服务。调用此方法后,无法再使用ASR服务。如果需要重新使用ASR服务,需要重新调用createAsrClient(Context)来创建 AsrClient实例 |
| 包名 | 类名 | 接口原型 | 功能描述 |
| ohos.ai.asr | AsrListener | void onInit(PacMap params) | ASR引擎初始化结束后,ASR的服务端会调用此回调接口处理初始化结果数据 |
| void onBeginningOfSpeech() | ASR引擎检测到用户开始说话时,ASR服务端调用此回调接口 |
| void onRmsChanged (float rms) | ASR引擎检测到音频输入的语音能量变化时,ASR服务端调用此回调接口处理语音能量 |
| void onEndOfSpeech() | ASR引擎检测到用户说话停止时,调用此回调接口 |
| void onIntermediateResults(PacMap intermediateResults) | ASR引擎语音识别过程中,当部分识别结果可以获取到时,调用此回调处理中间过程的识别结果 |
| void onError(int error) | ASR语音识别过程中出现错误时,调用此回调接口 |
| void onResults(PacMap results) | ASR引擎完成语音识别,调用此回调返回和处理完整的识别结果 |
| void onBufferReceived(byte[] buffer) | ASR引擎每次接收到新输入的音频流时,会调用此回调接口处理接收到的语音流数据 |
| void onEvent(int eventType, PacMap params) | ASR引擎检测到某些事件时,调用此接口上报事件给调用者 |
| void onEnd() | ASR引擎识别结束时,调用此回调接口。但如果识别音频过程中被AsrClient类中的stopListening()或者cancel()方法打断,则不会调用此回调接口 |
| void onAudioStart() | 在音频开始时,ASR引擎服务端调用此回调接口 |
| void onAudioEnd() | 在音频结束时,ASR引擎服务端调用此回调接口 |
返回结果 | 结果类型 | 结果说明 |
---|---|---|
{“result”:[{“confidence”:0,“ori_word”:"你 好 ",“pinyin”:"NI3 HAO3 ",“word”:“你好。”}]} | Json | 识别结果 |
{“confidence”:xxx} | Double | 识别结果的置信度 |
{ “word”:“xxx”} | String | 识别结果的文本内容 |
{
"engine_type":"local_engine",
"result":[{"confidence":0,"ori_word":"你 好 ","pinyin":"NI3 HAO3 ","word":"你好。"}],
"result_type":"lvcsr",
"scenario_type":5
}
常量名 | 取值 | 错误码含义 |
---|---|---|
SUCCESS | 0 | 表示在某个接口被调用成功时,在回调中会返回这个结果码 |
ERROR_AUDIO | 3 | 表示接口调用时,发生因音频读取导致的错误时,在回调中会返回的结果码 |
ERROR_SERVER | 4 | 表示接口调用时,ASR引擎服务端发生错误时,在回调中会返回的结果码 |
ERROR_CLIENT | 5 | 表示接口调用时,调用ASR的客户端发生错误时,在回调中会返回的结果码 |
ERROR_SPEECH_TIMEOUT | 6 | 表示ASR接口调用时,在设定的时间内没有语音输入时,在回调中会返回的结果码 |
ERROR_NO_MATCH | 7 | 表示ASR接口调用时,发生ASR的识别结果不匹配定义的json格式时,在回调中会返回的结果码 |
ERROR_RECOGNIZER_BUSY | 8 | 表示ASR接口调用时,ASR引擎正忙时,在回调中会返回的结果码 |
ERROR_INVALID_PARAMS | 10 | 表示ASR接口调用时,发生参数输入错误时,在回调中会返回的结果码 |
ERROR_UNKNOWN | 11 | 表示ASR接口调用时,发生未知错误时,在回调中会返回的结果码 |
ERROR_GET_MODEL_PATH | 13 | 表示ASR接口调用时,ASR模型路径获取失败时,在回调中会返回的结果码 |
ERROR_RESULT_UNSUPPORTED | 15 | 表示ASR接口调用时,设备上当前版本的ASR引擎不支持正在被调用的接口时,在回调中会返回的结果码 |
ERROR_MODEL_NOT_MATCH | 16 | 表示ASR接口调用时,当前设备中预置的ASR引擎应用和ASR模型不匹配时,在回调中会返回的结果码 |
ERROR_INIT_FAIL | 23 | 表示ASR接口调用时,发生ASR引擎初始化失败的错误时,在回调中会返回的结果码 |
ERROR_NO_ASR | 30 | 表示当前设备上没有ASR引擎,不支持ASR能力的调用时,在回调中会返回的结果码 |
// 提供ASR引擎执行时所需要传入的参数类
import ohos.ai.asr.AsrIntent;
// 错误码的定义类
import ohos.ai.asr.util.AsrError;
// 加载语音识别Listener
import ohos.ai.asr.AsrListener;
// 提供调用ASR引擎服务接口的类
import ohos.ai.asr.AsrClient;
// ASR回调结果中的关键字封装类
import ohos.ai.asr.util.AsrResultKey;
AsrClient asrClient = AsrClient.createAsrClient(context).orElse(null);
AsrIntent initIntent = new AsrIntent();
initIntent.setAudioSourceType(AsrIntent.AsrAudioSrcType.ASR_SRC_TYPE_PCM);
asrClient.init(initIntent, mMyAsrListener);
AsrIntent asrIntent = new AsrIntent();
// 设置后置的端点检测(VAD)时间
asrIntent.setVadEndWaitMs(2000);
// 设置前置的端点检测(VAD)时间
asrIntent.setVadFrontWaitMs(4800);
// 设置语音识别的超时时间
asrIntent.setTimeoutThresholdMs(20000);
asrClient.startListening(asrIntent);
// buffer需要替换为真实的音频数据
byte[] buffer = new byte[]{0, 1, 0, 10, 1};
// 对于长度大于1280的音频,需要多次调用writePcm分段传输
asrClient.writePcm(buffer, 1280);
AsrIntent asrIntent = new AsrIntent();
// 将FilePath修改为正确的地址,且文件路径需要给com.huawei.hiai进程授予可访问权限。
asrIntent.setFilePath("FilePath");
asrClient.startListening(asrIntent);
asrClient.stopListening(); // 停止识别
asrClient.cancel(); // 取消识别
asrClient.destroy();
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/Forever_wj/article/details/118341210
内容来源于网络,如有侵权,请联系作者删除!