ASR(语音识别)
支持的芯片[ RTL8726E ][ RTL8713E ][ RTL8730E ]
概述
ASR 是用于把语音信号识别为文本的模块。
AIVoice 提供了离线语音命令词检测的 ASR 算法,适用于需要快速、可靠且无需网络连接的语音交互应用。
核心特性
连续交互:一次唤醒,多轮识别,无需重复唤醒
语言:当前仅支持 中文普通话
命令词数量:支持 200 条 以内
资源组成:识别资源包括 模型文件 与 FST 文件 (有限状态机),更换或自定义命令词仅需替换 FST 文件,无需改动模型
预置与自定义
SDK 默认提供一套包含
打开空调、关闭空调等 40 条 空调场景的预置命令词识别算法。如需自定义命令词,可通过我们提供的 在线工具 生成对应的 FST 资源文件,快速集成至您的应用中。
定制服务
若项目需求超出以下标准范围,请联系商务团队以获取定制化解决方案:
命令词数量超过 200 条
需要支持其他语种
针对特定场景进行深度性能优化或算法定制
配置
ASR 可配参数:
- sensitivity:
提供预先调好阈值的三档灵敏度,灵敏度越高,更容易识别到命令词,但误触发也越多。
详情请参考 ${aivoice_lib_dir}/include/aivoice_asr_config.h。
自定义命令词指南
硬件要求
芯片型号
RTL8713ECM-VA4-CG
RTL8730EAM-VA6-CG
Flash 大小: >= 16MB
双麦间距 50mm
双麦、回采路依次对应:
RTL8713ECM-VA4-CG: AMIC1、AMIC2、AMIC3
RTL8730EAM-VA6-CG: AMIC1、AMIC3、AMIC5
一个外接扬声器
软件要求
准备 ameba-rtos 仓库,下文中使用${SDK}表示, 具体参考
SDK 下载
中的 XDK 下载方法。
命令词格式
当前只支持中文。
使用 在线工具 编辑自定义命令词的 Excel 表格。如下表:
id |
命令词 |
tts回复内容 |
|---|---|---|
1 |
打开空调 |
空调已开机 |
2 |
关闭空调 |
空调已关闭 |
3 |
制冷模式 |
已设为制冷模式 |
表格分为 3 列,id 指命令词序号,命令词指需要识别的命令,tts 回复内容指对应回复。
当前版本不支持生成自定义回复语,统一使用“命令 x 已执行”。
命令词示例说明:
错误 |
正确 |
说明 |
|---|---|---|
连接WiFi |
连接网络 |
当前不支持英文 |
现在多少度? |
现在多少度 |
命令词不含标点符号 |
调到16度 |
调到十六度 |
命令词不含数字 |
打开 空调 |
打开空调 |
命令词不含空格 |
风量降低50% |
风量降低百分之五十 |
命令词不含数字和标点符号 |
操作说明
使用 在线工具 按要求上传命令词和播报音 Excel 表格,后台编译完成后,下载
download.zip文件并解压将改动的文件拷贝到 SDK,并打补丁
cp -r ${download}/patch/* ${SDK}
cd ${SDK}/
python component/aivoice/tools/patch_custom_cmd.py RTL8713E
备注
请务必先切换到 SDK 根目录,再运行脚本。如果未在正确的目录下执行,脚本将无法找到需要修改的文件,导致操作失败。
配置编译环境,并运行
ameba.py menuconfig进入配置界面
source env.sh
ameba.py soc RTL8726E
ameba.py menuconfig
导航至以下菜单路径开启 DSP
--------MENUCONFIG FOR General---------
CONFIG DSP Enable --->
[*] Enable DSP
导航至以下菜单路径配置 Link
--------MENUCONFIG FOR General---------
CONFIG Link Option --->
IMG2(Application) running on FLASH or PSRAM?
(X) FLASH
( ) PSRAM
IMG2 Data and Heap in SRAM or PSRAM? --->
( ) SRAM
(X) PSRAM
开启 VFS LITTLEFS
--------MENUCONFIG FOR General---------
CONFIG VFS --->
[*] Enable VFS LITTLEFS
开启 AIVoice
--------MENUCONFIG FOR General---------
CONFIG TrustZone --->
...
CONFIG APPLICATION --->
GUI Config --->
...
AI Config --->
[ ] Enable TFLITE MICRO
[*] Enable AIVoice
开启 SpeechMind
--------MENUCONFIG FOR General---------
CONFIG TrustZone --->
...
CONFIG APPLICATION --->
GUI Config --->
...
AI Config --->
[ ] Enable TFLITE MICRO
[*] Enable AIVoice
[*] Enable SpeechMind
编译
ameba.py build
使用 Flash 烧写工具 烧录以下固件:
km4_boot_all.bin:默认地址
kr4_km4_app.bin:默认地址
tts.bin:烧录地址 0x083E0000, 0x087E0000
dsp_all.bin:烧录地址 0x087E0000, 0x08A00000
aivoice_models.bin:烧录地址 0x08A00000, 0x08E00000
使用 在线工具 按要求上传命令词和播报音 Excel 表格,后台编译完成后,下载
download.zip文件并解压将改动的文件拷贝到 SDK,并打补丁
cp -r ${download}/patch/* ${SDK}
cd ${SDK}/
python component/aivoice/tools/patch_custom_cmd.py RTL8713E
备注
请务必先切换到 SDK 根目录,再运行脚本。如果未在正确的目录下执行,脚本将无法找到需要修改的文件,导致操作失败。
配置编译环境,并运行
ameba.py menuconfig进入配置界面
source env.sh
ameba.py soc RTL8726E
ameba.py menuconfig
导航至以下菜单路径开启 DSP
--------MENUCONFIG FOR General---------
CONFIG DSP Enable --->
[*] Enable DSP
导航至以下菜单路径配置 Link
--------MENUCONFIG FOR General---------
CONFIG Link Option --->
IMG2(Application) running on FLASH or PSRAM?
(X) FLASH
( ) PSRAM
IMG2 Data and Heap in SRAM or PSRAM? --->
( ) SRAM
(X) PSRAM
开启 VFS LITTLEFS
--------MENUCONFIG FOR General---------
CONFIG VFS --->
[*] Enable VFS LITTLEFS
开启 AIVoice
--------MENUCONFIG FOR General---------
CONFIG TrustZone --->
...
CONFIG APPLICATION --->
GUI Config --->
...
AI Config --->
[ ] Enable TFLITE MICRO
[*] Enable AIVoice
开启 SpeechMind
--------MENUCONFIG FOR General---------
CONFIG TrustZone --->
...
CONFIG APPLICATION --->
GUI Config --->
...
AI Config --->
[ ] Enable TFLITE MICRO
[*] Enable AIVoice
[*] Enable SpeechMind
编译
ameba.py build
使用 Flash 烧写工具 烧录以下固件:
km4_boot_all.bin:默认地址
kr4_km4_app.bin:默认地址
tts.bin:烧录地址 0x083E0000, 0x087E0000
dsp_all.bin:烧录地址 0x087E0000, 0x08A00000
aivoice_models.bin:烧录地址 0x08A00000, 0x08E00000
使用 在线工具 按要求上传命令词和播报音 Excel 表格,后台编译完成后,下载
download.zip文件并解压将改动的文件拷贝到 SDK,并打补丁
cp -r ${download}/patch/* ${SDK}
cd ${SDK}/
python component/aivoice/tools/patch_custom_cmd.py RTL8730E
备注
请务必先切换到 SDK 根目录,再运行脚本。如果未在正确的目录下执行,脚本将无法找到需要修改的文件,导致操作失败。
配置编译环境,并运行
ameba.py menuconfig进入配置界面
source env.sh
ameba.py soc RTL8730E
ameba.py menuconfig
导航至以下菜单路径选择在 Flash 上跑应用
--------MENUCONFIG FOR General---------
CONFIG Link Option --->
IMG2(Application) running on PSRAM or FLASH? --->
( ) PSRAM
(X) FLASH
开启 VFS LITTLEFS
--------MENUCONFIG FOR General---------
CONFIG VFS --->
[*] Enable VFS LITTLEFS
开启 AIVoice
--------MENUCONFIG FOR General---------
CONFIG TrustZone --->
...
CONFIG APPLICATION --->
GUI Config --->
...
AI Config --->
[ ] Enable TFLITE MICRO
[*] Enable AIVoice
开启 SpeechMind
--------MENUCONFIG FOR General---------
CONFIG TrustZone --->
...
CONFIG APPLICATION --->
GUI Config --->
...
AI Config --->
[ ] Enable TFLITE MICRO
[*] Enable AIVoice
[*] Enable SpeechMind
选择单核
MENUCONFIG FOR CA32 CONFIG --->
...
CONFIG SMP --->
Select Core Num --->
( ) DUAL
(X) SINGLE
编译固件
ameba.py build
使用 Flash 烧写工具 烧录以下固件:
km4_boot_all.bin:默认地址
km0_km4_ca32_app.bin:烧录地址 0x08040000, 0x08600000
tts.bin:烧录地址 0x08640000, 0x08A40000
运行与预期结果
在开发板上烧录固件后,可体验以下语音交互功能:
语音唤醒
通过说
小强小强或你好小强进行唤醒,如果成功唤醒,会打印日志并播放回复音主人我在。超时
唤醒后一段时间内没有交互,会播报语音
主人我先退下了, 有需要请再唤醒我,后续交互需要重新唤醒。超时的时长可以在${SDK}/component/application/speechmind/src/speech_mind.c代码中通过以下参数调整:aivoice_param.timeout = 10;
命令词识别
唤醒后,可以通过自定义的语音指令进行连续交互,如果成功识别,会打印日志并播放对应的回复音
命令 x 已执行。支持的命令词列表见开机后的日志。如果需要更换回复音频,请参考 回复音频替换 。
声源定位
当声源定位功能开启时,每次唤醒后,都会检测说话人所在角度。唤醒后日志会打印角度并播放回复音
xx 度。声源定位功能可以在${SDK}/component/application/speechmind/src/speech_mind.c代码中通过以下宏开关:#define ENABLE_SSL_DOA 1
回复音频替换
如需更换 TTS 回复音频,按以下步骤操作。
准备音频
格式要求:MP3
目录结构:
tts_mp3/ <-- -dir 参数指定此目录 └── tts/ ├── 10001.mp3 # 唤醒回复音 ├── 10002.mp3 # 超时退出回复音 ├── x.mp3 # 命令词回复音(x 为命令词序号) └── angle/ # (可选)声源定位角度回复音 ├── 1000.mp3 └── ...备注
打包命令中的 -dir 参数需使用最外层目录
tts_mp3,而非tts目录本身。音频命名规则:文件名对应
${download}/patch/component/application/speechmind/src/speech_tts.c中的tts_content_name第二列。static const struct tts_content_name tts_names[] = { {"主人我在", "10001"}, {"主人我先退下啦有需要请再唤醒我", "10002"}, {"命令 1 已执行", "1"}, {"命令 2 已执行", "2"}, ... };
如已开启声源定位功能,还需将角度回复音频目录拷贝至 tts 目录下:
cp -r ${SDK}/component/application/speechmind/res/tts/tts/angle tts_mp3/tts
打包音频
python ${SDK}/tools/image_scripts/vfs.py -t LITTLEFS -s 4096 -c 1024 -dir tts_mp3 -out tts.bin
-dir参数必须使用包含 tts 子目录的 最外层目录 (如示例中的tts_mp3),而非 tts 目录本身。打包后 bin 文件中的 tts 目录需与代码播放路径tts/xxx.mp3保持一致。如提示 "size exceed limit",表示音频总大小超过 4M 限制,需降低 MP3 音频的比特率以减小文件体积。
打包后 tts.bin 烧录地址请参考各芯片固件烧录章节。默认大小 4M(
-c 1024),如需调整请去掉-c参数并参考 AIVoice 开发指南 示例二配置 layout。