怎么使用Python实现跳一跳自动跳跃功能

  介绍

小编给大家分享一下怎么使用Python实现跳一跳自动跳跃功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

1只,OpenCV:模板匹配只,,获得小跳棋中心位置

2只,OpenCV:边缘检测只,,获得下一方块中心位置

怎么使用Python实现跳一跳自动跳跃功能

Python +亚行+ OpenCv,实现“跳一跳”自动化。

<强>/01/亚行

亚行工具即Android调试桥(安卓调试桥)的工具。

亚洲开发银行是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互。

与之前小F接触过的Appium有点相似。

亚行的安装很简单,就是将安装包解压后,将路径添加到系统的环境变量中即可。

然后使用Python的os模块执行亚行命令。

def  get_screenshot ():   ,#截取手机的屏幕   ,os.system (& # 39; adb  shell /系统/bin/screencap  -p /sdcard/screencap.png& # 39;)   ,#把模拟器里面的文件或文件夹传到电脑上   ,os.system (& # 39; adb  pull /sdcard/screencap.png  screencap.png& # 39;)         def 跳(距离):   ,#设置按压时间,系数为1.35   ,press_time =, int (distance  *, 1.35)      ,#生成随机手机屏幕模拟触摸点,防止成绩无效   ,#生成随机整数(0 - 9),最终数值为(0 - 90)=,,rand  random.randint (0, 9), *, 10   ,#亚行长按操作,即在手机屏幕上((320 - 410),(410 - 500))坐标处长按press_time毫秒   ,cmd =, (& # 39; adb  shell  input  swipe  %小姐:%小姐:%小姐:%小姐:& # 39;,+,str (press_time)), %,(320, +,兰德,,410,+,兰德,,320,+,兰德,,410,+,兰特)   ,#输出亚行命令   ,打印(cmd)   ,#执行亚行命令   之前,os.system (cmd)

本次涉及到的亚行命令,就只有三个,不多。

一个截屏,一个推送手机截图到电脑上,最后模拟长按手机屏幕。

<强>/02/跳动实现

先检测游戏结束画面。
判断是否需要结束游戏程序。

#,游戏结束的模板图像   时间=temp_end  cv2.imread (& # 39; end.jpg& # 39;,, 0)   def  game_over (img):   “““大敌;模板匹配,检测是否要将程序结束,“““   ,#如果在游戏截图中匹配到带“再玩一局“字样的模板,则循环中止=,,res_end  cv2.matchTemplate (img, temp_end,, cv2.TM_CCOEFF_NORMED)   ,if  cv2.minMaxLoc (res_end)[1],祝辞,0.95:   ,打印(& # 39;Game  ! & # 39;)   ,return 真正的

模板匹配原理图如下。

怎么使用Python实现跳一跳自动跳跃功能“> <br/> </p> <p>当返回的最大矩阵值大于0.95时,则认为原始图像中肯定出现了再玩一局字样。</p> <p>则游戏结束,程序也随之结束。</p> <p>小跳棋的模板匹配代码如下。</p> <p>主要是获取小跳棋的位置,即“跳一跳”起点位置参数。</p> <pre类= #,读取小跳棋模板图像   时间=temple  cv2.imread (& # 39; temple.png& # 39;,, 0)   #,获取小跳棋模板图像的高和宽   th, tw =, temple.shape (2):   def  get_start (img):   “““大敌;模板匹配,获取跳一跳起点的位置参数(小跳棋),“““   ,#使用标准相关系数匹配,1表示完美匹配,1表示糟糕的匹配,0表示没有任何相关性=,,result  cv2.matchTemplate (img,寺庙,,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

得到结果如下。

怎么使用Python实现跳一跳自动跳跃功能“> <br/> </p> <p>下面通过OpenCV的边缘检测获取“跳一跳”的终点位置。</p> <pre类= def  get_end (img):   “““大敌;边缘检测,获取跳一跳终点的位置参数(方块),“““   ,#高斯模糊=,,img_rgb  cv2.GaussianBlur (img,, (5,, 5), 0)   ,#边缘检测=,,canny_img  cv2.Canny (img_rgb,, 1,, 10)   ,#获得边缘检测图像的高和宽   ,H, W =canny_img.shape      ,#第一个顶点的高度=,,y_top  np.nonzero([马克斯(行),for  row 拷贝canny_img[400年]])[0][0],+,400   ,#第一个顶点的宽度   ,x_top =, int (np.mean (np.nonzero (canny_img [y_top])))      ,#跳过小白圈,然后遍历=,,y_bottom  y_top  +, 80   ,for  row 拷贝范围(y_bottom, H):   ,if  canny_img[行,x_top], !=, 0:   y_bottom =,才能行   ,打破      ,#得到方块的中心点   ,x_center, y_center =, x_top,,(时间+ y_top  y_bottom),//2   ,return  x_center, y_center

怎么使用Python实现跳一跳自动跳跃功能