用adb截图传到电脑,用cv2识图,找到坐标,再用adb模拟点击。
代码:
从手机截图并传回电脑 命名 PictureName
def pull_screenshot(PictureName):
#filename = datetime.datetime.now().strftime("%H%M%S") + '{}.png'.format(PictureName)
#os.system('mv {}.png {}'.format(PictureName,filename))
os.remove("{}.png".format(PictureName))
os.system('adb shell screencap -p /sdcard/{}.png'.format(PictureName))
os.system('adb pull /sdcard/{}.png ./{}.png'.format(PictureName,PictureName))
return './{}.png'.format(PictureName)
cv2找图:
def search_returnPoint(img,template_name):
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
template_ = cv2.cvtColor(template[template_name], cv2.COLOR_BGR2GRAY)
template_size = template[template_name+"_size"]
result = cv2.matchTemplate(img_gray, template_,cv2.TM_CCOEFF_NORMED)
#cv2.normalize(result, result, 0, 1, cv2.NORM_MINMAX, -1)
threshold = 0.7
# res大于70%
loc = np.where(result >= threshold)
# 使用灰度图像中的坐标对原始RGB图像进行标记
point = ()
for pt in zip(*loc[::-1]):
cv2.rectangle(img, pt, (pt[0] + template_size[1], pt[1] + + template_size[0]), (7, 249, 151), 2)
point = pt
if point==():
return None,None,None
return img,point[0]+ template_size[1] /2,point[1]
找图2,用来找水井位置的,水井位置摆放位置不同会影响找的位置,还有可能被UI遮挡。
#找图 返回前10个可能匹配的点列表
def search_returnPointList(img,template_name):
template_ = template[template_name]
template_size = template[template_name+"_size"]
result = cv2.matchTemplate(img, template_, cv2.TM_SQDIFF)
result2 = np.reshape(result, result.shape[0] * result.shape[1])
sort = np.argsort(result2)
pointList_ =[]
for i in range(0,10):
print(i)
(y_, x_) = np.unravel_index(sort[i], result.shape) # best match
pointList_.append((x_+ template_size[1] / 2,y_))
cv2.rectangle(
img,
(x_,y_),
(x_ + template_size[1], y_ + template_size[0]),
(200, 0, 0),
4)
return img, pointList_
用税课司自动收钱
源码:
https://gitee.com/nickdlk/Python_jiangnan