语音识别使用说明¶
语音识别(Automatic Speech Recognition),一般简称ASR,是将声音转化为文字的过程。CI110X系列芯片中,CI1102支持50~80条语音指令,CI1103支持最大300条的语音指令,本说明适用于所有CI110X系列芯片的SDK。
SDK中有一些和识别相关的算法文件需要特别注意,如下:
-
ASR语音识别解码库文件:该文件在SDK包中路径为 \components\asr\decoder\,以lib文件(*.a)格式存在,该文件用于通过深度学习算法,将声音进行识别并输出对应字符串,由启英泰伦进行更新,用户不用修改该文件;
-
声学模型文件:该文件在SDK包中路径为 \工程名称(如\sample\internal\sample_light)\firmware\dnn\,以bin文件((*.bin3676))格式存在,该文件是通过服务器训练产生的声学模型,由启英泰伦进行更新,用户可以根据不同的应用场景或者不同的语言种类使用启英泰伦提供的对应声学模型文件;
-
语言模型文件:该文件包含唤醒词和命令词文件,唤醒词用于唤醒设备,命令词用于识别控制,在SDK包中路径为 \工程名称(如\sample\internal\sample_light)\firmware\asr\,以bin文件(*.dat)格式存在,该文件需由用户通过启英泰伦语音AI平台进行在线生成,使用方法请参考本文档中心 ☞ 《命令词和固件制作指南》 。
下面介绍一些语音识别相关的配置和操作:
1. 生成命令词语言模型文件¶
在使用SDK中语音识别功能时,需要先根据用户的唤醒词和命令词生成语言模型文件,生成方法请参考本文档中心 ☞ 《命令词和固件制作指南》 。
2. 配置命令词条的置信度阈值¶
使用生成的语言模型文件时,SDK会配合解码库文件进行识别,软件中已配置默认的置信度阈值(25),当识别命令词条的分数大于该数值时,则认为识别到该命令词条。如果用户在实际应用中,发现某些命令词条容易误识别或者难以识别,可以通过调整置信度阈值的方法来优化识别效果。该处请注意置信度阈值配置越小识别越灵敏,误识别风险增加;配置越大误识别越低,识别率也越低。举例说明:当遇到某命令词条误识别高时,可以适当调大该置信度阈值的数值,如调为28;当遇到某命令词条难以识别时,可以调小该置信度阈值的数值,如调为22。置信度阈值范围建议最小不要小于20,最大不要超过30,否则会影响对各地区口音的适应范围。
下面具体列举一个修改配置的实例:
打开SDK包中cmd_info 目录的 [60000]{智能管家}cmd_info.xls表格文件,该表格文件的路径如下:\工程名称(如\sample\internal\sample_light)\firmware\user_file\cmd_info\。针对需要修改的命令词条,修改表格中置信度阈值列中其对应的置信度阈值数值,修改后保存文件,然后重新打包合成固件后使用。
3. 配置命令词条特殊词计数¶
如果用户所采用的命令词条相互之间有部分字相同的,例如: ”上下扫风”和”上下扫风停止” 或者 ”二十度”和”二十九度”,必须配置特殊词计数。包含相同字的命令词条,需要将不相同的连续的字找出来,例如: ”上下扫风”和”上下扫风停止” 中的“停止”,以及 ”二十度”和”二十九度”中的”九”。设该不相同的连续字的字数为D(不相同字分开的,不算连续字数,如“打开空调吧”和“开空调”,D应为1;“快打开空调”和“开空调”,D应为2),D的数值为N时,可以将计数值配置为15 * N ~ 20 * N。
例如:D为1时,如 ”二十度”和”二十九度”中有一个不相同连续字”九“,可以将计数值配置为15 ~ 20;D为2时,如”上下扫风”和”上下扫风停止”中有两个不相同连续字“停止” ,可以将计数值配置为30 ~ 40次。但请特别注意,特殊词计数值越大,噪音下响应时间可能变慢,建议选取的命令词条尽量避免出现相互之间有相同字的情况,如果要出现也尽量让不相同连续字数D不超过2,特殊词计数值调整范围最好为15 ~ 45之间。
下面具体列举一个修改配置的实例:
打开SDK包中cmd_info 目录的 [60000]{智能管家}cmd_info.xls表格文件,该表格文件的路径如下:\工程名称(如\sample\internal\sample_light)\firmware\user_file\cmd_info\。修改表格中特殊词计数列中全部有包含关系的命令词条对应的数值,修改后保存文件,然后重新打包合成固件后使用。
4. 选取合适的声学模型¶
声学模型由启英泰伦提供,部分已放到SDK包中,用户也可以在语音AI平台上下载。下表是各个声学模型使用的场景及注意事项,用户可以根据该表和产品应用的场景选取合适的声学模型。
主要场景 | 通用家居环境 | 儿童玩具 | 厨房烟机环境 | 浴室水生环境 |
---|---|---|---|---|
应用说明 | 语音产品在正常家居环境(如卧室、客厅)使用 | 语音产品以儿童交互为主,玩具类 | 语音产品在厨房烟机环境使用 | 语音产品在浴室环境(热水器等)使用 |
注意事项 | 当环境噪音为60~65dB的稳态噪音时可以开启降噪 | 可以不开降噪 | 必须开降噪 | 必须开降噪 |
中文模型 | GE-CH-S-V00146 | GE-CH-S-V00138 | YJ-CH-S-V00129 | WR-CH-S-V00130 |
英文模型 | GE-EN-S-V00131 | \ | \ | \ |
日文模型 | GE-JP-S-V00141 | \ | \ | \ |
5. 配置逐帧模式¶
当用户应用方案需要更好的兼容快语速识别时,可以在命令词数较少且无额外占用很高CPU资源的任务条件下,开启逐帧模式以提升快语速识别效果。判断命令词数的方法为开发板上电并接上串口后,查看系统上电后的日志打印中的节点数,即查看关键字 “states” 后面的数字,CI1102方案节点推荐小于2000时可以使用,CI1103方案节点推荐小于4000时可以使用。使用逐帧模式时请特别注意,该模式需要占用更多CPU资源,因此识别响应会比正常响应时间慢(通常为100~200ms)。
下面具体列举一个修改配置的实例:
打开SDK包中的asr_api.c 文件,该文件路径为 \components\asr\。
打开该文件后,配置USE_DSPK_EN为1,如下所示,即可开启逐帧模式。配置为0时关闭逐帧模式。
#define USE_DSPK_EN 1 /* 开启逐帧*/