这两天微信跳一跳小程序着实让大家局促了一把,一直点点点实在太费劲!网上有各位大神相续晒出了自己的外挂攻略,看到有用Python实现的,效果很不错,基于图像识别;想到之前也琢磨了些图像识别的方法,正好是个机会把之前学习过的东西拿出来用一用,废话不多说,直接开干!
用到的知识点如下:(下面代码使用Java API实现,思路和Python大神有许多不同)
1.TemplateMatching(模板匹配)
老生常谈的一个方法,用来定位筛子的位置,在此记为(X0, Y0)
2.Canny边缘检测 + 连通区域识别
用来做判断下一个跳击点,在此记为(X1,Y1)
3.勾股定律计算两点间的直线段距离
double value = Math.pow(x_TM-x1,2) + Math.pow(y_TM-y1,2); int distance = (int)Math.sqrt(value);
4.设置时间系数(约等于1.129)
5.手机端ADB命令执行按压跳转
String command = "adb -s " + serialnumber + " shell input swipe " + x_TM + " " + y_TM + " " + x_TM + " " + y_TM + " " + duration;
注意:此处adb命令中采用【serialnumber】是为了在一台PC上可以同时带多台Device玩
具体实现如下:
1. 设置Template模板(仔细看,是不是跳筛子身体上的一部分?!)
设置好模板图2.实时截屏
比较普通的截屏方式3.模板匹配
获取所在位置的坐标4.边缘检测
边缘检测结果,同时获取连通区域的List 最优连通区域判定部分代码5.根据得到的连通区域和TM坐标排序,分析;推导出最优解 下面列出部分代码
6.计算要跳转的直线段
像素计算 两点间的直线段长度7.交给ADB进行最后操作
坐标值+DurationTime8.最后等着出结果;由于时间有限,跳了10分钟就让它停了,据说最高能到4000多
举个栗子好了,整个过程的介绍就到此结束了;做的过程中主要回忆了一下之前讲过的几种图像处理的方法,除了自动化测试框架以外,在此均涉及到了;真的是一个练手的好例子;希望大家有空也试试,相互切磋不断前进!
网友评论