一样的打游戏,不一样的酷
夏乙 问耕 假装发自 凹非寺
量子位 出品 | 公众号 QbitAI
假期模式已经开启了~
学生党已经赋闲在家,工业党不少也已带着橘子返乡。
阖家欢乐,面对亲朋的时候就要来了。
那么,如何才能在乡亲们面前,显得特立独行、与众不同?
你看这样如何。
喧嚣的人群之中,只见你端坐其间,面单不易察觉的微笑。
突然,你出手了!
手型扑朔变换,位置迷离转移。
最新版喝酒划拳?不,他们很快发现,你神秘的手势,竟然的控制着一个一个落下的彩色几何图形,完美的错落叠加!对!你是神秘的俄罗斯方块大师!
这么传统的游戏,也能耍酷?当然,越是看似平淡,越能剑走偏锋。
在那些打农药、晒青蛙的军团面前,你是如此的出众。
套用某机构的话,那就是:
一样的打游戏,不一样的酷?
最后,深吸一口气,告诉乡亲们:这就是传说中的——人工智能。
(众人皆惊)
摄像头is all you need
这套俄罗斯方块AI心法,今天就传授于你。
心法源自一位名叫Marianne Linhares的Medium用户。基于去年Google发布的Teachable Machine,她构建了一个Demo,只需一个摄像头,就能玩转俄罗斯方块。
先来介绍一下Teachable Machine。
Teachable Machine本身是一个基于浏览器的工具,任何人(科学上网之后)都可以借助这个工具,使用电脑上的摄像头,亲手体验如何训练一个神经网络。
无需代码,只需电脑浏览器+摄像头!
去年10月,量子位的李根同学在大理,亲测表明:从一无所知到训练完成,不超过3分钟,而且还挺有意思。
方法很简单,以科学的方式,打开这个页面:
https://teachablemachine.withgoogle.com/
Teachable Machine的神经网络,能够通过摄像头,学会三个你发出的指令。整个训练过程就是机器学习的三大步骤:输入-学习-输出。
1)输入
在摄像头前做某个动作,数量不低于30次,多些角度和场景,然后在“准确值”接近100时开始下一个动作输入,总共三个。
2)学习
在你超过30次的动作捕捉中,机器通过这个“数据集”的学习,掌握了你这个动作代表的意思。
3)输出
三个动作均按要求输入完成后,一一对应的“输出”也会在这个过程中学习完毕。你可以在屏幕前做出任一动作,机器会通过相机输入后给出对应的“意义”。
当然,这个“意义”完全可以自定义,形式也多种多样,比如GIF动图、声音,甚至某段回答。
这有段视频,详细说明了这个过程。
class="video_iframe" data-vidtype="2" allowfullscreen="" frameborder="0" data-ratio="1.7647058823529411" data-w="480" data-src="http://v.qq.com/iframe/player.html?vid=o05574tnzda&width=670&height=376.875&auto=0" style="display: none; width: 670px !important; height: 376.875px !important;" width="670" height="376.875" data-vh="376.875" data-vw="670"/>
get凌空打游戏神技
然后,说一下如何改造出一个用手势凌空控制的俄罗斯方块。
这项神技的基础,就是让计算机能通过摄像头认出你的手势,然后“翻译”成游戏中对应的按钮,比如说上下左右。
这是一个图像分类任务啊同学们!我们刚才讲的Teachable Machine,就刚好适合活学活用到这儿。
Google Creative Lab还在GitHub上公开了它的一个样板文件。别客气,这些代码拿去改!
https://github.com/googlecreativelab/teachable-machine-boilerplate
关注人数并不多,可惜啊可惜,只能用俄罗斯方块来拯救它了。我们可以在Teachable Machined基础上构建一个模型,来识别各种手势。
要让机器能认识摄像头拍到的手势,我们的模型得能适应这些限制条件:
从用户的摄像头获取输入,就意味着我们事先不知道要将图像分成哪些类。
由于我们事先不知道有哪些类别,就需要在浏览器里直接训练。
如果每个有电脑的人都能运行这个demo就好了,也就是说,它对计算力的要求不能太高。
要快。如果玩游戏的时候该按左键还是右键都得花5分钟来决定,那就不好玩了。
对于前三条限制,迁移学习是个好方法,拿一个在现实世界数千类图像上训练过,已经学会分辨形状和边缘的模型,再针对特定的数据稍加训练。
Google Creative Lab就是这么做的,他们用了SqueezeNet,这个模型的精度和AlexNet不相上下,大小却不到0.5MB。
不过,怎么用连我们自己都不知道什么样的数据,在浏览器里重新训练模型呢?
可以在SqueezeNet的其中一层插入一个KNN(k-nearest neighbors)。KNN是基于实例的模型,因此,它不会执行明确的泛化,而是会将新的问题实例和训练中见过的实例进行比较,也就没有明确的训练阶段。
维基百科上是这样描述KNN的:
k-NN是一类基于实例的学习,或者叫懒学习,它的函数只是局部近似,所有计算都会推迟到分类时。k-NN算法是所有机器学习算法中最简单的之一。
对于我们的任务来说,简直再合适不过了。
训练
要训练这样一个模型来识别你的各种手势,还有一些注意事项:
要用容易分辨的图像;不幸的是,小细节不足以用来区分图像。
各类图像尽量用同样的背景;如果你改了图像背景,KNN学会去分辨的可能就是背景,忽略了目标本身。
目标要居中,而且要确保训练模型辨认不同位置的目标,每个类别大约20-50个样例就够了。
Tips讲完,训练正式开始。
我们训练的目标,是让模型将特定手势与游戏中的按钮对应起来。
比如说握拳伸到画面右端,就是向右;握拳放在画面左侧,就是向左;伸出大拇指,就是向上;手掌平放在桌面上,就是向下。
↑↓←→四个按钮,就都有了。来测试一下:
作者提示:本文为向上选择的手势不太好,有时手势从向左改到向右的时候,模型会误认为看到了向上的手势。用源代码请小心。
最后,完成好的源代码在这里:
https://github.com/mari-linhares/teachable-machine-games
玩起来是这样的,有时也会犯个小错误什么的:
更多选择,更多欢乐
Tetrishttps://github.com/ttencate/tis
上面,是本文所玩的俄罗斯方块。实际上,同样的心法,不止于俄罗斯方块。
GitHub上这两个游戏也适合这种方法:
Snake https://github.com/maryrosecook/retro-games
Asteroids https://github.com/maryrosecook/retro-games
如果你觉得手势还是不够酷,还可以用更无厘头的东西来训练这个模型:
还有更炫酷的。
在deeplearnjs.org网站上,专门有一个Cam Arcade。这个页面收集了不少使用摄像头+神经网络可以训练控制的经典游戏。
包括《毁灭战士》、《超级马里奥》、《俄罗斯方块》、《毁灭公爵3D》。同样的用法,也是使用摄像头训练,而且可调参数更多。
地址在此:
https://deeplearnjs.org/demos/teachable_gaming/
希望你训练的开心。
提示:尽量用手势,不要轻易尝试上下左右晃头,亲测会晕。
最后,附送一个老游戏的大集合。
不用翻墙,直接在浏览器玩。
不用翻墙、不用翻墙、不用翻墙……纯玩。
地址:
https://js-dos.com/games/
— 完 —
加入社群
量子位AI社群13群开始招募啦,欢迎对AI感兴趣的同学,加小助手微信qbitbot5入群;
此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。
进群请加小助手微信号qbitbot5,并务必备注相应群的关键词~通过审核后我们将邀请进群。(专业群审核较严,敬请谅解)
诚挚招聘
量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技术和产品新动态
一样的打游戏,不一样的酷相关推荐
- python3+pygame制作的连连看小游戏,好玩,酷炫,
使用Python3+pygame模块制作的连连看小游戏,好玩,酷炫,很适合初学Python的同学练习 连连看源码下载: 长按左侧二维码 2 秒 回复「连连看」即可获取源码 (非本号) 一.运行效果 二 ...
- scratch小游戏脚本大全_酷酷带你一起做小游戏--跳一跳
运用scratch我做了一个跳一跳小游戏,首先我要确定游戏流程, 小恐龙跑向障碍物,玩家用键盘的空格键控制恐龙跳跃 如果恐龙跳过障碍物则游戏分数加一 如果恐龙接触到障碍物则游戏结束,脚本全部停止 先添 ...
- 【C语言】游戏开发:天天酷跑丨完美练手项目 [附源码]
目录 一.项目说明: 二.项目作用 三.项目技术要求 四.库.宏.主函数说明 五.项目实现 5.1游戏背景的实现 5.2实现Hero奔跑 5.3 实现Hero跳跃 5.4 优化帧等待 5.6使用结构体 ...
- android游戏编程之从零开始_纯C语言程序员写的编程新手入门基础小游戏之最炫酷推箱子...
很多编程爱好者都编写过推箱子游戏编程吧,最近有好些朋友看见我以前的推箱子程序后, 问我是怎么做的.我一直想把这个程序的整个过程写一份详细的东西,与各位编程爱好者分享,一直没空.正好现在放假了,而且离回 ...
- html5 loading游戏,12种炫酷html5 svg加载loading动画特效
12种炫酷html5 svg加载loading动画特效 刘振兴 代码分享 2015年11月23日 14182 3条评论 这是一款使用HTML5 SVG技术制作的12种炫酷html5 svg加载load ...
- 10款超炫html5游戏,10款炫酷的HTML5动画特效,附源码
HTML5确实非常强大,很多时候我们可以利用HTML5中的新技术实现非常炫酷效果时,这些效果也非常消耗电脑的CPU,但是这些HTML5效果确实能给用户带来不一样的用户体验. 今天我要跟大家分享一些HT ...
- JAVA游戏开发-超炫酷贪吃蛇游戏源码及教程
一.前言 某日,看见隔壁家的小朋友在玩一款网络爆款贪吃蛇游戏,感觉很好玩.自己刚好正在学习JAVA编程,也想实现一个类似功能的游戏Demo练手,在网上查看了不少源码案例,全都是很古老的方块式贪吃蛇游戏 ...
- 酷狗直播联手腾讯游戏破圈“组团” 游戏直播正版化杀入重量级玩家
当前游戏直播行业发展已经进入白热化阶段,市场参与者越来越多.伴随而来的直播乱象也屡见不鲜,尤其是在版权方面,侵权盗播和不正当竞争层出不穷,亟待政府监管和前线平台共同发力解决. 日前,酷狗直播与腾讯游戏 ...
- rust 局域网联机_腐蚀怎么进行局域网联机方式 酷跑加速器和你畅玩游戏世界
到现在,还是有人在玩腐蚀这个游戏,玩的人还很多,小编就是其中一个,那如果要进行搭建rust的局域网联机方式要怎么办呢,大家是不是觉得有点意思呢,接下来就一起看看这个rust局域网的联机方式且腐蚀怎么进 ...
- 《酷玩》——畅玩游戏,尽享应用,探索无限可能!
近年来,随着智能手机的广泛普及,移动应用程序也成为人们生活中必不可少的一部分.酷玩是一款集成了游戏辅助工具和应用程序下载服务的应用程序,同时也拥有社区功能,让用户可以分享各种实用软件.玩机技巧和游戏心 ...
最新文章
- 二分法在算法题中的4种常见应用(cont.)
- java 返回值void_Java的返回值voidspeak
- Jmeter入门3 http请求—content-type与参数
- 这些Java基础面试知识点,你都掌握了吗?
- spark多个kafka source采用同一个group id导致的消费堆积延迟
- “编程能力差!90%输在了这点上!”谷歌开发:其实你们都是瞎努力
- 【笔试/面试】—— 网络
- idea各工作区背景颜色设置
- 08系统服务器多开教程,一个四开战士的多开工具 宏及经验全面教程
- 拍摄视频,真的帧率越高越好吗?
- ADSL桥接模式和路由模式的区别
- 人艰不拆,一句话毁掉小清新!
- 利用递归,反射,注解等,手写Spring Ioc和Di 底层(喷倒面试官
- SQL语法基础之updata
- bzoj 1921: [Ctsc2010]珠宝商 后缀自动机+点分治
- 致远OA自定义函数--正则表达式匹配校验
- matlab用gui 画函数,MATLAB GUI ,2,使用MATLAB的函数来实现MATLAB GUI,part 1,图
- 解析json数据 (js , java)
- C/C++数据结构——最优屏障(栈)
- C语言挑选小白鼠健康指数,2014级下学期中国石油大学华东c语言上机题.docx
热门文章
- java null转integer_java – 从null到int可以转换?
- 云服务器工具大全,云服务器主要的登陆方法有哪些
- 字节大牛教你手撕Java学习,Java核心知识点
- Redis之Pipeline(管道)
- 2018年9月计算机英语统考,2018年9月大学英语统考题库 2018年9月网络统考英语B复习资料.doc...
- 单片机c语言期末考试题(a)的答案,单片机C语言期末考试题(A).doc
- java 锁表后事务提交_关于synchronized锁在Spring事务中进行数据更新同步,仍出现线程安全问题...
- python3爬取网易云歌单数据清洗_如何利用Python网络爬虫爬取网易云音乐歌词
- php cksql,金蝶KSQL规范
- 通俗讲解c语言指针的作用,C语言指针讲解(史上最通俗最全面最经典)