第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > HarmonyOS之AI能力·语音识别技术

HarmonyOS之AI能力·语音识别技术

时间:2021-02-20 04:32:01

相关推荐

HarmonyOS之AI能力·语音识别技术

一、基本概念

语音识别功能提供面向移动终端的语音识别能力。它基于华为智慧引擎(HUAWEI HiAI Engine)中的语音识别引擎,向开发者提供人工智能应用层 API。该技术可以将语音文件、实时语音数据流转换为汉字序列,准确率达到 90% 以上(本地识别 95%)。语音识别技术,也称为自动语音识别(Automatic Speech Recognition, ASR),可以基于机器识别和理解,将语音信号转变为文本或命令。语音识别支持的输入文件格式有 wav 或 pcm。语音识别当前仅支持对普通话的识别。语音识别输入时长不能超过 20s。语音识别采样要求:采样率 16000Hz,单声道。语音识别引擎的使用必须初始化和释放处理,且调用必须在 UI 的主线程中进行。多线程调用:HUAWEI HiAI Engine 不支持同一应用使用多线程调用同一接口,这样会使某一线程调用 release 方法后,卸载模型,导致正在运行的另一些线程出错。故多线程执行同一功能达不到并行的效果。但是引擎支持使用多线程调用不同接口,如开启两个线程同时使用文档矫正和 ASR 接口。

二、应用场景

支持开发具有语音识别需求的第三方应用,如语音输入法、语音搜索、实时字幕、游戏娱乐、社交聊天、人机交互(如驾驶模式)等场景。语音输入法:将需要输入的文字,直接用语音的方式输入。即用户说话的时候语音识别引擎返回识别的汉字序列,让输入更加便捷,解放双手。语音搜索:搜索内容直接以语音的方式输入,可以用于客服系统的关键词搜索,同时转录成文本,让搜索更加高效。实时字幕:将直播、视频、现场演讲等音频进行实时的字幕转换、降低理解成本,提升用户体验。驾驶模式:在开车过程中,手握方向盘,无法分神去操作手机来选择音乐、拨打电话。使用语音识别,只要向手机说出命令,例如:听音乐的时候说上一首/下一首进行切歌或调节音量等,即可被手机识别并执行相应操作。

三、API 说明

① 主要接口
AsrListener 接口说明:
② 接口返回值说明
AsrListener 中的 onResults(PacMap results) 方法返回结果,结果封装在 json 格式中,需要解析得到。结果说明:示例结果(Json):

{"engine_type":"local_engine","result":[{"confidence":0,"ori_word":"你 好 ","pinyin":"NI3 HAO3 ","word":"你好。"}],"result_type":"lvcsr","scenario_type":5}

③ 语音识别结果码说明
AsrError 说明:

四、开发流程

① 在使用语音识别API时,将实现ASR的相关的类添加至工程

// 提供ASR引擎执行时所需要传入的参数类import ohos.ai.asr.AsrIntent;// 错误码的定义类import ohos.ai.asr.util.AsrError;// 加载语音识别Listenerimport ohos.ai.asr.AsrListener;// 提供调用ASR引擎服务接口的类import ohos.ai.asr.AsrClient;// ASR回调结果中的关键字封装类import ohos.ai.asr.util.AsrResultKey;

② 调用 API 接口
创建一个 AsrClient 对象:context 为应用上下文信息,应为 ohos.aafwk.ability.Ability 或 ohos.aafwk.ability.AbilitySlice 的实例或子类实例:

AsrClient asrClient = AsrClient.createAsrClient(context).orElse(null);

设置引擎参数:如果希望识别文件,音频文件需满足约束与限制,并设置音频类型为“ASR_SRC_TYPE_FILE”;如果希望识别音频流,则设置音频类型为“ASR_SRC_TYPE_PCM”:

AsrIntent initIntent = new AsrIntent();initIntent.setAudioSourceType(AsrIntent.AsrAudioSrcType.ASR_SRC_TYPE_PCM);

初始化ASR服务:其中,mMyAsrListener 为实现了 AsrListener 接口的实例对象:

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);

需要注意的是,startListening 或 writePcm 方法建议放在 mMyAsrListener 中 onInit() 方法内调用,保证初始化引擎成功之后再调用识别接口。如果希望识别音频文件,则不需要调用 writePcm 接口:

AsrIntent asrIntent = new AsrIntent();// 将FilePath修改为正确的地址,且文件路径需要给com.huawei.hiai进程授予可访问权限。asrIntent.setFilePath("FilePath");asrClient.startListening(asrIntent);

取消或停止识别:

asrClient.stopListening(); // 停止识别asrClient.cancel(); // 取消识别

释放引擎:

asrClient.destroy();

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。