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

网友投稿 822 2022-05-29

语音识别功能提供面向移动终端的语音识别能力。它基于华为智慧引擎(HUAWEI HiAI Engine)中的语音识别引擎,向开发者提供人工智能应用层 API。该技术可以将语音文件、实时语音数据流转换为汉字序列,准确率达到 90% 以上(本地识别 95%)。

语音识别技术,也称为自动语音识别(Automatic Speech Recognition, ASR),可以基于机器识别和理解,将语音信号转变为文本或命令。

语音识别支持的输入文件格式有 wav 或 pcm。

语音识别当前仅支持对普通话的识别。

语音识别输入时长不能超过 20s。

语音识别采样要求:采样率 16000Hz,单声道。

语音识别引擎的使用必须初始化和释放处理,且调用必须在 UI 的主线程中进行。

多线程调用:HUAWEI HiAI Engine 不支持同一应用使用多线程调用同一接口,这样会使某一线程调用 release 方法后,卸载模型,导致正在运行的另一些线程出错。故多线程执行同一功能达不到并行的效果。但是引擎支持使用多线程调用不同接口,如开启两个线程同时使用文档矫正和 ASR 接口。

支持开发具有语音识别需求的第三方应用,如语音输入法、语音搜索、实时字幕、游戏娱乐、社交聊天、人机交互(如驾驶模式)等场景。

语音输入法:将需要输入的文字,直接用语音的方式输入。即用户说话的时候语音识别引擎返回识别的汉字序列,让输入更加便捷,解放双手。

语音搜索:搜索内容直接以语音的方式输入,可以用于客服系统的关键词搜索,同时转录成文本,让搜索更加高效。

实时字幕:将直播、视频、现场演讲等音频进行实时的字幕转换、降低理解成本,提升用户体验。

驾驶模式:在开车过程中,手握方向盘,无法分神去操作手机来选择音乐、拨打电话。使用语音识别,只要向手机说出命令,例如:听音乐的时候说上一首/下一首进行切歌或调节音量等,即可被手机识别并执行相应操作。

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 }

1

2

3

4

5

6

AsrError 说明:

// 提供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;

1

2

3

4

5

6

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

7

8

9

10

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

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

1

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

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

1

2

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

asrClient.init(initIntent, mMyAsrListener);

1

开始识别:用户可以不设置参数,使用默认参数:

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

1

2

3

4

5

6

7

8

9

10

11

12

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

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

1

2

3

4

取消或停止识别:

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

1

2

释放引擎:

asrClient.destroy();

1

AI 语音通话

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:iOS之十三个小技巧帮你征服Xcode
下一篇:C语言课程设计       ——  职工信息管理系统
相关文章