一、基本概念

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

二、应用场景

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

三、API 说明

① 主要接口
接口功能 接口原型 接口描述
实例化ASR客户端对象 Optional createAsrClient(Context context) 实例化一个ASR客户端对象,该对象用于调用ASR引擎能力
初始化ASR服务 void init(AsrIntent intent, AsrListener asrListener) 初始化ASR服务。传入回调,用于等待ASR功能接口的调用过程和结果;以及传入初始化参数,初始化ASR引擎
开始听取和识别语音 void startListening(AsrIntent asrIntent) 开始听取和识别语音。如果识别的是音频文件,则读取文件识别。
如果识别PCM语音数据流,则结合writePcm(byte[], int)来识别。在调用此方法前,需要先调用init(AsrIntent, AsrListener)来初始化ASR引擎服务
停止识别语音 void stopListening() 调用此方法,已经获取到的语音会完成识别,未获取到的语音将不再识别。
一般在默认场景下,无需调用此方法去停止识别,因为语音识别会自动地决策语音是否已经完成,然后自动地停止识别。然而,也可以调用此方法来直接在某刻手动地停止识别。
调用此方法前,需要先调用init(AsrIntent, AsrListener)来初始化ASR引擎服务。
写入PCM数据流,进行语音识别 void writePcm(byte[] bytes, int length) 调用此方法,写入PCM语音数据流,并对PCM进行语音识别。
调用此方法前,需要先调用init(AsrIntent, AsrListener)来初始化ASR引擎服务。
在调用startListening(AsrIntent)}之后,将获取的PCM数据通过此方法来下发给ASR引擎处理。
PCM数据流长度存在限制:PCM数据流大小不能超过800KB,另外PCM数据流对应的音频长度不能超过20s。length代表有效长度,当前只支持1280或者640字节
取消语音识别 void cancel() 取消语音识别,已经获取到的语音也不再识别。调用此方法前,需要先调用init(AsrIntent, AsrListener)来初始化ASR引擎服务
销毁ASR服务 void destroy() 取消所有ASR任务,销毁ASR引擎服务。调用此方法后,无法再使用ASR服务。如果需要重新使用ASR服务,需要重新调用createAsrClient(Context)来创建 AsrClient实例
  • AsrListener 接口说明:
包名 类名 接口原型 功能描述
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引擎服务端调用此回调接口
② 接口返回值说明
  • AsrListener 中的 onResults(PacMap results) 方法返回结果,结果封装在 json 格式中,需要解析得到。结果说明:
返回结果 结果类型 结果说明
{“result”:[{“confidence”:0,“ori_word”:"你 好 ",“pinyin”:"NI3 HAO3 ",“word”:“你好。”}]} Json 识别结果
{“confidence”:xxx} Double 识别结果的置信度
{ “word”:“xxx”} String 识别结果的文本内容
  • 示例结果(Json):
 {"engine_type":"local_engine","result":[{"confidence":0,"ori_word":"你 好 ","pinyin":"NI3 HAO3 ","word":"你好。"}],"result_type":"lvcsr","scenario_type":5}
③ 语音识别结果码说明
  • AsrError 说明:
常量名 取值 错误码含义
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能力的调用时,在回调中会返回的结果码

四、开发流程

① 在使用语音识别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();

HarmonyOS之AI能力·语音识别技术相关推荐

  1. 百度AI长语音识别技术免费开放,调用时长不再受限

    原标题:百度AI长语音识别技术免费开放,调用时长不再受限 前几天看到一条祝福:祝大家早日成为可以在公司群里随心所欲发语音的人 . 显然,微信群聊(特别是家族群.客户群.公司群)里的语音消息,并不是谁想 ...

  2. HarmonyOS之AI能力·通用文字识别技术

    一.通用文字识别技术 通用文字识别的核心技术是 OCR(Optical Character Recognition,光学字符识别). OCR 是一种通过拍照.扫描等光学输入方式,把各种票据.卡证.表格 ...

  3. HarmonyOS之AI能力·语音播报

    一.概念 语音播报(Text to Speech,下文简称 TTS),基于华为智慧引擎(HUAWEI HiAI Engine)中的语音播报引擎,向开发者提供人工智能应用层 API.该技术提供将文本转换 ...

  4. HarmonyOS之AI能力·词性标注

    一.简介 随着信息技术的发展,网络中的信息量成几何级增长逐步成为当今社会的主要特征.准确提取文本关键信息,是搜索引擎等领域的技术基础,而分词作为文本信息提取的第一步则尤为重要. 分词作为自然语言处理领 ...

  5. HarmonyOS之AI能力·IM类意图识别

    一.基本概念 IM 类意图识别,是指利用机器学习技术,针对用户短信或聊天类 APP 等 IM 应用的文本消息进行内容分析,并识别出消息内容代表的用户意图. 基于语义分析,利用机器学习的相关技术识别并理 ...

  6. HarmonyOS之AI能力·分词

    一.基本概念 随着信息技术的发展,网络中的信息量成几何级增长逐步成为当今社会的主要特征.准确提取文本关键信息,是搜索引擎等领域的技术基础,而分词作为文本信息提取的第一步则尤为重要. 分词作为自然语言处 ...

  7. HarmonyOS之AI能力·文档检测校正

    一.基本概念 文档校正提供了文档翻拍过程的辅助增强功能,包含两个子功能:文档检测和文档校验. 文档检测:能够自动识别图片中的文档,返回文档在原图中的位置信息.这里的文档泛指外形方正的事物,比如书本.相 ...

  8. HarmonyOS之AI能力·助手类意图识别

    一.简介 随着人机交互越来越普遍,设备需要理解用户下达的各种指令,方便用户的操作. 助手类意图识别能够利用机器学习技术,对用户发送给设备的文本消息进行语义分析和意图识别,进而衍生出各种智能的应用场景, ...

  9. HarmonyOS之AI能力·文字图像超分

    一.简介 文字图像超分辨率可以对包含文字内容的图像进行 9 倍放大(高宽各放大 3 倍),同时增强图像内文字的清晰度,称为"文字图像超分辨率",简称"文字图像超分&quo ...

最新文章

  1. java切面类整合_SpringBoot2.x【五】整合AOP切面编程
  2. 技术图文:Python 匿名函数 VS. C# Lambda表达式
  3. rocketmq怎么保证消息一致性_RocketMQ为什么要保证订阅关系的一致性?
  4. python数据源_python数据源
  5. 【算法设计与分析】Dijskra算法代码:Java版
  6. css p 文本不换行,超出文字显示省略号
  7. 2022,你的团队距离持续部署还有多远?
  8. 【数据库系统】DBMS、DBS、DBA、DB的区别
  9. 超级计算机手机芯片,美国开建arm超级计算机,单节点性能是手机芯片100倍
  10. 【hiho一下 第147周】小Hi的烦恼
  11. poj3263 Tallest Cow 题解报告
  12. matlab设置等高线标注字体大小,matlab设置图中字体和线条大小等(转)
  13. 串口转以太网服务器原理,实现串口转以太网的结构和步骤解析
  14. 移动硬盘提示文件或目录损坏且无法读取怎么办
  15. 公司邮箱怎么申请注册?如何登录公司邮箱?
  16. 关于MSOCache
  17. mysql 修改结束符_在MySQL中,用于设置MySQL结束符的关键字是【】
  18. 数学图形之单叶双曲面
  19. Python找出所有的水仙花数
  20. Linux系统调优详解(十二)——IO调优之磁盘测速

热门文章

  1. 国外黑客站点(详细版 )
  2. 【Python机器学习预测分析算法实战三】预测模型性能评估及影响因素
  3. web安全工具库(笔记)----端口扫描(PortScan)
  4. fullCalendar插件的使用简单教程
  5. VR 全景建筑施工,3D可视化全景解决工程进展全视角呈现!
  6. 如何将一组列表(三个以上,数值类型不一)保存为txt文件
  7. 将代码保留原格式(高亮)复制到word
  8. update select 根据查询结果更新
  9. 恢复linux reiserfs文件系统损坏丢失的数据
  10. 计蒜之道(阿里的新游戏)第一题 解题报告