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%

风量降低百分之五十

命令词不含数字和标点符号

操作说明

  1. 使用 在线工具 按要求上传命令词和播报音 Excel 表格,后台编译完成后,下载 download.zip 文件并解压

  2. 将改动的文件拷贝到 SDK,并打补丁

cp -r ${download}/patch/* ${SDK}
cd ${SDK}/
python component/aivoice/tools/patch_custom_cmd.py RTL8713E

备注

请务必先切换到 SDK 根目录,再运行脚本。如果未在正确的目录下执行,脚本将无法找到需要修改的文件,导致操作失败。

  1. 配置编译环境,并运行 ameba.py menuconfig 进入配置界面

source env.sh
ameba.py soc RTL8726E
ameba.py menuconfig
  1. 导航至以下菜单路径开启 DSP

--------MENUCONFIG FOR General---------
CONFIG DSP Enable  --->
   [*] Enable DSP
  1. 导航至以下菜单路径配置 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
  1. 开启 VFS LITTLEFS

--------MENUCONFIG FOR General---------
CONFIG VFS  --->
   [*] Enable VFS LITTLEFS
  1. 开启 AIVoice

--------MENUCONFIG FOR General---------
CONFIG TrustZone  --->
...
CONFIG APPLICATION  --->
   GUI Config  --->
   ...
   AI Config  --->
      [ ] Enable TFLITE MICRO
      [*] Enable AIVoice
  1. 开启 SpeechMind

--------MENUCONFIG FOR General---------
CONFIG TrustZone  --->
...
CONFIG APPLICATION  --->
   GUI Config  --->
   ...
   AI Config  --->
      [ ] Enable TFLITE MICRO
      [*] Enable AIVoice
      [*] Enable SpeechMind
  1. 编译

ameba.py build
  1. 使用 Flash 烧写工具 烧录以下固件:

  • km4_boot_all.bin:默认地址

  • kr4_km4_app.bin:默认地址

  • tts.bin:烧录地址 0x083E0000, 0x087E0000

  • dsp_all.bin:烧录地址 0x087E0000, 0x08A00000

  • aivoice_models.bin:烧录地址 0x08A00000, 0x08E00000

运行与预期结果

在开发板上烧录固件后,可体验以下语音交互功能:

  • 语音唤醒

    通过说 小强小强你好小强 进行唤醒,如果成功唤醒,会打印日志并播放回复音 主人我在

  • 超时

    唤醒后一段时间内没有交互,会播报语音 主人我先退下了, 有需要请再唤醒我,后续交互需要重新唤醒。超时的时长可以在 ${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。