博主在写钉钉自动进直播间脚本时,遇到了使用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