
#第六届立创电赛#智能语音小黄人
简介
使用启英泰伦离线语音模块制作的一个智能语音小黄人。配合一个MP3-TF-16P模块实现语音互动,能够播放音乐、故事,以及模仿警车、救护车、消防车。
简介:使用启英泰伦离线语音模块制作的一个智能语音小黄人。配合一个MP3-TF-16P模块实现语音互动,能够播放音乐、故事,以及模仿警车、救护车、消防车。开源协议
:GPL 3.0
描述
* 1、项目功能介绍
使用启英泰伦离线语音模块制作的一个智能语音小黄人。配合一个MP3-TF-16P模块实现播放离线音频资源,例如儿童音乐和童话故事,还能模仿消防车、警车、救护车,还有彩灯和小夜灯功能。
本项目示例语音内容:
1. 你好、晚安
2. 小黄人魔性笑声
3. 模仿消防车、警车、救护车
4. 儿童诗歌朗诵
5. 成语故事
6. 童话故事
7. 儿歌
8. 童声歌曲
9. 播放特定歌曲
其他功能:
RGB彩灯,小夜灯,眼部运动,播放音频眼睛LED律动
*2、项目属性
原创首次公开。
* 3、开源协议
GPL3.0
*4、硬件部分
离线语音识别使用启英泰伦的CI-C22GS02S模块,为了实现TF卡离线资源的播放,配合使用了型号为MP3-TF-16P的MP3模块,由语音模块通过串口1来发送命令进行控制。。
本项目经过了4个版本的迭代:
- 第一版测试了基本功能,但是LED律动功能不正常。
这个版本使用了两个喇叭,一个用于语音模块响应词的播放,一个用于MP3模块资源的播放。MP3模块喇叭输出设计了一个倍压电路,用于音频LED律动。但是因为串联了LED而且电压不足的原因,安装到外壳内部之后效果几乎看不到。
- 第二版将LED律动倍压电路电容更改为电解电容,但是仍然效果不好。
- 第三版在软件和硬件上都进行了进行了大幅改进:
-
- 直接使用MP3模块播放响应词,这样可以移除语音模块的喇叭,将原先的2个喇叭减少为1个。响应词播放音质也比使用语音模块播放有了较大提升。由此带来的另外一个好处是如果不变更命令词,而仅仅更新播报词,那么无需重新编译和烧录固件,只需更新MP3模块对应的播报词音频文件即可。
- LED律动倍压电路改为4倍压,律动功能可以正常工作了(参见演示视频)。
- 增加语音命令反馈眼部的物理运动。通过控制一个小型电磁铁来实现。第一次设计有一个小bug,割线+飞线后调试成功。第四版修复了此线路问题。
- 增加了TP4056锂电池充电电路。
- 增加了RGB彩色LED灯带,其中三个灯珠放在背面向外发光,其他灯珠在内部发光。RGB彩灯代码使用了官方SDKcolor_light组件的部分代码,但是移除了HSV相关代码,因为加入HSV代码之后引入了math库,会导致固件体积过大而编译报错。
- 增加警灯、彩灯、小夜灯功能。
- 增加了一个电源钮子开关。
- 为了实现以上功能,语音模块所有可用的GPIO都利用上了。包括RX0/TX0/RX1/TX1/MCLK和三路PWM。
- 第四版进行了如下升级:
a. 修复了电磁铁电路的问题。
b. 调整了RGB LED的插座类型。
c. 增加了RGB LED的数量。
d. 小夜灯同时打开RGB灯带和眼部LED。
e. MP3 BUSY引脚增加一个跳线,烧录的时候需要断开此引脚,否则烧录的时候会干扰串口导致固件下载失败。
f. 晚安自动打开小夜灯。 - 为了不再改动第三版的PCB面积,第四版将非常少量的元件贴在了背面。
*5、软件部分
离线资源均包括播报音的音频文件均放置在MP3模块的TF卡上,相同类型的音频资源放在同一个文件夹下,语音模块通过串口命令控制MP3模块播放指定文件。
-- == 简易开发指南 == --
获取SDK
1. 到启英泰伦AI平台注册账号。
2. 登录平台账号
3.如下图所示,选择左侧菜单栏的“开发资料”,进入开发资料主界面;
4. 第三步:如下图所示,选择“软件和固件(SDK开发包,标准Demo固件等)”;
5. 选择您需要下载的SDK版本,如下图所示(此图以“CI112X_SDK_V1.2.9”为例);
6.如下图所示,点击”CI112X_SDK_V1.2.9.zip”进行下载操作;
7. 如下图所示,等待加载完成后,进行文件的另存;
请注意:加载的过程当中请勿退出或者刷新界面,否则制作进度将会终止!
8. 选择指定文件夹存放SDK压缩包;
获取IDE
官方已经配置好了一个绿色版的Eclipse,在“开发资料”-“相关工具及手册”页面,获取百度网盘下载地址。
软件开发
将下载的Eclipse IDE 和 SDK 分别解压(注意必须是英文文件夹),然后使用Eclipse导入SDK项目,即可开始开发。
关键是修改user_msg_deal.c文件,根据cmd_id执行函数。cmd_id就是“语言模型”中“命令词列表”前面的序号,其中cmd_id从2开始即为命令词(cmd_id=1是唤醒词)。
语音模块使用的是freeRTOS,编程语言是C语言。
核心业务逻辑代码如下所示:
play_chengyu()这个函数我做了很多封装,但是实质是循环播放一个文件夹(文件夹参数dir是数字形式的文件夹名称,我把相同类型的文件放在数字文件夹里面,比如01,02,03,04,这是MP3模块对文件访问的要求)。
#define DIR_CYCLING_CMD 0x17
mp3_send_cmd(DIR_CYCLING_CMD, 0x00, dir);
从串口发送命令的函数如下:
void mp3_send_cmd (uint8_t cmd, uint8_t high_arg, uint8_t low_arg) {
uint8_t i;
uint16_t checksum;
mp3_cmd_buf[3] = cmd;
mp3_cmd_buf[5] = high_arg;
mp3_cmd_buf[6] = low_arg;
checksum = mp3_checksum();
mp3_cmd_buf[7] = (uint8_t) ((checksum >> 8) & 0xFF);
mp3_cmd_buf[8] = (uint8_t) (checksum & 0xFF);
// Send command to UART1
for (i=0; i<10; i++) {
UartPollingSenddata(UART1,mp3_cmd_buf[i]);
}
其中校验计算部分可以参考MP3模块文档的调试手册。
语音模块SDK开发更多内容请参考启英泰伦AI平台文档。
创建语言模型
详细内容可以参考文档中心的新手指南相关部分
首先进入启英泰伦AI平台,左侧菜单栏中选择语言模型,点击创建,进入语言模型制作主界面。
语言模型制作
- ①项目名称:填写该语言模型对应的名称(请正确填写,后面如若需要查找时,方便搜索);
- ②芯片型号:选择对应的芯片型号(如对芯片型号不了解,可浏览 ☞硬件选型指南);
- ③产品类型:选择语言模型用于的产品,目前有大于100种产品类型,用户可以点击该下拉列表中的“搜索更多”按钮找到符合该语言模型的产品,如果列表中没有,可以选择“其他”;
- ④语言类型:选择语言模型对应的语言,目前有中文、英文、中混英、日文供用户选择;
- ⑤声学模型类型:在选择了芯片型号和语言类型后,该下拉列表会自动出现对应的可供选择的声学模型,用户可以根据自己的需求进行选择;
- ⑥上传命令词制作文件:用户可以按要求的格式将希望生成语言模型的命令词填入一个文件中,按此按钮上传到平台中,平台使用该文件制作对应的语言模型;
- ⑦下载样例:提供了命令词制作文件的模板,根据用户的语言类型选择,会自动生成对应语言样例的下载链接;
- ⑧添加明细行:也可以点击这里,直接编辑命令词列表。
- ⑨保存or丢弃:确认无误后,选择保存,进行文件生成。
命令词样例如:中文样例如下图:
英文样例如下图:
日文样例如下图:
保存后即可下载声学模型和语言模型,声学模型只需要第一次下载然后合并到固件即可。未来如果同一产品的命令词有更新,只需重新建立一个语言模型,然后再次下载并更新语言模型即可,声学模型可以保持不变。
播报音合成
点击左侧的菜单中的“播报音合成”进入该模块,如下图所示:
请用户参考如下流程进行操作(注意下方数字标识对应下图中的数字标识),便可进入定制播报音的主界面:
- ①选择菜单栏左侧的“播报音合成”按键
- ②点击创建,即可进入主界面。
播报音合成界面说明
- ①语音合成项目名称:用户填写对应的项目名称;
- ②语言类型:目前提供中文以及英文播报音制作;
- ③人声分类:目前提供成年男声,成年女声,男童声,女童声这四种人声制作;
- ④语速:有20个等级,默认等级为10,等级越高语速越快;
- ⑤合成人声:选择完成人声分类后,选择对应的人声;
- ⑥下载样例:选择语言类型后,提供制作表格样例的下载链接;
- ⑦音量:有20个等级,默认等级为10,等级越高音量越大;
- ⑧语音合成文件上传:用户可以按要求的格式将希望生成播报音的词条填入一个文件中,按此按钮上传到平台中,平台使用该文件制作对应的播报音;
- ⑨试听样音:用户可以根据自己的合成人声进行样音试听;
- ⑩填写说明:用户可以及时查看相应的说明;
- ⑪保存or丢弃:确认无误后,选择保存,进行固件生成。
填写说明
- 该功能窗口可将文本批量转换成SDK中需要的播报语音。
- 根据需求选择相应的参数,点击试听按钮试听。
- 标注“推荐“字样的为推荐发音人。
- 语速:0最快-20最慢,推荐值10。
- 音量:0最小-10最大,推荐值10。
注意
- 上传的EXCEL中,第一列为音频序号,第二列为音频名,第三列为待合成文本。
- 音频名不宜过长且不能包含空格,待合成文本不宜超过四十字。
- 现仅支持上传EXCEL文件,请在“样例中”下载EXCEL模板。
传的播报音样例文件格式模板可以通过创建表单界面中的“下载样例”获取。用户可以按照该模板的格式,填写需要的播报语句,以及其内容,保存后上传。
中文的样例如下图所示:
英文的样例如下图所示:
表单的提交
用户在合成播报音时,需先新建表单,填写好表单中对应的内容,如下图所示:
填写完成后,点击“上传你的文件”,上传已经按照规范做好的excel文件。
上传完成后,点击左上角的“保存”按键;
等待文件被平台加载;
请注意:加载的过程当中请勿退出或者刷新界面,否则制作进度将会终止!
播报音下载
播报音合成成功后,选择“下载语音合成文件”,便可得到生成的播报音。
语言模型配置文件修改
1. 打开下载的语言模型文件夹中 CmdWordStructure 目录下配置文件[60000]{cmd_info}.xls
2. 将<0>cmd这个表格中的“播报音1ID”,改为从0开始依次递增。如果你需要开机播放欢迎语,那就把一行的播报音ID改为一个与表格上方不重复的数字,本例中改为68。和播报音ID改为文件名前缀不会使用的一个大数字,比如1000。
3. 将<1>wake表格中的“播报音1ID”的第一行改为0,即唤醒词“小黄人”的对应播报音ID为0,与第一个表格一致。如果你需要开机播放欢迎语,那就把一行的播报音ID改为<0>cmd表格中一行相同的播报音ID,上面是68,所以这里也是68。和播报音ID改为文件名前缀不会使用的一个大数字,比如1000。
播报音文件名修改
解压上面合成并下载的播报音压缩文件,里面的文件名前缀应该是对应了上面那个<0>cmd表格中的播报音ID。
如果你在上面设置了欢迎语播报音ID,也可以在上面播报音合成步骤,将它加入播报音合成列表。或者也可以使用一段音乐作为开机欢迎语,关键是要将它的前缀改为那一行设置的播报音ID,在上例中我们设置开机欢迎语播报音ID为68,那么开机欢迎语的文件名就应该是"[68]开机欢迎.wav"或者"[68]开机欢迎.mp3"。
注:上述步骤是将播报音合成到固件中。而本项目中使用MP3模块播放所有播报音,所以本项目是把所有播报音放在TF卡上,由操作系统发出命令来控制MP3模块播放指定文件。虽然我使用MP3模块播放播报音,但是固件合成仍然需要对应的播报音(既然实际不使用模块播报,可以使用任意的文件替代,但是不能没有),如果固件内缺少播报音会无法正常运行。播放指定文件夹串口命令,请参考上文代码。
声学模型、语言模型、播报音文件替换
- 语言模型压缩包内各文件夹说明
CmdWordStructure:该文件夹存放的内容为{cmd_info}表格,为用户词条置信度相关参数配置文件;
GfstCmd:该文件夹存放的内容为平台生成的命令词模型文件;
GfstWake:该文件夹存放的内容为平台生成的唤醒词模型文件;
- 语言模型文件替换方式
SDK语言模型文件夹位置:CI112X_SDK_ASR_Offline_V1.x.x\sample\internal\sample_110x\firmware
用户将下载的语言模型文件夹中 GfstCmd 以及 GfstWake 这两个文件夹里的[0]asr_chinese_SE292_CI1122_normal.dat和[1]asr_chinese_SE292_CI1122_normal.dat文件替换SDK语言模型文件位置内的asr文件夹里的内容。
用户将下载的语言模型文件夹中 CmdWordStructure 目录下配置文件[60000]{cmd_info}.xls,放入SDK语言模型文件夹位置的 user_file\cmd_info 内并替换原先的内容;(文件名必须要"[60000]"开头,可以改为类似"[60000](小黄人{cmd_info}.xls"之类的名称)
- 声学模型文件替换方式
SDK声学模型文件夹位置:CI112X_SDK_V1.x.x\CI112X_SDK\sample\internal\sample_1122\firmware\dnn
用户将下载的声学模型里的内容放到SDK声学模型夹位置内,替换SDK原有的内容,即可使用。
- 播报音文件替换
文件夹位置:CI112X_SDK_ASR_Offline_V1.x.x\sample\internal\sample_110x\firmware\vocie
用户将新生成的播报音文件放入上述指定的目录中。
固件合成与烧录
在烧录前需要先将USB转串口的电源地(GND)、串口(TXD、RXD)收发引脚分别和模块对应的引脚连接起来,注意USB转串口的RXD和TXD分别对应模块的UART0_TX和UART0_RX。
1. 第一步:打开“合成分区bin文件.bat”;
2. 第二步:如下图所示,合并分区时会提示选择音频格式,新手用户请选择“adpcm”,选择完成后,按回车键,待加载完成后,该界面会自动关闭;
3. 第三步:打开“打包升级.bat”;
4. 第四步:选择您购买的开发板对应的芯片型号(此操作为第一次使用出现,后续使用请直接进行第五步);
5. 第五步:确认好芯片型号后,点击“固件打包”按钮,进入升级界面;
6. 第六步:固件升级信息填写:
-
在版本信息区填写软硬件相关信息。
-
选择或填写各分区bin文件路径。
-
点击“刷新地址”,点击“打包固件”。
-
如果弹窗提示地址冲突,调整各分区大小,重新执行上一步。
- 弹窗提示“固件已生成”表示打包成功。如下图所示
固件烧录
第一步:打开“打包升级.bat”;
第二步:选择您购买的开发板对应的芯片型号(此操作为第一次使用出现,后续使用请直接进行第三步);
第三步:确认好芯片型号后,点击“固件升级”按钮,进入升级界面;
第四步:固件升级
- 选择或填写固件路径。
- 勾选待升级的设备所连接的串口。
- 其他选择:强制更新所有分区,鉴权文件,加密。
- 待升级模块切换到升级模式(短接PG、EN两个引脚)。
- 重启待升级设备或者给设备重新上电,开始升级。
- 等待升级完成,如果顺利的话,升级成功后会进度条会显示100%, 表示更新成功,设备会自动引导进固件代码,如果有上电播报音,能听到上电播报。
- 首次烧录固件时间会较长,以后再次烧录就只会更新固件有改动的部分。
- 如果烧录过程中不小心断电,可能会导致下次烧录后无法正常工作,此时勾选“强制更新所有分区”即可。
*6、BOM清单
*7、大赛LOGO验证
PCB裸板及Logo验证。
焊接好的板子(第四版)
![]() |
![]() |
安装后小黄人内外部图片
![]() |
![]() |
![]() |
* 8、演示您的项目并录制成视频上传
演示视频请参看B站链接,文件太大无法上传。
https://www.bilibili.com/video/BV1V34y1X7jH/
设计图
BOM
ID | Name | Designator | Footprint | Quantity |
---|---|---|---|---|
1 | 100uF | C1 | CAP-SMD_BD5.0-L5.3-W5.3-FD | 1 |
2 | 10uF | C2,C8,C9,C10 | C0603 | 4 |
3 | 100nF/50V | C3,C11 | C0603 | 2 |
4 | 470uF | C4,C6 | CAP-TH_BD8.0-P3.50-D0.6-FD | 2 |
5 | 220uF | C5,C7 | CAP-TH_BD6.3-P2.50-D1.0-FD | 2 |

评论