开源硬件
Arduino
客制化键盘
Arduino_寄存器
二进制运算
寄存器+二进制运算
LCD-逐字显示
密码依次录入
等待输入
WiFi Duck(无线击键注入攻击平台)
WiFi Duc-New
WiFi Duc-Old
蓝牙无线烧录
ESP8266
ESP-NOW
ESP8266看门狗
ESP8266-休眠模式
ESP01/01S使用说明
WIFI_SD
ESP8266-Web服务器
ESP8266-WIFI自动认证
ESP32
ESP32 ADC2
ESP32_PWM
ESP32_CAM
ESP32 小坦克
ESP32_限电保护
Arduino IDE 添加 ESP32
ESP32-iPhone BLE攻击
STM32
STM32F103-虚拟键盘
STC
STC8G1K08(A)
树莓派-触摸屏
Arduino IDE
Arduino_自制库
Arduino库收集
常见排序算法
冒泡排序
选择排序
插入排序
希尔排序
归并排序
快速排序
计数排序
预处理
millis(运行时长)
Arduino IDE 2.X-修改数据位置
Mixly
Mixly安装教程
Mixly 模块介绍
Mixly-添加ESP32CAM支持
Mixly-库定制工具
模块
4G模块连接物联网
GPS模块
语音模块(JQ8900)
安信可VB语音识别
28BYJ-48(5V步进)
FreeRTOS
FreeRTOS-多任务基础
FreeRTOS-任务共享全局变量
FreeRTOS-多核多任务
FreeRTOS-MUTEX
FreeRTOS-常规程序改多任务
FreeRTOS-定时器
LaserGRBL(激光雕刻)
LaserGRBL-GRBL
GRBL-CNC Shield v4
MicroPython
Scratch
Wokwi(在线仿真)
html转无符号数组
待做开源项目
本文档使用 MrDoc 发布
-
+
首页
安信可VB语音识别
[安可信VB-01,VB-02](https://docs.ai-thinker.com/voice_module),主芯片是`华镇公司`推出的语音大脑`VB590` ## VB语言使用 VB 系列的唤醒词有两个:小蜂管家,小蜂小蜂,当模块上电之后必须使用 唤醒词唤醒方可使用 ### 识别词    ### VB ↔ MCU #### VB 👉 MCU * UART0 识别到后会往串口发送反馈音频对应的ID,如`...ReadmePlay ID:1`,需注意的是,如果多条指令对应一个音频,那么些指令返回的ID也会是同一个 * UART1 当对着 VB 说出第一个指令词,如果识别到,会往串口(UART1)发(字符串)“AA 01 00 BB”,同理,说出第二个会发“AA 01 01 BB”,以此类推,第 n 个会发“AA 01 0(n-1) BB”。 #### VB 👈 MCU UART0和UART1,实测`UART0不能控制VB`,`UART1可以控制VB` `每条指令最后需要加“\r\n”` 1. 控制 VB 模块播放提示音: AT+PLAY=[Num] (Num=1、2、3…….) 成功返回:OK 失败返回:ERROR 例:AT+PLAY=1 即播放第一条提示音; AT+PLAY=2 即播放第二条提示音,之后的提示音以此类推 2. 控制 VB 模块唤醒: AT+WAUP=[bool] (bool=1、0) 成功返回:OK 失败返回:ERROR 例:AT+WAUP=1 为唤醒 AT+WAUP=0 为退出唤醒(退出指令模式) 3. 控制 VB 模块复位: AT+RST 成功返回:Welcome to use VB590,VER is 1.0.1 并播放上电提示音 错误返回:ERROR 例:AT+RST 返回:Welcome to use VB590,VER is 1.0.1 4. 查询固件版本: AT+GMR 成功返回:固件版本号 错误返回:ERROR 例:AT+GMR 返回:+FIRMWARE_VER:1.0.1 +SDK_VER:V3.1.1 +AT_VER:1.0.0 OK 5. 设置 VB 模块的播放音量: AT+VOL=[Vol] (VOL=1~100) 成功返回:OK 错误返回:ERROR 例:AT+VOL=80 返回: +VOL80 OK 6. 设置 VB 模块的 UART0 波特率: AT+BAUD=[baud] 成功返回:OK 错误返回:ERROR 例:AT+BAUD=115200 返回:OK 7. 查询 VB 模块的 ID 号: AT+IDRD 成功返回:ID 号 OK 错误返回:ERROR 例:AT+IDRD 返回:AA 10 08 3F 2B BC 32 D4 5E A2(ID 号) OK ### 注意事项 1. 指令词不能超过 50 个 2. 当说“关闭语音”时,下一个指令必须要说“打开语音”才能正常使用,否则会播提示音“请打开语音” 3. 当说“关闭播报”时,下一个指令要说“打开播报”,否则喇叭不会响 4. 当用唤醒词唤醒后,如果十秒没有说指令,则播退下了,想再次使用必须唤醒方可正常使用 ## VB定制词条 ### 准备软件 `工具路径不能有中文` * 二次开发编程软件:cdk-windows-V2.2.1-20200418-2230 * 固件烧录软件:CSKYFlashProgrammer * 提示语音转换工具:WnvcEncoderTool_200922_V1.4 * 文字转语音软件:迅捷文字转语音或是其他 ### 词条静态库定制 #### 创建词条 创建一个文本文件(.txt),并在该文件中编辑所要用到的词条内容  唤醒词可以有多个 #### 训练词条 1. 通过浏览器访问:[华镇电子AI语音识别在线训练平台](http://47.111.14.84/),注册并登陆 2. 上传词条  3. 计算词条并下载解码图(发音词典优化用的,一般不需要)  4. 把解码图(fst_info.h)复制并`覆盖`到:`VB590_SDK→projects→examples→asr_fst→app→src`下;  #### 修改工程 1. 打开工程  `要安装过CDK软件才能打开` 2. 编译工程  选中工程名字——右键——Buil ALL  编译成功以后将在路径:`...\asr_fst\CDK\libasrfst\Obj` 下生成一个`libasrfst.a`静态文件  3. 复制静态文件 将生成的静态文件复制粘贴到路径:`...\Asr_Demo\lib` 下;  ### 工程代码修改 完成语音词条静态库的定制之后,还需要修改 Demo 的一点代码才算是完成词条定制,我们说出的指令才能被 VB 语音模块识别  打开工程 > 如果左侧文件列表不显示 >  需要修改的几个文件: * `asr_config.c` :词条定义文件 * `asr_config.h` :词条配置数量等配置文件 * `app_codec.h` :主要修改音量配置  #### 修改词条:`asr_config.c` `...\Asr_Demo\src\asr_config.c`  >  >  > 不能有错字,要一字不差 > 唤醒词上面写出来最多10组,下面为所有词条最多50组 #### 修改唤醒词数量:`asr_config.h` `...\Asr_Demo\include\asr_config.h` 找到 **#define ASR_WAKE_INDEX** 宏,把它后面的数字改成我们实际唤醒词的个数  >  #### 修改音量(可选):`app_codec.h` `...\Asr_Demo\include\app_codec.h` 找到 **#define CODEC_OUT_MAX_VOLUME_DB** 宏,把它后面的改成所需音量(0x27~0x3F)  ### 修改提示音 `如果不需要更改提示音,可以直接跳到下一个编译固件` #### 提示音制作 1. 通过迅捷语音助手将需要用到的提示音文字转换为语音文件  > 也可用其他语音合成软件 2. 将所有的语音文件按照顺序重命名,如:00.wav、01.wav、02.wav等等 注意,这个名称是后面关联的时候要对应的  3. 把这些语音文件放到 `WnvcEncoderTool_200922_V1.4\input`(原有的删除)  4. 将语音文件转换为语音库 运行 `GetFileName.exe`(一闪而过),会在`input`文件夹生成`fileName.txt`文件   > 后面关联语音使用的就是这个生成的名称 打开 `WnvcEncoderTool_200922_V1.4.exe` 然后在面板中输入: `./input/` → 回车 → `./output/` → 回车 → `16000` → 回车 输入不要漏掉`'/'`  经过以上流程后,正常情况下会在`output`文件夹中生成两个文件: `app_beep.c` 和 `app_beep.h`  > 1. 目录结构 >  > * .\input :wav 音频文件存放目录 > * .\output :生成的 beep.c 和 beep.h 存放目录 > * .\GetFileName :生成 fileName.txt 文件工具 > * .\WnvcEncoderTool_200922_V1.4: 提示音转换工具 > 2. 生成 fileName.txt 文件(没改统一00.wav需要) > 将需要处理的所有 wav 文件存放至 input/文件夹中,然后双击 `GetFileName.exe`,会闪现一个 windows 命令框,之后 `input` 文件夹中就会生成一个 `fileName.txt` 文件 >  > fileName.txt 文件中会显示所有wav 文件名,以及对应的转换之后的数组名 > 文件可手动更改: > “`test1.wav`”指需要处理的 wav 文件名(`wav 文件需要以英文命名`),“`beep_test1`”指转换之后的数组名 >  > 3. 注意事项 > * wav 文件格式为 `16k` 采样率、`16bit`、`单声道` > * 压缩比必须为 `16000` > * `./input/` 和 `./output/` 输入格式不要错了,注意斜杠方向。 > * 如果出现以下情况: “./input/test1.wav SampleRate is not 16000,encoder process will stop, pls check!” >  > 说明 `input` 文件夹中的 `wav` 文件不是采样率为 `16000Hz` 的`单声道`文件,需要重新更改文件格式 5. 复制语音文件 把 `app_beep.c` 复制到:`...\VB590_SDK\projects\examples\Asr_Demo\src\` 把 `app_beep.h` 复制到:`...\VB590_SDK\projects\examples\Asr_Demo\include\`  #### 提示音对应关系 ##### 关联识别指令-识别串口输出-识别提示音 `...\VB590_SDK\projects\examples\Asr_Demo\src\asr_config.c` `ASR_LOGIC asr_logic[ASR_CMD_INDEX]`  > 不需要发送串口可以填写`NULL` > 不需要提示音可以填写`0`或者`BEEP_000` > 几个识别内容填写几段,多的可以禁用 > `unsigned char send_uart_buf[SEND_UART_DATA_NUM][SEND_UART_DATA_LEN]` >  `RCV_LOGIC rcv_uart_logic[RCV_UART_DATA_NUM]`  > `unsigned char rcv_uart_buf[RCV_UART_DATA_NUM][RCV_UART_DATA_LEN]` >  ##### 其他提示音 `...\VB590_SDK\projects\examples\Asr_Demo\include\asr_config.h` * `#define WELCOME_PLAY` 开机提示音 * `#define WAKEDOWN_PLAY` 提出唤醒提示音 * `#define VOICE_POWER_FLAG_PLAY` 关闭语音识别后识别到其他指令,进行的提醒(提醒打开语音识别) ##### 提示音编译出错 不能填写未添加的语言,填写不存在的语音后编译会报错  ### 编译工程 回到工程目录`...\VB590_SDK\projects\examples\Asr_Demo\`,双击打开工程文件  右击工程,全部编译  编译成功,将生成可烧录固件 `?????.elf`,一般为`项目名称.elf` 路径为: `...\VB590_SDK\projects\examples\Asr_Demo\Obj\`  > 复制语音文件后可能出现问题。如下: >  > 那是因为语音数组占内存空间太大了,VB059 的 flash 装不下,解决办法:在 CDK 中打开app_deep.c 文件,把一些不要的提示音数组给屏蔽掉就行了 >  >  >  > 屏蔽之后,这些数据不占内存,就可以编译通过了 ### 烧录固件 #### 烧录器驱动  我的电脑->设备管理器,找到未识别设备,右键单击更新驱动->选择浏览我的 计算机以查找驱动程序软件->指定目录安装:VB590 开发资料 `\**FlashProgrammer**\Tools\cklink_dirvers`   #### 硬件接线 1. 开发板连接  2. 核心板连接(注意共地)  #### 烧录 打开`CSKYFlashProgrammer.exe`    >  >  >  > 如果软件不可用,把`danica_qflash.elf`文件放到`...\FlashProgrammer\VB590-V1.0.8\`下 `量产的话重复这一步骤即可` ### 其他配置 #### 串口控制播放提示音 我所拿到手的 Demo 中,只能用 UART1 去控制提示音(出厂固件不会有这个问题),但是在使用USB 供电的时候就无法使用 UART1,这时,就要使用 UART0 去控制,而且 VB 模块的串口输出也是从UART0 进行输出,这时就需要去添加串口数据的来源  1. 在 CDK 中打开`asr_event.c`,定位到`asr_sync_master_data`  2. 复制`asr_rcv_data_deal(pbyte, bufLen);`粘贴到这个函数的结尾,如图:  #### 唤醒时间设置 `...\VB590_SDK\projects\examples\Asr_Demo\include\asr_config.h` `#define VOICE_WAKE_TIMES` #### 串口设置 `...\VB590_SDK\projects\examples\Asr_Demo\include\asr_config.h` * UART0的相关设置  * UART1的相关设置  #### 串口数据 `...\VB590_SDK\projects\examples\Asr_Demo\src\asr_config.c` ##### 串口发送 `unsigned char send_uart_buf[SEND_UART_DATA_NUM][SEND_UART_DATA_LEN]`  识别到后会往串口中发送的内容,每行对应一个唤醒词,依次排序 如无特殊需求,默认即可 ##### 串口接收 `unsigned char rcv_uart_buf[RCV_UART_DATA_NUM][RCV_UART_DATA_LEN]`  串口接收到的触发指令,每个对应一个唤醒词,依次排序 如无特殊需求,默认即可
造物者W
2022年1月11日 19:04
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码