微信小程序跳一跳机器人,分数可达30万 以上
2020-01-29 21:52:20 浏览:578 作者:管理员
adb + pillow + opencv + sklearn 实现的微信跳一跳机器人,分数可达 300K 以上。 |
- adb 截图后图像直接传输给上位机,不经过手机存储和 SD 卡;上位机一直在内存中处理图像,减少 IO 耗时,提高效率。
- 使用上一次截图的目标棋盘(也是本次截图的起始棋盘)作为模版,使用 OpenCV 模版匹配寻找起始棋盘的中心坐标,根据中心坐标和棋子中心坐标的相对位置、上次计算的跳跃距离计算实际跳跃距离。替代其他项目中在“跳跃后视角平移前”进行截图的方法,不需要反复尝试调整合适的 “Magic Number”,且每次跳跃只需截图一次。简而言之,省力v,提高准确性,提高效率;
- 为加快运行速度,只在程序初始化时训练模型,但程序运行时输出的数据可用于回归模型训练。
- 计算两点间距离时,使用两点在跳跃方向(与水平线夹角 30 度)上的投影距离,与欧式距离相比更加精确。即下图中 OB 的距离
- OpenCV —— 模版匹配,Canny 边缘检测
- Pillow —— ImageDraw 模块
- sklearn —— 线性回归,多项式回归
- brew install opencv
- brew cask install android-platform-tools
- pip install -r requirements.txt
- ADB_DEVICE_SERIAL 通过 adb devices 命令得到的手机序列号;
- TRAINING_DATASET 训练数据文件路径;
- TRAINING_MODEL “LR” 线性回归模型,“PR” 一元多项式回归模型;
- TRAINING_PR_DEGREE 一元多项式回归模型时,变量的最高指数;
- JUMP_DELAY 跳跃后与下次截图之间的时间间隔,单位秒。设置太小会在下次截图时引入中心连跳的涟漪特效,会对边缘检测造成干扰,不放心的话就往大了设置;
- SHOW_MARKED_IMG 是否在跳跃时展示标注数据的 RGB 图像。
- python3 run.py
- [上次跳跃实际距离 pixel] [上次跳跃按压时间 ms] [上次跳跃是否跳中棋盘中心]
- 293.0696181049753 445 True
- # -u 使 stdout 直接输出,不缓存
- python3 -u run.py > run.log
- 使用并发同时进行上次跳跃评估和本次跳跃计算,提高运行速度;
- 自动适配不同分辨率的手机屏幕;