石头剪刀布AI进化版
虽然人工智能目前以席卷之势,渗透各行各业,但是大多数人还处在“百姓日用而不知”的状态里,作为一个创客教师,对于新技术总是有与生俱来的敏感嗅觉,同时也希望把这些新内容教给我的学生,人工智能到底怎么玩?我的学生可以玩的转么?我的学生年龄都比较小,只是学过一些scratch,这样的水平可以玩AI么?带着这些疑问,笔者开始了自己的探索之路,在看了编程猫、mind+、mblock、Kittenblock、machine learning for kids等等的软件及网站之后,终于找到了一个看起来不那么复杂的又有AI插件的网站——广问AI (open.thinklandai.com)。
今天笔者就带领大家一起来用AI制作一个中国人小时候都会玩的游戏——石头剪刀布,说起这个石头剪刀布,它经常会作为我get新技能的第一个试水案例,比如会玩scratch之后我第一个做的是它,会玩microbit之后我第一个做的也是它,这次AI的版本当然也要做一次啦。
在开始制作之前,需要注册并用邮件激活,否则无法看到我们需要使用的AI插件,另外推荐大家使用Google Chrome浏览器,其他浏览器似乎会有看不到工程模板的情况。
顺利注册完毕之后,回到主页开始编程,进入后是标准的scratch3.0界面,唯一区别是菜单栏里多了一个叫工程模板的项目。
这里面藏着十个案例,可以帮助我们初窥AI的门径,左下角的添加扩展里有我们心心念念的AI插件,有六、七种之多,找到它们之后,怎么用就成为了我们最关切的问题。
回到石头剪刀布的主题,我们之前编写的石头剪刀布都是在scratch上设计一个按键,或者手拿microbit摇一摇,让电脑知道我出拳了。我就想,人工智能里有一个分支叫机器视觉,简单来说就是让机器能够看懂一些图像,而机器视觉的一个重要分支是图像分类,即给机器一些打上标签的图像让机器学习过后,去对没有打标签的其他图像进行分类,那么机器能否认出我们人类做出的剪刀、石头、布三种手势呢?
这需要我们对三种手势进行采集,并打上各自的标签,然后发送给机器去学习,生成一个识别模型。那么如何采集并训练数据呢?
首先加载图像分类插件,加载完毕之后关于训练的积木只有一条,那么肯定就是它了。
因为我们有石头、剪刀、布共三种手势,所以当然也要训练三次了,训练时候要注意的是尽量保持背景一致,图像中只出现一种手势,否则电脑会混乱的,结果就是模型识别率不高。首先绘制一个叫训练的空白角色,为了操作方便我分别用按下A、S、D三个键来收集序号1到3的图像并在打上标签后进行训练,代码如下:
注意:为了保证训练效果,建议每一种手势图像要多一些角度和姿态,让机器尽可能多的学到各种石头、剪刀、布的手势,同时当有手势无法识别时,也可以回到训练角色来,添加机器无法识别的手势到对应标签下。一般建议训练至少40个数据。训练成功效果如下图。
如果我们发现训练有误,可以通过重置积木对现有数据进行重置,代码如下:
生成模型之后,我们就要想办法把模型应用到游戏中去,下面我们要上传一个含有剪刀、石头、布三个造型的角色。通过以下代码做出三个造型快速切换的效果。并通过广播并等待去完成图像分类及判断输赢。需要注意的是图像分类需要使用到摄像头,所以系统会要求调用摄像头,我们要用开启摄像机的积木将摄像头启动,并按照需求设置透明度。
下面就是我们的检测部分的代码和判断输赢部分的代码,我将用子程序的方式将两部分代码分开,这样会容易观看一些,首先是检测部分的代码。
然后是判断胜负的代码。
注意:我为了截图方便把这段代码分成了三个部分,分别是根据玩家出拳的三种情况,进行判断,我们在真正使用过程中需要将这三段代码连接到一起,就是以上三个部分的顺序连接就好了,不存在判断嵌套。
至此我们所有代码都写出来了,可以试试我们采用图像分类方法做出来的可以识别手势的剪刀石头布了。
完整代码如下:
PS:我们还可以在此基础上再进行一些改进,如增添语音播报功能,让你直接可以听到胜负结果,增添姿态识别功能,判断你的手腕确实进入了摄像头范围才开始图像识别,对你的手势分类,具体代码怎么写大家可以先自己试试。
大家也可以加我的微信13772884134,注明加群交流。
来源:CSDN
作者:fenmumu
链接:https://blog.csdn.net/fenmumu/article/details/103437940