对应的代码如下:
- import time
-
- import uiautomator2 as u2
- import cv2
- import numpy as np
-
- d = u2.connect_usb("6e0bc87e")
-
- displayWidth = d.info['displayWidth']
- displayHeight = d.info['displayHeight']
-
-
- if __name__ == '__main__':
- d.screenshot('pic/1.png')
- img_rgb = cv2.imread('./pic/1.png')
- img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
- template = cv2.imread('./template/finger2.png', 0)
-
- res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
- threshold = 0.7
-
- loc = np.where(res >= threshold)
-
-
-
- for pt in zip(*loc[::-1]):
- print(pt[0] / displayWidth, pt[1] / displayHeight)
- d.click(pt[1] / displayHeight, pt[0] / displayWidth)
- time.sleep(0.3)
-
- pass
-
- pass
结构如下:
其中template是目标文件,OpenCV使用的是matchTemplate进行模板匹配找图。
这里有个要注意的地方:
uiautomator2中click输入的是比例,需要用当像素的宽 / 屏幕宽,当前像素长 / 屏幕长。这种,
可以通过
- d = u2.connect_usb("6e0bc87e")
-
- displayWidth = d.info['displayWidth']
- displayHeight = d.info['displayHeight']
这种方式获取屏幕的宽度和高度。