回到小学时,在操场上玩的常见游戏之一就是剪刀石头布。 您可以选择石头(闭合的拳头),纸张(平坦的手)和剪刀(拳头的食指和中指伸出,形成一个V)。 规则很简单:剪刀敲打石头,纸敲打石头,剪刀敲打纸。
这个项目有四个组成部分。 在IBM Cloud中运行的Node-RED,在Raspberry Pi上运行的Node-RED,Watson Visual Recognition服务以及Watson IoT Platform服务。 请参考Github仓库。

训练Watson视觉识别
TJBot使用Watson Visual Recognition服务对摄像机捕获的图像中的移动进行分类。 Watson服务接受了三组图像的训练:岩石(闭合手),纸张(平手),剪刀(拳头的食指和中指伸出,形成V)。 建议每次移动至少有50张图像,因此请您的朋友帮忙。
在Watson Visual Recognition中创建一个新的分类器,并通过如下所示的命令行上载包含图像的三个zip文件。 经过培训后,该服务将提供一个分类器ID,该ID可在调用Watson Visual Recognition服务时在Node-RED应用程序中使用。
curl -X POST -F“ scissor_positive_examples = @scissor .zip” -F“ rock_positive_examples = @rock .zip” -F“ paper_positive_examples = @paper .zip”“ https://gateway-a.watsonplatform.net/visual-recognition / api / v3 / classifiers?api_key = API_KEY&version = 2016-05-20 “
IBM Cloud中的Node-RED
在IBM Cloud中创建一个Node-RED应用程序,以显示记分板,显示所拍摄的图片并添加一些可在游戏中使用的控件。 Node-RED流程如下所示。

创建IBM Cloud目录中可用的Internet of Things Platform Starter应用程序。 这将创建一个Node-RED应用程序,一个物联网平台服务并运行TJBot的前端接口。

前端接口是使用Node-RED仪表板节点创建的。 通过单击右上角的菜单-> 管理面板 -> 安装并搜索node-red-dashboard来 安装 节点 。 单击安装 。

在Watson Internet of Things Platform服务中,我注册了设备类型tjbot 。 我的每个TJBots都有一个唯一的ID。 在本教程中,我将其分配为gamer 。

将此JSON导入Node-RED。 编辑ibmiot节点,并使用设备类型和设备ID。 当用户在界面上按“播放”时,IoT命令将发送到TJBot以玩游戏。

Raspberry Pi上的Node-RED
为了保持相同的语言,我选择在运行TJBot的Raspberry Pi上使用Node-RED。 但是,您可以选择以Python,Node.js或其他语言订阅IoT命令,然后以这种方式玩游戏。
如果尚未在TJBot上安装TJBot Node-RED节点,请参阅此博客文章以获取有关如何安装的说明。 导入JSON流。 这是Node-RED流的样子。

TJBot使用Watson Text to Speech和Watson Visual Recognition服务执行大部分游戏。
TJBot在游戏中说的短语非常有限。 由于Internet连接中可能会有一些延迟,因此我选择合成短语并将其本地存储在设备上。

在“文本转换为语音”节点中将“ Watson文本转换为语音”服务凭据。

TJBot使用Watson Visual Recognition服务对通过相机捕获的动作进行了分类。 在“视觉识别”节点中设置Watson视觉识别服务凭据。

在视觉识别节点之前的更改节点中,用训练新的自定义分类器时先前创建的分类器ID替换分类器ID。

双击Watson IoT输入节点,并指定TJBot的IoT凭据以订阅命令。

双击语音节点,并使用扬声器,伺服,LED和摄像头设置TJBot。

最后,编辑http请求节点并将应用程序主机名设置为IBM Cloud应用程序。 这会将图片发布到Node-RED仪表板以显示在记分板上。

运行TJBot
通过打开Node-RED仪表板的端点/ ui访问IBM Cloud应用程序界面。 单击播放将命令发送到TJBot。
TJBot将解释游戏规则并倒数。 当它倒数时,请显示您距离TJBot前端约6英寸的移动。 与真实游戏不同,请保持动作平稳以避免拍照时相机模糊。 别担心,TJBot会随机移动,与玩家的移动无关。

如果您喜欢本教程,请拍拍手并为您对该游戏所做的任何添加发表评论。 一个很好的扩展是为TJBot的动作增加一些智能,但这将是另一篇文章。