本文主要介绍利用Python实现自动跳转功能。本文通过实例和代码进行说明,非常详细,具有一定的参考价值。有需要的朋友可以参考一下。
1.OpenCV:模板匹配。获得跳棋的中心位置。
2.OpenCV:边缘检测。获取下一个方块的中心位置。
Python ADB OpenCv,实现“跳跳”自动化。
/ 01 / ADB
ADB工具是Android调试桥工具。
ADB是一个命令行窗口,用于通过计算机与模拟器或真实设备进行交互。
和小F之前接触过的Appium有点类似。
ADB安装很简单,就是安装包解压后,可以将路径添加到系统的环境变量中。
然后使用Python的os模块执行ADB命令。
def get_screenshot():
#捕捉您手机的屏幕
OS . system(' ADB shell/system/bin/screen cap-p/SD card/screen cap . png ')
#将模拟器中的文件或文件夹传输到计算机
OS . system(' ADB pull/SD card/screen cap . png screen cap . png ')
定义跳跃(距离):
#用系数1.35设定按压时间。
press_time=int(距离* 1.35)
#生成随机手机屏幕模拟触摸点,防止无效结果。
#生成一个最终值为(0-90)的随机整数(0-9)
rand=random.randint(0,9) * 10
# adb长按操作,即在手机屏幕上按下press_time毫秒((320-410),(410-500))。
cmd=('adb shell输入刷卡%i %i %i %i ' str(press_time)) % (320兰特,410兰特,320兰特,410兰特)
#输出adb命令
打印(cmd)
#执行adb命令
操作系统(cmd)
这次只涉及到三个ADB命令,不多。
截图,把手机截图推送到电脑上,最后在手机屏幕上模拟长按。
/ 02 / 跳动实现
首先,查看游戏结束画面。
判断游戏程序是否需要结束。
#游戏结束时的模板图像
temp_end=cv2.imread('end.jpg ',0)
定义游戏结束(img):
模板匹配,检查是否要结束程序'''
#如果游戏截图中匹配到带有‘再玩一局’字样的模板,则循环中止。
res_end=cv2.matchTemplate(img,temp_end,cv2。TM_CCOEFF_NORMED)
if cv2 . minmax loc(RES _ end)[1]0.95:
打印(“游戏结束!”)
返回True
模板示意图如下。
当返回的最大矩阵值大于0.95时,认为原始图像中必须出现“再玩一局”字样。
然后游戏结束,程序结束。
跳棋的模板匹配代码如下。
主要是获取小跳棋的位置,也就是“跳-跳”的起始位置参数。
#阅读小跳棋模板图像
temple=cv2.imread('temple.png ',0)
#获取小方格模板图像的高度和宽度
th,tw=temple.shape[:2]
定义get_start(img):
模板匹配,得到跳跃起点的位置参数(跳棋)“”
#使用标准相关系数进行匹配,1表示完全匹配,-1表示不匹配,0表示不相关。
result=cv2.matchTemplate(img,temple,cv2。TM_CCOEFF_NORMED)
#使用minMaxLoc函数,确定匹配结果矩阵的最大值和最小值(val)及其位置(Loc)
min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(结果)
#获取跳棋的中心位置参数。
return max_loc[0] 47,max_loc[1] 208
结果如下。
接下来,通过OpenCV的边缘检测获得“跳转”的结束位置。
定义get_end(img):
‘’边缘检测,得到跳结束的位置参数(框)。'''
#高斯模糊
img_rgb=cv2。高斯布朗(img,(5,5),0)
#边缘检测
canny_img=cv2。Canny(img_rgb,1,10)
#获取边缘检测图像的高度和宽度
h,W=canny_img.shape
#第一个顶点的高度
y_top=np .非零([max(row)for row in canny _ img[400:]])[0][0]400
#第一个顶点的宽度
x_top=int(np.mean(np .非零(canny_img[y_top]))
#跳过小白圈,然后穿过
y_bottom=y_top 80
对于范围内的行(y_bottom,H):
if canny_img[row,x_top]!=0:
y_bottom=row
破裂
#得到正方形的中心点
x_center,y_center=x_top,(y_top y_bottom) //2
返回x中心,y中心
边缘检测的原理图如下。
最后是主程序。
#循环直到游戏失败结束
对于范围内的I(10000):
#将截图从Android手机移动到您电脑的当前文件夹
get _截图()
#阅读截图
img=cv2.imread('screencap.png ',0)
#游戏结束
如果游戏结束(img):
破裂
#获取起始位置参数
x_start,y_start=get_start(img)
#获取终点位置参数
x_end,y_end=get_end(img)
#绘制起始位置,一个圆
cv2.circle(img,(x_start,y_start),10,255,-1)
#绘制结束位置,一个圆
img_end=cv2.circle(img,(x_end,y_end),10,255,-1)
#保存图片
cv2.imwrite('end.png ',img_end)
#计算起点和终点的直线距离,勾三股、四股、五股。
距离=(x _ start-x _ end)* * 2(y _ start-y _ end)* * 2
距离=距离** 0.5
#根据获得的距离设置按压时间。
跳跃(距离)
时间.睡眠(1.3)
我们来看看“跳跳”自动跳的视频。
轻松得分,没问题。
/ 03 / 总结
相关工具和代码已经上传到网盘,微信官方账号回复“跳转”即可获取。
安装ADB工具,然后通过数据线连接安卓手机和电脑。
最后运行代码,亲测有效。
当然代码还是需要优化的,如下图~
一方面分数不高,另一方面作弊会被查出来。
总结
以上就是边肖给大家介绍的用Python实现自动跳转功能的内容。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!
如果你觉得这篇文章对你有帮助,请转载,请注明出处,谢谢!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。