打印
[Linux学堂]

『开源项目』基于STM32的智能垃圾桶之语音识别

[复制链接]
1368|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
singleyork|  楼主 | 2020-7-15 14:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 singleyork 于 2020-7-15 10:41 编辑

大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了<基于STM32F103的智能垃圾桶套件>的所有成员,相信有很多小伙伴都已经忍不住跃跃欲试了,别着急,从这一篇开始,笔者将会带领大家一步一步来完成这个DIY项目。

这款套件的主控板采用的是我们『芯知识学堂』自主设计的OWL Micro F1开发板,如果有一直关注我们的小伙伴,相信大家对这款开发板不会再感到陌生了:




当然咯,我们今天的主角不是这款『OWL Micro F1开发板』,今天笔者要给大家介绍的是这个项目中比较重要的一个模块—语音识别模块:ASR-08B。




这个模块的语音识别部分采用的是LD3320这个芯片,然后集成了一颗STC11L16XE的单片机做了一些指令、数据处理,相比于网上其他的LD3320的模块,操作更加简单,用户不用折腾代码,直接串口发送指令设置关键词即可识别,而且,厂家还提供了专门的设置工具,操作非常简单(enmm,妈妈再也不用担心我不会写代码了……):




接下来,笔者将结合我们的这款智能垃圾桶的DIY项目,来给大家介绍一下这个ASR-08B语音模块的使用,首先,我们将ASR-08B模块与USB转TTL模块连接来,并将USB转TTL模块插到电脑上:




USB转串口模块与语音识别模块接线说明:

语音模块TXD --> USB模块RXD
语音模块RXD --> USB模块TXD
语音模块GND --> USB模块GND
语音模块VCC --> USB模块5V

这里需要注意的是,如果是使用厂家配套的USB转TTL模块的话,就不要使用USB转TTL模块的3V3电压给语音模块供电了,因为厂家提供的这个USB转TTL模块本身没有3.3V输出,语音模块的3.3V引脚直接悬空即可。

硬件连接好后,如果是之前有用过CH340设备的电脑,在设备管理器中直接会显示一个“USB-SERILA CH340”开头的COM端口,如果是未使用过CH340设备的电脑,则可能需要自己手动安装一下这个驱动,关于这个驱动的安装比较简单,笔者就不在这啰嗦了。



ASR-08B模块是支持三种识别检测模式的,即:循环检测模块、口令检测模式和按钮检测模式,在我们这个智能垃圾桶项目中,笔者使用的是“口令检测模式”,所谓的“口令检测模式”,就意味着,我们先要对上口令,才能够进行下一步操作。说到这里,是不是有小伙伴马上就想起了电影《智取威虎山》里面的经典台词:

土匪:天王盖地虎!(你好大的胆!敢来气你的祖宗?)
杨子荣:宝塔镇河妖!(要是那样,叫我从山上摔死,掉河里淹死。)
土匪:野**闷头钻,哪能上天王山!(你不是正牌的。)
杨子荣:地上有的是米,喂呀,有根底!(老子是正牌的,老牌的。)
土匪:拜见过阿妈啦?(你从小拜谁为师?)
杨子荣:他房上没瓦,非否非,否非否!(不到正堂不能说。)
土匪:嘛哈嘛哈?(以前独干吗?)
杨子荣:正晌午说话,谁还没有家?(许大马棒山上。)
土匪:好叭哒!(内行,是把老手)
杨子荣:天下大耷拉!(不吹牛,闯过大队头。)

当然咯,笔者今天要给大家介绍的所谓的口令,没有这么复杂,我们只需要给语音识别模块设置一个名为“猫头鹰”的唤醒口令即可。

接下来,我们需要根据垃圾分类的标准,将常见的一些垃圾,分为:可回收垃圾、厨余垃圾、有害垃圾和其他垃圾这四大类:

(1)可回收垃圾:旧报纸、塑料瓶、废铁、图书、坏手机、玻璃瓶、旧水管、洗衣机、电视机、电饭煲
(2)厨余垃圾:剩菜、剩饭、菜叶、果皮、隔夜饭、骨头、**蛋壳、茶叶渣、菜根、苹果核
(3)有害垃圾:灯泡、电池、药品、灯管、油漆桶、化妆品、老鼠药、指甲油、杀虫剂、农药
(4)其他垃圾:果壳、泥土、瓜子壳、废水、陶瓷、一次性筷子、卫生纸、烟头、餐巾纸、牙签

为了防止语音识别模块出厂可能自带的一些指令跟我们需要增加的指令有冲突,我们先将语音识别模块里面的所有指令一次性全部擦除(即:擦除所有关键词),操作步骤如下:



简单来说,我们只需要在串口正确打开后,点一下“擦除所有关键词”按钮,然后再点一下“发送”按钮即可完成操作。

接下里,我们来开始添加关键词,我们先点击一下“添加关键词”按钮,这个时候,在“数据发送区”就会出现一条示例指令“00,kai deng,001,$”,然后如果我们勾选了“是否显示命令解析”选项的话,在“数据接收区”会出现有关这条指令的详细解析,如下:



这里需要注意几个地方:

1、“关键词所在的行”如果只有一位数时(0-9),前面十位一定要0补齐;
2、“需要识别的词语或句子”两个拼音之间需要用空格隔开,并且,有且仅有一个空格,其他部分也不允许有多余的空格;
3、“逗号”分隔符一定要是英文状态下的“逗号”,不能使用中文状态下的“逗号”;
4、“254”被规定为口令模式中的口令,比如本例中的口令“猫头鹰”,不能用作普通关键词的返回值;
5、“255”被规定为屏蔽词,如本例中的“可回收垃圾”、“厨余垃圾”、“有害垃圾”、“其他垃圾”,这样就可以避免语音播报模块在播报这几条语音的时候,被语音识别模块识别到。

我们在添加关键词的时候,一定要严格按照上述要求进行操作,否则,可能会出现异常情况。

弄清楚了“添加关键词”的指令格式后,我们就可以来开始添加本例所需要的关键词了。我们以“猫头鹰”这个口令为例,我们只需要在“数据发送区”输入“00,mao tou ying,254,$”,然后点击“发送”按钮,当“数据接收区”出现“写入成功!”后,我们的关键词就设置成功了:



接下来,我们来测试一下这个“猫头鹰”的关键词,这里,我们需要选择“十六进制显示”,然后,我们直接对着语音识别模块说一声“猫头鹰”,就可以在ASR M08-B设置软件的“数据接收区”里看到有显示“FE”,即:254,说明我们的这个“猫头鹰”关键词设置成功了。



至于其他的关键词,我们只需要按照同样的方式设置即可。当然咯,一个一个设置关键词,还是会比较麻烦的,语音识别模块的厂家也为大家考虑到了这一点,所以在“ASR M08-B设置软件”里面做了一个批处理的按钮,即:一键设置。这个时候我们只需要新建一个记事本,命名为“垃圾名字关键词”,然后直接在这个文件里面输入以下内容:

@01,jiu bao zhi,001,$
@02,su liao ping,001,$
@03,fei tie,001,$
@04,tu shu,001,$
@05,huai shou ji,001,$
@06,bo li ping,001,$
@07,jiu shui guan,001,$
@08,xi yi ji,001,$
@09,dian shi ji,001,$
@10,dian fan bao,001,$
@11,sheng cai,002,$
@12,sheng fan,002,$
@13,cai ye,002,$
@14,guo pi,002,$
@15,ge ye fan,002,$
@16,gu tou,002,$
@17,ji dan ke,002,$
@18,cha ye zha,002,$
@19,cai gen,002,$
@20,ping guo he,002,$
@21,deng pao,003,$
@22,dian chi,003,$
@23,yao ping,003,$
@24,deng guan,003,$
@25,you qi tong,003,$
@26,hua zhuang pin,003,$
@27,lao shu yao,003,$
@28,zhi jia you,003,$
@29,sha chong ji,003,$
@30,nong yao,003,$
@31,guo ke,004,$
@32,ni tu,004,$
@33,gua zi ke,004,$
@34,fei shui,004,$
@35,tao ci,004,$
@36,yi ci xing kuai zi,004,$
@37,wei sheng zhi,004,$
@38,yan tou,004,$
@39,can jing zhi,004,$
@40,ya qian,004,$
@41,ke hui shou la ji,255,$
@42,chu yu la ji,255,$
@43,you hai la ji,255,$
@44,qi ta la ji,255,$
@49,mao tou ying,254,$

其中:

返回值001(行号01-10)属于“可回收垃圾”;
返回值002(行号11-20)属于“厨余垃圾”;
返回值003(行号21-30)属于“有害垃圾”;
返回值004(行号31-40)属于“其他垃圾”;
行号41-44属于屏蔽词(可回收垃圾、厨余垃圾、有害垃圾、其他垃圾);
行号49属于唤醒口令。

接下来,我们就可以来一键设置关键词了,我们先将数据接收区的显示模式改成“文本格式显示”,然后点击“一键设置”,选择文件“垃圾名字关键词.txt”,然后点击“打开”按钮:



因为我们设置的速度是1000ms,也就是说,每1000ms下发一条设置指令,所以,我们在“ASR M08-B设置软件”的“数据接收区”会每隔1000ms收到一条“写入成功!”的信息,直到出现“发送完成”的提示,意味着所有的关键词设置成功。



接下来,我们就可以来测试一下这些关键词了,测试关键词是否写入成功有两个方法,一个是点击软件上的“查询关键词”按钮,然后再点击“发送按钮”即可查询我们刚才写入的所有的关键词;另外一个就是可以直接通过判断语音识别模块的返回值来最终检验我们写入的关键词是否成功,具体操作请看视频:

智能垃圾桶语音识别演示视频

视频中有提到如何将模块设置成“口令模式”,其实,这条指令也同样可以在“一键设置”的时候,跟随其他关键词一起写入到语音识别模块中,相信看到这里,大家都应该知道要怎么操作了,笔者就不再赘述了。

ASR-08B模块这款语音模块,相比与之前笔者使用过的庆科的VBS7100语音套件有优点也有缺点,ASR-08B模块有几个比较突出的优点:

  • 离线识别:采用了LD3320离线式语音识别芯片,无需联网能够实现离线识别;
  • 设置简单:厂家提供了专用的设置软件,使得用户无需编程基础,全程傻瓜式操作,就能快速设置所有指令;

当然咯,其缺点也是比较明显的:

  • 识别率不高:由于LD3320芯片的局限性,导致了识别率只能在90%左右(虽然在离线式语音识别芯片中算高了,但是跟在线式语音识别芯片还是有一定差距);
  • 关键词数量有限:ASR-08B模块能够设定的关键词数量有限(最多50条),导致了我们能够写入的关键词数量不能太多,有一定的局限性;

有关ASR-08B模块和VBS7100语音套件的更多差异以及详细的使用教程,请大家自行翻阅相关资料,在实际应用中,我们可以根据自己的应用场景,选择离线式语音识别方案还是在线式语音识别方案。

关于我们这个DIY智能垃圾桶项目的语音识别部分,就给大家介绍到这里了,如还有疑问可以咨询我们,下一篇,笔者将要跟大家继续分享我们这个DIY项目中语音播报部分的实现,敬请关注!


如果你喜欢我们的这个DIY项目,欢迎分享、转载,在项目内容全部介绍完成后,笔者将会给大家免费分享所有设计资料,感谢大家的支持!


使用特权

评论回复

相关帖子

沙发
zeshoufx| | 2020-7-15 20:29 | 只看该作者
谢谢分享【基于STM32的智能垃圾桶之语音识别 】方案

使用特权

评论回复
板凳
forestabc| | 2020-7-16 13:53 | 只看该作者
方案不错

使用特权

评论回复
地板
古美门| | 2020-7-28 10:08 | 只看该作者
感谢分享

使用特权

评论回复
5
q15347427695| | 2020-8-7 15:58 | 只看该作者

使用特权

评论回复
6
不想画板子| | 2020-8-11 15:49 | 只看该作者
我用LD3320做过一块语音识别的电梯内召板,对于关键词的编程真的方便,基本上改几句就可以进行智能的识别

使用特权

评论回复
发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

41

帖子

1

粉丝