找回密码
 立即注册

QQ登录

只需一步,快速开始

[工具插件] 微信小程序跳一跳机器人,分数可达30万 以上

[复制链接]
查看: 290|回复: 18
最佳答案
0 

7

主题

7

帖子

160

积分

新人求带

积分
160
adb + pillow + opencv + sklearn 实现的微信跳一跳机器人,分数可达 300K 以上。

反对一切使用外挂的行为,该项目只为学习目的,没有加入反作弊葡京赌场网站,以后也不会有:)

30万分数.png

命名约定

为便于描述,做以下约定:

命名约定.jpg

特性

与年初的跳一跳机器人相比,进行了以下改进:

  • adb 截图后图像直接传输给上位机,不经过手机存储和 SD 卡;上位机一直在内存中处理图像,减少 IO 耗时,提高效率。
  • 使用上一次截图的目标棋盘(也是本次截图的起始棋盘)作为模版,使用 OpenCV 模版匹配寻找起始棋盘的中心坐标,根据中心坐标和棋子中心坐标的相对位置、上次计算的跳跃距离计算实际跳跃距离。替代其他项目中在“跳跃后视角平移前”进行截图的方法,不需要反复尝试调整合适的 “Magic Number”,且每次跳跃只需截图一次。简而言之,省力v,提高准确性,提高效率;
  • 为加快运行速度,只在程序初始化时训练模型,但程序运行时输出的数据可用于回归模型训练。
  • 计算两点间距离时,使用两点在跳跃方向(与水平线夹角 30 度)上的投影距离,与欧式距离相比更加精确。即下图中 OB 的距离(图片来源:腾讯WeTest团队):

投影距离.jpg

使用的技术和库
  • OpenCV —— 模版匹配,Canny 边缘检测
  • Pillow —— ImageDraw 模块
  • sklearn —— 线性回归,多项式回归

使用说明

环境准备

安装 OpenCV 和 adb 工具,MacOS 可以使用 brew 安装,其他系统请参考 OpenCV 文档 和 Android 调试桥:
  • brew install opencv
  • brew cask install android-platform-tools

安装依赖
  • pip install -r requirements.txt

设置项

在项目根目录 run.py 中,有几个配置项需要修改:
  • ADB_DEVICE_SERIAL 通过 adb devices 命令得到的手机序列号;
  • TRAINING_DATASET 训练数据文件路径;
  • TRAINING_MODEL “LR” 线性回归模型,“PR” 一元多项式回归模型;
  • TRAINING_PR_DEGREE 一元多项式回归模型时,变量的最高指数;
  • JUMP_DELAY 跳跃后与下次截图之间的时间间隔,单位秒。设置太小会在下次截图时引入中心连跳的涟漪特效,会对边缘检测造成干扰,不放心的话就往大了设置;
  • SHOW_MARKED_IMG 是否在跳跃时展示标注数据的 RGB 图像。

另外,如果选择展示标注数据的 RGB 图像,还需要向 assests 目录中放入 TTF 字体文件(需支持中英文),并命名为 font.ttf,用于标注图像。由于版权问题,项目中不包含该字体文件。

分辨率

由于模版匹配的特性(踩过的坑第 2 点),不同分辨率手机可能需要重新采集模版图片,模版图片在 assests 目录下。

本项目在分辨率为 2160*1080 的小米 6x 上运行正常,理论上相同分辨率的手机都可以直接使用项目自带的模版图片,无需重新采集。

运行

将跳一跳小程序打开,并点击开始游戏按钮进入游戏界面。运行:
  1. python3 run.py
复制葡京赌场网站

输出数据格式为:
  1. [上次跳跃实际距离 pixel] [上次跳跃按压时间 ms] [上次跳跃是否跳中棋盘中心]
复制葡京赌场网站

例如:
  1. 293.0696181049753 445 True
复制葡京赌场网站

表示上次跳跃按压屏幕 445 ms,实际跳跃距离为 293.0696181049753 像素,且跳中了棋盘中心。

该数据格式与训练数据格式相同,因此程序输出数据可保存用作下次启动程序时的模型训练数据。

建议运行时将其保存到文件中:
  1. # -u 使 stdout 直接输出,不缓存
  2. python3 -u run.py > run.log
复制葡京赌场网站

Show Time

最好成绩

目前运行到最高的成绩已经超过 30 万(见上图),跑了一晚上没有要停的意思,只能 Ctrl + C 了,理论上分数无上限。

后续再测试每小时大概能跳 23000~24000 分。连跳中心的连击中断造成了一定的分数损失。

线性回归拟合

线性回归.png

多项式回归拟合(degree=7)

多项式回归(degree=7).png

踩过的坑

  • 由于图像坐标系从左上角开始,Y轴在向下的方向上是递增的,所以斜率与普通直角坐标系相反。也就是说,从左下到右上方向的直线实际为负斜率。
  • OpenCV 模版匹配对缩放图片处理效果不好,导致从小程序文件解包出来的棋子图像无法使用,必须获取当前分辨率下的棋子图像和中心点图像作为模版;

还可以改进的地方

  • 使用并发同时进行上次跳跃评估和本次跳跃计算,提高运行速度;
  • 自动适配不同分辨率的手机屏幕;

WechatJump-master.zip (310.86 KB, 下载次数: 12)
回复

使用道具 举报

最佳答案
0 

0

主题

126

帖子

742

积分

略知一二

积分
742
QQ
发表于 2018-9-12 22:12:08 | 显示全部楼层
厉害 6666666666666666
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

169

帖子

1428

积分

专家路上

积分
1428
发表于 2018-9-13 11:00:31 | 显示全部楼层
谢谢分享
回复

使用道具 举报

最佳答案
0 

0

主题

947

帖子

825

积分

略知一二

积分
825
发表于 2018-9-14 11:45:57 | 显示全部楼层
灌灌灌灌灌过过过
回复 支持 反对

使用道具 举报

最佳答案
0 

4

主题

216

帖子

866

积分

白银VIP

积分
866
发表于 2018-9-15 01:44:26 | 显示全部楼层
最好成绩
回复

使用道具 举报

最佳答案
0 

0

主题

427

帖子

3945

积分

专家路上

积分
3945
发表于 2018-9-15 05:56:12 来自手机 | 显示全部楼层
谢谢分享学习了
回复 支持 反对

使用道具 举报

最佳答案
0 

1

主题

207

帖子

1124

积分

专家路上

积分
1124
发表于 2018-9-15 09:15:58 | 显示全部楼层
方式复制辅导费
回复 支持 反对

使用道具 举报

最佳答案
0 

1

主题

207

帖子

1124

积分

专家路上

积分
1124
发表于 2018-9-15 09:16:04 | 显示全部楼层
恢复和骨灰盒
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

2434

帖子

3647

积分

专家路上

积分
3647
发表于 2018-9-15 14:46:29 | 显示全部楼层
谢谢分享~
回复

使用道具 举报

最佳答案
0 

0

主题

70

帖子

155

积分

新人求带

积分
155
发表于 2018-9-15 15:48:45 | 显示全部楼层
好东西感谢分享,学习一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



www.mainetimberworks.com—微信开发者的分享交流平台,专注微信开发生态。

天津市滨海新区
中新生态城中成大道生态建设公寓9号楼3层301

微信葡京娱乐网址号

市场合作
[email protected]