最近“跳一跳”在朋友圈风靡一时,吃饭的时候,人家跟你聊跳了多少步,你要没上200都不好意思跟人家打招呼。作为AI研发的机构,我们更关心怎么样才能自动让AI走的更远的问题。网上也有不少解决问题的版本,我们也做了一下归纳,大概有这样的一些套路:
Auto-Jump算法“跳一跳”
1、手机环境搭建:adb手机连接输出控制、手机调试模式
2、开发环境搭建:Python、opencv
3、使用算法
a、opencv 基于图像处理识别棋子的定位、跳台之间的距离,测量距离跟时间的线性关系。
b、在上一步的基础上将opencv的改进加入神经网络、卷积神经网络。
C、将opencv算法收集的3000个样本数据进行训练收集。
小结:典型的opencv目标识别和监督学习的办法
AI“跳一跳”
模仿学习中最简单的行为克隆方法:收集很多好的游戏输入输出数据,然后使用监督学习训练。
1、构造游戏数据库
用其他外挂方法收集大量的游戏输入输出数据,加入AI代码,通过线性回归训练了一个简单的线性模型来估计跳跃距离和按压时间的关系。
2、构造端到端神经网络模型及训练
构造了一个5层的卷积神经网络,用一个简单的回归模型使用构建的数据库进行训练。
3、安装PyTorch深度学习框架:pytorch.org、运行代码。
小结:基于卷积神经网络的图片回归的监督学习办法
Python“跳一跳”
通过ADB 工具获取当前手机截图,并用 ADB 将截图 pull 上来,Python脚本计算图形的距离和按压的时间,最后使用ADB控制它跳动。
实现原理
1、手机连接PC,PC通过adb命令对手机游戏界面截图,并保存在PC上。
2、PC端根据保存的图片进行处理(读取RGB值),获取棋子的位置,获取下一步棋盘的位置,然后利用"两点之间距离公式"来计算出两点之间的距离,然后根据经验值计算出按压时间。
3、通过adb命令模拟按压时间来实现棋子的跳跃。
小结:计算机图形算法中的目标识别的回归方法
JavaScript版本"AI"脚本
实现的原理
1、使用opencv实现的快速找色函数找出并计算棋子位置。具体为先根据棋子颜色找出棋子顶部位置,再遍历顶部这一行的像素找出顶部的中点位置,偏移得到棋子底部中点位置。
2、使用项目wangshub/wechat_jump_game的算法缓慢找出并计算跳跃目标的位置。
3、根据跳跃距离乘以系数计算按压时间并按压。
小结:仍然是一个基于opencv的位置识别方法
最后一个:
手工制图“跳一跳
想出这个方法的玩家可以说的是跳一跳的真爱粉了,玩家在手机屏幕上画函数坐标,根据两平台的距离计算出按压的时间。不过,经过我们专家团一致认为,这个有51%以上的概率属于搞笑用的,纯属博大家开心一笑。