公司动态
【离线语音专题③】安信可VC系列离线语音SDK开发环境搭建——基于Linux系统
1. 环境准备与基础概念在开始搭建安信可VC系列离线语音SDK开发环境之前我们需要先了解几个关键概念。离线语音识别意味着设备可以在不依赖网络连接的情况下处理语音指令这对于智能家居、工业控制等场景尤为重要。VC系列模组采用的是云知声的锋鸟M芯片(US516P6)支持最高150条本地指令识别响应时间小于100ms误唤醒率极低。开发环境需要满足以下基础条件Linux系统推荐使用Ubuntu 16.04/20.04或CentOS 7以上版本基础工具链包括git、python2、解压工具等32位兼容库由于工具链需要运行32位程序我曾在Ubuntu 20.04上实测过整个流程发现新版系统安装32位库的命令有些变化后面会详细说明。如果你使用的是虚拟机建议分配至少4GB内存和20GB磁盘空间编译过程中会比较吃资源。2. 工具链安装与配置2.1 安装系统依赖首先更新软件源并安装基础工具sudo apt-get update sudo apt-get install -y python2.7 lame对于不同Ubuntu版本32位库的安装命令有所差异Ubuntu 16.04/CentOS 7sudo apt-get install lib32stdc6 lib32z1 lib32ncurses5 lib32bz2-1.0Ubuntu 20.04需要额外指定架构sudo apt-get install lib32stdc6 lib32z1 lib32ncurses5 libbz2-1.0:i386这里有个坑我踩过如果漏装lib32ncurses5编译时会报找不到termcap库的错误。安装完成后可以用file命令检查库文件是否是ELF 32-bit格式。2.2 获取编译工具链安信可提供了基于AndesCore的交叉编译工具链我们将其安装到/opt目录sudo git clone https://gitee.com/Ai-Thinker-Open/Andestech.git /opt/Andestech如果访问GitHub较慢可以使用上面的Gitee镜像源。关键点在于必须指定/opt/Andestech路径因为SDK中Makefile固定引用了这个路径。我有次尝试安装到home目录结果不得不手动修改几十个Makefile文件相当痛苦。安装完成后建议将工具链加入PATHecho export PATH$PATH:/opt/Andestech/bin ~/.bashrc source ~/.bashrc可以用nds32le-elf-gcc -v验证是否安装成功正常应该能看到类似这样的输出gcc version 5.3.0 (Andes-5.3.0-20170221)3. SDK获取与解压3.1 生成定制化SDKVC系列的一个特点是每个产品对应专属SDK。你需要先在安信可语音开放平台(http://voice.ai-thinker.com)定制选择产品品类如灯具、家电等设置唤醒词和指令词支持中文/英文配置GPIO控制逻辑定义语音回复内容平台会基于你的配置训练生成语音模型通常需要5-10分钟。完成后会提供下载链接文件命名类似uni_hb_m_solution-xxxxx.tar.gz。3.2 解压与目录结构将下载的SDK包上传到Linux开发机执行解压tar -zxvf uni_hb_m_solution-xxxxx.tar.gz cd uni_hb_m_solution-xxxxx解压后的目录结构非常清晰├── build/ # 编译系统 ├── lib/ # 语音识别引擎库 ├── src/ │ ├── app/ # 应用层代码 │ ├── hal/ # 硬件抽象层 │ └── sdk/ # SDK核心实现 ├── tools/ # 资源打包工具 └── user/ # 用户二次开发入口特别要注意的是include/目录下的头文件不要手动修改它们是由平台自动生成的。我有个项目曾因误改这些文件导致语音识别率大幅下降。4. 编译与烧录4.1 选择演示案例SDK提供了多个演示案例通过修改user/inc/user_config.h中的宏定义来选择#define USER_RUN_DEMO_SELECT USER_DEMO_AUTO_GPIO // GPIO控制演示 //#define USER_RUN_DEMO_SELECT USER_DEMO_UART // 串口通信演示4.2 编译命令SDK提供两种编译方式./build.sh # 生成JTAG烧录文件(uni_app_release.bin) ./build.sh update # 额外生成串口升级文件(uni_app_release_update.bin)编译过程中可能会遇到两个常见问题python版本冲突必须使用python2如果系统默认是python3可以通过alias pythonpython2临时切换内存不足在虚拟机环境中建议增加swap空间sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile4.3 烧录方式根据生成的固件类型选择烧录方法JTAG烧录使用安信可VC_Burner调试器连接开发板的JTAG接口通过nds32le-elf-gdb工具写入uni_app_release.bin串口烧录将开发板UART0连接到USB转串口工具使用python tools/flasher.py -p /dev/ttyUSB0 -b 1500000 uni_app_release_update.bin烧录时需按住开发板BOOT键再上电我曾遇到过串口烧录失败的情况后来发现是波特率设置不对。VC系列模组的一级bootloader使用115200波特率而应用固件使用1500000这个细节需要注意。5. 调试与二次开发5.1 日志查看烧录完成后连接开发板的日志输出串口通常是UART1screen /dev/ttyUSB1 115200正常启动会看到类似日志[VUI] wakeup model loaded [APP] system initialized [GPIO] pin A25 set to output如果出现libvui.so not found等错误通常是烧录不完整导致的建议重新烧录。5.2 添加自定义逻辑二次开发的主要工作集中在user/src/目录例如要实现语音控制LED在user_gpio.c中初始化GPIOuser_gpio_set_direction(GPIO_NUM_A25, USER_GPIO_DIRECTION_OUTPUT);在user_main.c中注册事件回调static void on_voice_cmd(uint32_t cmd_id) { if(cmd_id CMD_LED_ON) { user_gpio_set_value(GPIO_NUM_A25, 1); } }修改user_config.h中的指令映射表一个实用的技巧是使用user_flash.c中的API保存配置信息这样设备重启后能记住之前的状态。6. 常见问题解决Q1编译时报错lib32z1 not foundA确认系统是64位架构并正确安装了前文提到的32位兼容库。Q2烧录后设备无响应A检查电源供电是否充足VC系列模组需要稳定的3.3V/500mA供电。也可以用示波器查看晶振是否起振。Q3语音识别率低A首先确认麦克风连接正确然后检查tools/目录下的声学模型文件是否完整。环境噪音过大也会影响识别建议在安静环境下测试。Q4如何添加新指令A需要重新在语音平台配置并生成新SDK或者手动修改tools/cmd_reply_data.json文件后执行python tools/res_build_tool.py重建资源。开发过程中如果遇到棘手问题可以查看docs.ai-thinker.com上的开发文档或者在官方论坛发帖咨询。安信可的技术支持响应速度还是很快的我上次遇到一个GPIO配置问题他们当天就给出了解决方案。