报道/前方智能 丁丁 枭枭
之前,智能君曾写过用AI可以打游戏的文章,而最近大火的微信「跳一跳」,近日也出现了「AI外挂」,且分分钟就可以轻松把分数打到上万!
PGone和李小璐
智能君基于“从众心理”也加入了「跳一跳」,但玩了N多局后最高分还是30分,只超越了朋友圈的几个人,智能君就放弃了这个游戏。
说起来,「跳一跳」的游戏原理其实很简单——通过按压屏幕时间的长短来控制「小人」跳跃的距离,所以学会用物体间的距离来判断时间很重要。
这并不算是个很有“水平”与“深度”的游戏,那为什么会火呢?
其实像之前微信推出的小游戏「打飞机」一样,天生自带的社交属性让它在微信以极快的速度传播着,还有一个重要的是因为“排行榜”:大家喜欢比谁分高!
这不,广大网友们为了得到高分,花样百出啊!
第一个花样,可以说是目前最快捷有效的方法,没有之一!
你有钱就可以啦!想要多少分就有多少分!
中国的淘宝——只有你想不到,没有你买不到!
还顺带形成了代练外挂的产业链~
第二个花样,则是来自机器动手爱好者。
这位兄弟平时乐高应该玩得不少,他用乐高的程序处理器EV3连接马达做成机械臂,来模拟人类手指按屏幕,也是醉了~
问题是这对于整个游戏没啥帮助,跳的时候还是用最笨的方法,先量距离来判断点击时间。
当然,作为黑科技迷,智能君最感兴趣的还是大神写出来的用“AI”来自动跳一跳的外挂,相信大家也比较想知道吧,下面来给大家讲讲它到底是怎么实现的。
「跳一跳」小程序发布后不久,就有程序员在Github 上发布了一个专门针对跳一跳的外挂程序。整个程序基于 Python,可以做到模拟手指按压屏幕的动作,让程序自动跳方块。
简单来说,在Android平台(iOS平台智能君还未试过)上整个程序的实现逻辑是:
用 ADB 工具获取小程序的截图,手动版用 Matplotlib 显示截图,用鼠标点击起始点和目标位置,计算像素距离;自动版依靠棋子的颜色来识别棋子,根据底色和方块的色差来识别棋盘。然后再用 ADB 工具模拟点击屏幕蓄力跳跃。
具体实现步骤如下:
(注:ADB工具指代得失Android Debug Bridge,就是起到调试桥的作用。开发者常用到这个工具.,可以用来管理设备或模拟手机状态。)
将微信点击到《跳一跳》小程序界面
用 ADB 工具获取当前手机截图,并用 ADB 将截图 pull 上来(智能君解释:此处可以理解为将游戏静态画面截图并发送至本地)
adb shellscreencap -p /sdcard/autojump.png
adb pull/sdcard/autojump.png .
计算按压时间
靠棋子的颜色来识别棋子,靠底色和方块的色差来识别棋盘;
用 ADB 工具点击屏幕蓄力一跳(智能君解释:此处可以理解为电脑端模拟人类发出按压力度的指令)
adb shell inputswipe x y x y time(ms)
智能君试用「AI」跳一跳
可以看到,整个过程完全不需要人为的操作,程序就能自动识别两个物体间的距离(distance),计算好按压时间(press time),完成跳跃的操作。
其中最关键的一步便是「计算按压时间」——利用图像识别精确测量出起始和目标点之间测距离,就可以估计按压的时间来精确跳跃。
具体来说是这样的:
「寻找目标坐标
按行自顶向下遍历像素
滤掉背景色,直接取行尾的像素点
除去背景色,避免图形上花纹的干扰
滤掉顶部 y
滤掉颜色线开头像素点小于 10 的线
判断现在这条线对比刚才的线的 x 是否有增加,因为图形都是倾斜的,方块和圆柱的顶部最右侧的 x 不再增加时说明这条线就是顶部的切线了,然后取这条切线的中点」
从智能君实际使用情况来看,「AI外挂」主要是通过图像识别测算出精确的距离,并通过系数来精准确定按压的时间(精确到了毫秒层级)。
而AI在这部分的作用主要就是通过「图像识别」来提高更精准快速的实现测距的效果,智能君注意到在这里程序员GG们主要采用了OpenCV来加快图像识别的效率,实现更快的识别速度。
在这里给大家介绍下鼎鼎大名的OpenCV,它的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉(Computer Vision)库。
它基于BSD许可(开源)跨平台发行,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法,包含了横跨工业产品检测、医学图像处理、安防、用户界面、摄像头标定、三维成像、机器视觉等领域的超过500个接口函数。
就应用层面来说,OpenCV目前主要用于解决如下领域的问题:
增强现实
人脸识别
手势识别
人机交互
动作识别
运动跟踪
物体识别
图像分区
机器人
这么强大的功能,又是开源不收费的,所以被拿来玩「跳一跳」是不是有点大材小用呢?
另外,基于很多人用脚本刷分,现在这个游戏似乎开始检测脚本了,不过检测的方式是检测触摸位置,而只要加随机触摸处区域,就可以了。
结语:
某个程度上来说,AI“破坏”了「跳一跳」的游戏规则,但这究竟是利还是弊呢?
一方面,从某种程度上说它驱使游戏制作方查找某些隐蔽的漏洞,以建立更安全强大的防干预系统,能让玩家获得更好的游戏体验;
另一方面,AI也成了某些人破坏规则,牟取利益的手段。
当然这只是一个小游戏,用AI“作弊”产生不了什么大或者不好的影响。但以小见大,如果在其它重要领域,保证AI技术的合理使用是不是显得非常重要呢?这不得不让人深思。
最后,智能君已经跳到1000多分了,成了朋友圈里的冠军~
可以说,现在「跳一跳」能跳多少分,完全取决于你的良心~
——————————————
更多人工智能产业的新鲜资讯,欢迎关注前方智能的腾讯企鹅媒体,或者在微信关注前方智能(qianfangAI)~
领取专属 10元无门槛券
私享最新 技术干货