前言

Cozmo官方在11月15号发博文称2017.12.05号这天将会发布一个大版本,在这个版本中Code Lab将会得到极大的增强,最大的更新是界面中将增加Constructor Mode。

它长这样:

Constructor Mode增加了更多的编程积木,包括条件语句、数学操作符、变量函数等等,高阶用户将能做出更具表现力的东西。

而原先基于图标的编程界面也将保留,对于低龄用户和新手,它更为友好和直观。

顺便一提,如此惊艳而流畅的操作界面基于scratch3.0。

我数着日子等呀等,到了12.04号,一早跑到二楼南书房,打开Google Play,心想官方说不定想给大家一个惊喜,提前一天发布了更新。于是我有些手抖地在Google Play输入Cozmo,等待进度条加载的时候,就像等待期末考试突击科目的成绩,真是坐立难安,恨不能找个插件以刮奖的方式查看结果。

哈,还好没更新,不然我都没有做好心理准备,要怎么来表现我的开心。这就像表白的时候,心理有个声音说拒绝我吧拒绝我吧,不然我开心得不知道下一步该干嘛。

这样一来我就有足足一天的时间迎接cozmo的大版本更新!我打开之前用Cozmo Python SDK写过的项目,突然想到大版本更新之后,对我之前的作品不兼容怎么办?

我赶紧整理了一下做过的好玩项目,趁它更新之前,发布到github官方论坛里。

Cozmo what is this

1
2
- Cozmo, what is this ?
- Let me see! Oh, it is the coffee mug.

我们来看看实际效果。(只录了cozmo回答的部分,声音可能有点小,记得调大你的音量呢。)

我来简单介绍一下这个项目。一开始,Cozmo安静地呆在桌子上,你可以向它发号施令,Cozmo虽然脾气有点坏,不过目前还不会像吴克群那样抱怨说:

1
2
3
4
我是个小兵
我绷紧了神经
在战场上拼命
听谁在发号施令

所以你可以放心命令它左走右走,前进后退。如果你愿意你还可以问它:

能不能为我再跳一支舞,你记否千百年前借伞的西湖。

我很恶俗地改了歌词。为了让它跳舞,你只要说:

cozmo dances.

ps: 我为它增加了中文支持,目前的语义处理很弱,所以你说出我上边那段恶俗的歌词,它可能还真会为你跳一支舞 :)

我们可以发号施令,让cozmo在桌子上四处游荡,当它来到一个咖啡杯面前时,你可以问它:

Cozmo, what is this?

它会站在咖啡杯面前,若有所思说:

Let me see… Oh, it is the coffee mug.

如此一来你可以让Cozmo在屋子里来回走动,询问它都看到些什么。

目前我已经把项目源码放在了github上:Cozmo-What-Is-This,同时也发到了Cozmo官方社区里:Cozmo What Is This: use Inception-v3 model to identify objects

社区里有个国外小哥,run了这个项目,还录了视频发到了YouTube:cozmo AI voice command and image recognition

如果你访问不了YouTube也没关系,因为这个小哥拍的实在有点烂,我原本想跟他说你在视频下放上我的源码库链接吧,这样其他感兴趣的小伙伴可以自己run起来。后来看了视频后,觉得还是不要让大家知道这个视频与我的项目有关为好。

灵感来自组合

Cozmo-What-Is-This实际组合了社区里的两个项目。

其一是CrowdFlower的创始人Lukas之前做过的一个爆款项目: How to build a robot that “sees” with $100 and TensorFlow,这个项目让树莓派机器人在屋子里游荡,每当看到什么东西在面前,它就会说 “I am thinking… it is xxx”, 这个机器人好像一个吟游诗人,在它所行之处,赋予所见之物以名字。

这个机器人在说"I am thinking…“的时候,我简直被为作者的机智所折服。该项目用到了inception-v3 model,树莓派上跑神经网络很慢,于是作者在让机器人先说出"I am thinking…",这段时间树莓派实际是在缓慢地跑神经网络模型来识别拍摄的图片,而观众会以为机器人真的在思考(因为它就是那样说的啊,而且还真的低头沉思),尽管时间有点久,大家的好奇心反而加重,不会表现出不耐烦,等它终于说出正确的结果,观众会觉得刚才果真是在深思呢!(《银河系漫游指南》里deepThought在回答The answer to life, universe and everything is 42可是用了750万年 : )

“I am thinking…“这个心理学小技巧也被我纳入到Cozmo-What-Is-This项目里。

由于Lukas没有开放源代码,我自己复现了这个项目的核心部分,有兴趣的同学可以戳这里:基于树莓派和Tensowflow的物体识别-brain

灵感来源的第二个项目是Cozmo-Voice-Commands ,这个项目写的很棒,让Cozmo能接收语音指令。

这个项目也是Cozmo-What-Is-This的基础骨架,我fork了它,整个控制流程用的是该项目,在原本的基础上我做了两个工作:其一是加入中文支持(目前加上中文之后,一共支持5门语言);其二是加入了cozmo what is this这条语音指令。

这种组合已有的社区项目,在它们基础上去实现自己的想法,是开源社区常见的做法。有人统计过,github上代码重复率很高,对这个研究有兴趣的朋友可以戳这篇论文:A Map of Code Duplicates on GitHub,研究称GitHub 上 82% 的代码是重复代码,我觉得是一件好事,说明大家都在高效地复用代码,而不是闭上门来钻木取火。

run it

接下来假设你也是一个Cozmo玩家,我来教你如何把这个项目跑起来。

首先你当然得有一台Cozmo , 没有的同学可以关上电脑洗洗睡了 :)

1.安装Cozmo Python SDK

Cozmo Python SDK的安装方法官方文档里写的很详细,结合你的操作系统和移动设备,跟着教程来即可。如果你在安装的过程有遇到什么困难,可以到社区里求助,当然也可以给我发邮件,我会尽量为你提供帮助。

2.安装portaudio

安装方式根据你的操作系统不同而不同。

  • MacOS: brew install portaudio (当然你首先需要安装了Homebrew)
  • Linux: sudo apt-get install flac portaudio19-dev python-all-dev python3-all-dev && pip3 install --user PyAudio
  • Windows: 你需要安装一下git

3.克隆项目

git clone https://github.com/wwj718/Cozmo-What-Is-This

4.安装依赖

1
2
3
cd Cozmo-What-Is-This
pip install -r requirements.txt (python3.5 virtual env)
python classify_image.py --model_dir tf/imagenset/

就绪

一切就绪,就可以运行这个项目啦: python cvc.py

之后程序让你选择使用一门语言来控制Cozmo。(我一般用英文或中文)

现在你可以问Cozmo:

Cozmo, what is this?

或者

小不点,这是什么

感觉小不点不大好听,起名果然是最难的事情之一,岂止是为变量起名。

Enjoy yourself :)

Todo

我准备把唤醒词和判断语音终止的功能加入这个项目里,如此一来交互过程将更为自然。这块的功能去扒智能音响类项目的代码就好了,dingdang-robot是个不错的选择,代码清晰明了。我最近比较忙,如果你提前做好了,到时候给我提个PR呢 : )