python简单图像识别自动化工具

import pyautogui
import cv2
import numpy as np
import time

"""
小型自动化工具
图片识别
自动化简单工具
"""

# -*- coding:utf-8 -*-
# #cv读取中文有点问题 需要修改库里使用编码为utf-8
# 获取图像数据匹配全屏寻找
class Mouse():
    def __init__(self, address):  # 创建Mouse的时候加入图片地址参数
        time.sleep(0.5)
        self.address = address
        img = pyautogui.screenshot(region=[0, 0, pyautogui.size().width, pyautogui.size().height])  # x,y,w,h
        img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)  # cvtColor用于在图像中不同的色彩空间进行转换,用于后续处理。
        template = cv2.imread(self.address, cv2.COLOR_RGB2BGR)
        res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
        self.max_loc = max_loc
        self.template = template
        self.X = max_loc[0] + template.shape[1] / 2
        self.Y = max_loc[1] + template.shape[0] / 2
        self.max_val = max_val
        self.img = img

    # 移动鼠标
    def move(self, val=0.85, x=0, y=0):  # x,y为偏移量
        if self.max_val > val:
            pyautogui.moveTo(self.X + x, self.Y - y, duration=0.2, tween=pyautogui.easeInOutQuad)

    # 获取匹配度
    def value(self):
        print("匹配度:", self.max_val)

    # 进行点击
    def click(self, val=0.85, x=0, y=0):  # x,y为偏移量
        if self.max_val > val:
            pyautogui.click(self.X + x, self.Y - y, duration=0.2, tween=pyautogui.easeInOutQuad)

    # 进行双击
    def doubleClick(self, val=0.85, x=0, y=0):  # x,y为偏移量
        """
        :param val: 匹配度
        :param x:   x轴偏移    左负右正
        :param y:   y轴偏移    上加下减
        :return:
        """
        if self.max_val > val:
            pyautogui.doubleClick(self.X + x, self.Y - y, duration=0.2, tween=pyautogui.easeInOutQuad)

    # 进行显示
    def show(self, val=0.85):
        if self.max_val > val:
            right_bottom = (self.max_loc[0] + self.template.shape[1], self.max_loc[1] + self.template.shape[0])  # 右下角
            cv2.rectangle(self.img, self.max_loc, right_bottom, 255, 2)  # 画出矩形位置
            cv2.imshow("output", self.img)
            cv2.waitKey(0)

# 写入
def write(string):
    pyautogui.write(string)

# 删除
def delete():
    pyautogui.hotkey('Ctrl', 'a')
    pyautogui.press('delete')

# 点击
def click(x, y, duration=0.2):
    pyautogui.click(x, y, duration=duration, tween=pyautogui.easeInOutQuad)

# 移动
def move(x, y, duration=0.2):
    pyautogui.moveTo(x, y, duration=duration, tween=pyautogui.easeInOutQuad)

# 右键
def clickRight(x, y, duration=0.2):
    pyautogui.rightClick(x, y, duration=duration, tween=pyautogui.easeInOutQuad)

# 操作流程
m = Mouse("test.jpg")
m.move()
m.value()
m.show()

import pyautogui
import cv2
import numpy as np
import time

"""
小型自动化工具
图片识别
自动化简单工具
"""

# -*- coding:utf-8 -*-
# #cv读取中文有点问题 需要修改库里使用编码为utf-8
# 获取图像数据匹配全屏寻找
class Mouse():
    def __init__(self, address):  # 创建Mouse的时候加入图片地址参数
        time.sleep(0.5)
        self.address = address
        img = pyautogui.screenshot(region=[0, 0, pyautogui.size().width, pyautogui.size().height])  # x,y,w,h
        img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)  # cvtColor用于在图像中不同的色彩空间进行转换,用于后续处理。
        template = cv2.imread(self.address, cv2.COLOR_RGB2BGR)
        res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
        self.max_loc = max_loc
        self.template = template
        self.X = max_loc[0] + template.shape[1] / 2
        self.Y = max_loc[1] + template.shape[0] / 2
        self.max_val = max_val
        self.img = img

    # 移动鼠标
    def move(self, val=0.85, x=0, y=0):  # x,y为偏移量
        if self.max_val > val:
            pyautogui.moveTo(self.X + x, self.Y - y, duration=0.2, tween=pyautogui.easeInOutQuad)

    # 获取匹配度
    def value(self):
        print("匹配度:", self.max_val)

    # 进行点击
    def click(self, val=0.85, x=0, y=0):  # x,y为偏移量
        if self.max_val > val:
            pyautogui.click(self.X + x, self.Y - y, duration=0.2, tween=pyautogui.easeInOutQuad)

    # 进行双击
    def doubleClick(self, val=0.85, x=0, y=0):  # x,y为偏移量
        """
        :param val: 匹配度
        :param x:   x轴偏移    左负右正
        :param y:   y轴偏移    上加下减
        :return:
        """
        if self.max_val > val:
            pyautogui.doubleClick(self.X + x, self.Y - y, duration=0.2, tween=pyautogui.easeInOutQuad)

    # 进行显示
    def show(self, val=0.85):
        if self.max_val > val:
            right_bottom = (self.max_loc[0] + self.template.shape[1], self.max_loc[1] + self.template.shape[0])  # 右下角
            cv2.rectangle(self.img, self.max_loc, right_bottom, 255, 2)  # 画出矩形位置
            cv2.imshow("output", self.img)
            cv2.waitKey(0)

# 写入
def write(string):
    pyautogui.write(string)

# 删除
def delete():
    pyautogui.hotkey('Ctrl', 'a')
    pyautogui.press('delete')

# 点击
def click(x, y, duration=0.2):
    pyautogui.click(x, y, duration=duration, tween=pyautogui.easeInOutQuad)

# 移动
def move(x, y, duration=0.2):
    pyautogui.moveTo(x, y, duration=duration, tween=pyautogui.easeInOutQuad)

# 右键
def clickRight(x, y, duration=0.2):
    pyautogui.rightClick(x, y, duration=duration, tween=pyautogui.easeInOutQuad)

# 操作流程
m = Mouse("test.jpg")
m.move()
m.value()
m.show()
# -*- coding:utf-8 -*-
import pyautogui
import cv2
from pynput.keyboard import Key, Listener as Listener_K, Controller as Controller_K
from pynput.mouse import Button, Listener as Listener_M, Controller as Controller_M
import numpy as np

'''
通过按键来触发
可以容错,不固定方位
如果有问题输出错误
如果没问题就输出两点的坐标
需求:
1、按键触发
2、输出大致图片
3、检测错误
'''

run_key = Key.ctrl_l  # 按键触发,ctrl_l即左边的Ctrl键
coordinate = []  # 存储坐标x1,y1,x2,y2


def on_click(x, y, button, pressed):  # 监听鼠标
    if pressed:  # 按压打印
        print(f'{button} pressed at {x}, {y}')
        coordinate.extend([x, y])
    else:
        return False


def on_release(key):
    '释放按键时执行。'
    print(key)
    if key == run_key:  # 可以改str类型来判断输入字母之类的
        return False  # 停止监听,作为运行


if __name__ == '__main__':
    keyboard = Controller_K()  # 监听按键
    with Listener_K(on_release=on_release) as listener:
        listener.join()
    # 监听到特定按键跳转
    print("鼠标点击")
    mouse = Controller_M()  # 监听鼠标
    for _ in range(2):
        with Listener_M(on_click=on_click) as listener:
            listener.join()
    print(coordinate)
    # 如果没有特殊情况,就截图
    if coordinate[0] - coordinate[2] == 0 or coordinate[1] - coordinate[3] == 0:
        print("错误")
    else:
        # 获取左上角坐标和差值
        coord, distance = [], []
        for n in range(2):
            if coordinate[n] < coordinate[n + 2]:
                coord.append(coordinate[n])
            else:
                coord.append(coordinate[n + 2])
            distance.append(abs(coordinate[n] - coordinate[n + 2]))
        img = pyautogui.screenshot(region=[coord[0], coord[1], distance[0], distance[1]])  # 左上角坐标和宽、高
        img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
        name = input("输入保存名称:")
        cv2.imwrite(name+".jpg", img)


# -*- coding:utf-8 -*-
import pyautogui
import cv2
from pynput.keyboard import Key, Listener as Listener_K, Controller as Controller_K
from pynput.mouse import Button, Listener as Listener_M, Controller as Controller_M
import numpy as np

'''
通过按键来触发
可以容错,不固定方位
如果有问题输出错误
如果没问题就输出两点的坐标
需求:
1、按键触发
2、输出大致图片
3、检测错误
'''

run_key = Key.ctrl_l  # 按键触发,ctrl_l即左边的Ctrl键
coordinate = []  # 存储坐标x1,y1,x2,y2


def on_click(x, y, button, pressed):  # 监听鼠标
    if pressed:  # 按压打印
        print(f'{button} pressed at {x}, {y}')
        coordinate.extend([x, y])
    else:
        return False


def on_release(key):
    '释放按键时执行。'
    print(key)
    if key == run_key:  # 可以改str类型来判断输入字母之类的
        return False  # 停止监听,作为运行


if __name__ == '__main__':
    keyboard = Controller_K()  # 监听按键
    with Listener_K(on_release=on_release) as listener:
        listener.join()
    # 监听到特定按键跳转
    print("鼠标点击")
    mouse = Controller_M()  # 监听鼠标
    for _ in range(2):
        with Listener_M(on_click=on_click) as listener:
            listener.join()
    print(coordinate)
    # 如果没有特殊情况,就截图
    if coordinate[0] - coordinate[2] == 0 or coordinate[1] - coordinate[3] == 0:
        print("错误")
    else:
        # 获取左上角坐标和差值
        coord, distance = [], []
        for n in range(2):
            if coordinate[n] < coordinate[n + 2]:
                coord.append(coordinate[n])
            else:
                coord.append(coordinate[n + 2])
            distance.append(abs(coordinate[n] - coordinate[n + 2]))
        img = pyautogui.screenshot(region=[coord[0], coord[1], distance[0], distance[1]])  # 左上角坐标和宽、高
        img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
        name = input("输入保存名称:")
        cv2.imwrite(name+".jpg", img)


作者:myzzb

物联沃分享整理
物联沃-IOTWORD物联网 » python简单图像识别自动化工具

发表回复