叮当--中文对话机器人开源项目基于 PocketSphinx离线引擎的语音唤醒优化

项目博客:http://dingdang.hahack.com/

-->写给玩过此项目的童鞋。

项目配置教程中的修改唤醒词步骤是这样的(如图):

叮当--中文对话机器人开源项目基于 PocketSphinx离线引擎的语音唤醒优化

但我找到的诀窍并不完全是按这个步骤来的,下面将举例说明。

  1. 给机器人起名字:“小贝”;
  2. 确定一个唤醒词(最好用四字词):小贝同学
  3. 然后用手机语音测试,如Siri。对着手机说:“小贝”和“小贝同学”,看手机上识别出的结果,可能的结果有:“小为”、“交杯”、“小类”、“小贝”“小白” 和 “小贝同学”、“小飞同学”、“小薇同学”、“这位同学”等等等。。。。
  4. 记录这些词的大写拼音字母到keyword.txt文件中,上传并编译成模型,然后把得到的后缀为 .lm 和 .dic 的文件下载下来;
  5. 替换 /home/pi/.dingdang/vocabularies/pocketsphinx-vocabulary/keyword 下的同名文件;
  6. 重新运行叮当,将其放在嘈杂的环境中,然后查看日志输出,统计识别出最多的结果,绝大部分都是二字词,而该系统只有识别到含有机器人名字 “XIAOBEI” 或者 “XIAOBEI**” 的结果才能唤醒音箱的;
  7. 所以我们可以新建一个keyword.txt文件只写入“XIAOWEI”(用于识别返回嘈杂环境中误识的结果,绝不可以含有机器人名字拼音“XIAOBEI”)“XIAOBEITONGXIE”(用于识别返回唤醒词的结果,必须含有机器人名字拼音“XIAOBEI”才能唤醒机器人),然后上传编译成模型,但这次只把其中 .dic 的文件下载下来再次替换 /home/pi/.dingdang/vocabularies/pocketsphinx-vocabulary/keyword 下的同名文件;
  8. 然后重新运行叮当,你会发现误识率降低了,识别率也升高了,一叫就醒。

原理:

      嘈杂环境中绝大多数识别到的都是二字词,所以匹配到dictionary文件中的“XIAOWEI”,不含有机器人全名“XIAOBEI”,所以无法唤醒系统;而通过四字唤醒词唤醒时,则会匹配到dictionary文件中的“XIAOBEITONGXUE”,其中含有机器人的全名“XIAOBEI”,所以能唤醒系统。其过程如图所示:

叮当--中文对话机器人开源项目基于 PocketSphinx离线引擎的语音唤醒优化

补充一个例子文件截图,方便理解:

叮当--中文对话机器人开源项目基于 PocketSphinx离线引擎的语音唤醒优化

注:本人用的是适配树莓派的四麦阵列,这方法实测有效,但用户体验还是有待提高,各路大神如若有更好的方法,希望多多指导,小弟感激不尽!还有,小弟才疏学浅,文章如有表达不清的地方还希望多多指正!谢谢!