博主在写钉钉自动进直播间脚本时,遇到了使用pyautogui库识别图像不准确甚至识别不出的问题(实际上用js脚本更简单)。
解决方法
调用opencv库进行辅助识别,而pyautogui库则负责判断是否进行点击操作。
1.首先获取电脑屏幕的视频流(你可指定用户选取获取范围,提高处理效率),并通过opencv把获取到的图像进行BGR格式转化,再与目标图像的BGR格式进行模板匹配。
这里用到opencv的TM_CCOEFF_NORMED归一化匹配法,精度还是比较高的。
如以下代码片段
im = ImageGrab.grab() # 获得当前屏幕
imm = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2GRAY) # 转为opencv的BGR格式
qd_pic = cv2.imread('qiandao.png')
qd_rgb = cv2.cvtColor(qd_pic, cv2.COLOR_RGB2GRAY)
# 匹配签到按钮
res = cv2.matchTemplate(qd_rgb, imm, cv2.TM_CCOEFF_NORMED)
2.设定阈值,当匹配度大于0.9的适合输出匹配图像坐标(建议匹配度设置为0.999)
如以下代码片段。
#设定阈值
threshold = 0.9
result = lo[1]
x_qd = lo[3][0]
y_qd = lo[3][1]
if result >= 0.9:
print(lo[3][0])
print(lo[3][1])
#这里调用pg进行模拟鼠标点击,clicks为点击次数,button设定左右键
pg.click(x=x_qd, y=y_qd, clicks=1, button='left')
continue