2019-04-24
wukong-robot:一个更加优雅的中文智能音箱项目

wukong-robot:一个更加优雅的中文智能音箱项目

dingdang-robot 之殇

在两年前,我做了第一个智能音箱项目 dingdang-robot 。在去年 7 月加入上报统计后,在不到一年的时间里,这个项目已经运行在 1000+ 台设备中,被唤醒了 128,000+ 次。截至今天,这个项目的个人版和社区版在 Github 上总共获得了 2,600+ 个 stars ,820+ 次 forks。

在我去年的一篇年度总结中,我提到因为 dingdang-robot 本身维护上的困难,我将项目迁移到了 dingdang-robot 组织交由社区进行维护。很遗憾的是,即使迁到了 dingdang-robot 组织,由于组织维护者们都并不是全职维护这个项目,而且硬件和操作系统上的差异始终给 dingdang-robot 的维护带来了很大的问题,所以取得的效果并不理想。而且随着自己能力的不断提升,我对 dingdang-robot 里头的代码也越发不满意:

  1. dingdang-robot 是基于 Python 2 的,在 Python 3 环境里跑不起来。而 Python 2 已经停止维护了。
  2. dingdang-robot 的热词唤醒(KWS)复用的是 jasper-client 的那套,基于 PyAudio 自己实现录音和 VAD ,基于 PocketSphinx 实现热词唤醒。然而那套录音和VAD代码我个人觉得写得并不鲁棒,为了避免各种边界情况我不得不加了一些 try...catch ,虽然没人发现这一点,但我自己是过不了自己那一关的,每每想到自己在用一套有问题的代码作为别人的入口就像是留一个坑叫别人跳进来,内心觉得很有罪恶感;另外 PocketSphinx 的安装非常复杂,虽然我提供了树莓派的镜像,但是很多人还是希望手动安装,而 PocketSphinx 对环境要求也很苛刻,所以总会遇到各种奇怪的问题,而我又不能复现;
  3. 还有一些使用上的便利性问题。比如没有更新提示,有时候修了一个bug,别人不知道,提了issue后我得告诉他请更新到最新;再比如使用YAML作为配置文件,但是很多用户不懂YAML的语法格式,常见的比如把半角冒号(:)打成全角(),或者冒号后没有跟着空格再写键值;再比如当初我处理 log 的打印也设计得比较傻逼,为了写到文件里头,直接用的是重定向,完全没有考虑用 FileHandler 这种东西。

到了今年,我决定对 dingdang-robot 进行完全重写,做出一个更加 优雅、灵活、鲁棒 的版本。

Read More

2017-05-28
手把手教你编写叮当机器人插件

手把手教你编写叮当机器人插件

叮当 是一款可以工作在 Raspberry Pi 上的开源中文语音对话机器人/智能音箱项目,目的是让中国的Hacker们也能快速打造类似 Amazon Echo 的个性化的智能音箱。

由于叮当是完全开源的,编写插件来满足自己的个性化需求就成了使用叮当的最大乐趣。您可以自由地接入自己需要的服务,让叮当更好的为您服务。

这篇文章将一步步教你如何编写一个天气插件,并最终发布到 dingdang-contrib 中。

交互示例:

  • 用户:天气
  • 叮当:深圳天气。今天:晴。最高气温:25~30摄氏度;明天:晴。26~31摄氏度;后天:小雨。最高气温:23~29摄氏度。
Read More

2017-05-22
叮当:一个开源的中文智能音箱项目

叮当:一个开源的中文智能音箱项目

这个项目其实来源于我生活中的一个需求:我每天晚上都会去厨房做一个面包当明天的早餐,当我把用料按顺序准备好放进面包机时,我需要准确预约到明天早上我吃早餐的时间。然而,几乎每次在这个时候我都没有带手机在身边,而是都放在客厅里充电,这时只能跑去客厅看时间。虽然厨房到客厅只有几步之遥,但自己又是懒癌患者,每天都要这么来回奔波就觉得很不方便。要解决这个问题当然有很多种方法,比如直接买个小时钟放在厨房。不过我更希望“连看都不用看”,直接有人告诉我时间。所以,我需要一个像 Amazon Echo 那样的智能音箱。

然而,不论是 Amazon Echo 、Google Home 还是微软 Cortana 音箱,在国内的使用都是个问题。虽然国内也有类似的智能音箱产品,但我没有用过这些产品,不知道可定制性如何。比如,如果我需要开发个功能让它告诉我某种面包的配方是什么,这些产品就不一定能做到了。考虑再三,我决定自己动手写一个。整个项目用了差不多三个星期的业余零碎时间。

先放上项目主页:http://dingdang.hahack.com

下面分享一下我在开发这个项目过程中的心得。

Read More