这周又搞了一周语音识别,速度太慢了,本来以为可以开始搞视频或者SLAM了。当然,我也清楚,这其中的每一块都是很大的一个领域,都有很多东西值的去研究,但我目前只是在做应用,把现有的技术堆砌起来,组装成一个机器人,仅此而已。因为年底我就要离职了,想在进入新公司的时候,能有一个拿的出手的成果来。

     这周我做的是离线语音识别,因为目前的语音对话,是你说一句,机器人回一句,不停的循环。我想实现只有在检测到特定命令词之后,才开始使用在线的语音对话,否则就处于静默状态,使用离线识别等待命令词唤醒。用在线识别也可以实现这个效果,不过非常大的缺点就是,既使是在静默状态下,也要不停地把本地的音频数据发往服务器做识别。这样就很浪费带宽,最重要的是有隐私泄露的问题,因为我们肯定只想在自已知情的情况下上传语音数据。离线识别使用的是cmu pocketsphinx的开源库,pocketsphinx支持很多种语言,我做的是中文的识别,它对有限的命令词识别效果非常好。我参照源码中的continuous.c的代码,把离线语音识别集成到了我的机器人的语音功能当中,并和在线语音识别相配合。系统启动时,首先启动离线识别,当检测到唤醒命令词后,关闭离线识别并切换到在线识别。因为离线和在线识别,都要从麦克风读取数据,所以同一时间只能有一种识别模式。当不需要在线识别后,通过命令词切换回静默状态,由离线识别检测唤醒命令词。

    最终的测试结果在笔记本上测试还是不错的,在树莓派上就稍微差一点,树莓派好像不能同时播放两条语音,当同时播放识别结束的提示音和播放机器人的回复时,很容易造成后续的asr失败。最后,只能是把树莓派上的提示音取消掉,只播放机器人的回复,这个问题没有了。还有一个问题,就是树莓派上的识别效果好像有点差,有时候讲好几次,才能识别正确,不知道是不是麦克风的问题,我在派上用的是respeaker的6麦克阵列,应该效果很好才对啊。不管怎么说,机器人语音的功能目前都全了,虽然有些地方还差强人意,这些留到以后再慢慢优化吧,到年底还剩下不到4个月了,还有好多东西没做,我都有点担心机器人在年底前能不能做完了,祝我好运吧!奋斗

视频地址:http://www.iqiyi.com/w_19rvi2wwuh.html


 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐