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

server/2024/12/28 21:17:30/
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 = addressimg = pyautogui.screenshot(region=[0, 0, pyautogui.size().width, pyautogui.size().height])  # x,y,w,himg = 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_locself.template = templateself.X = max_loc[0] + template.shape[1] / 2self.Y = max_loc[1] + template.shape[0] / 2self.max_val = max_valself.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()

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 = addressimg = pyautogui.screenshot(region=[0, 0, pyautogui.size().width, pyautogui.size().height])  # x,y,w,himg = 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_locself.template = templateself.X = max_loc[0] + template.shape[1] / 2self.Y = max_loc[1] + template.shape[0] / 2self.max_val = max_valself.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,y2def on_click(x, y, button, pressed):  # 监听鼠标if pressed:  # 按压打印print(f'{button} pressed at {x}, {y}')coordinate.extend([x, y])else:return Falsedef 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)
python"># -*- 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,y2def on_click(x, y, button, pressed):  # 监听鼠标if pressed:  # 按压打印print(f'{button} pressed at {x}, {y}')coordinate.extend([x, y])else:return Falsedef 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)


http://www.ppmy.cn/server/154024.html

相关文章

快速了解开源日志框架log4net:灵活记录应用程序日志信息的利器

前言 log4net 是一个广泛应用的、开源的日志框架&#xff0c;它提供了一种灵活的机制来记录应用程序的日志信息。log4net 使用 Apache Software Foundation 的 Apache License 2.0 开源协议&#xff0c;可以免费使用和修改。 使用 log4net&#xff0c;可以将应用程序中的不同…

Docker部署捕鱼达人网页小游戏

Docker部署捕鱼达人网页小游戏 前言1.1 项目背景1.2 项目概述二、本次实践介绍2.1 本地环境规划2.2 本次实践说明三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、拉取容器镜像五、搭建捕鱼达人网页小游戏5.1 创建游戏容器5.2 查看容…

E7515BUXM 5G 无线测试平台

新利通 E7515BUXM 5G 无线测试平台 ——紧凑型一体化仪器能够测试 5G 新空口和 LTE—— 简述 Keysight E7515B UXM 5G 无线测试解决方案是一个高度集成的信令测试平台&#xff0c;支持多制式堆栈并提供了强大的处理能力和丰富的射频资源。 E7515B UXM 5G 无线测试解决方案支…

云手机群控能用来做什么?

随着云手机的发展&#xff0c;云手机群控技术逐渐从小众的游戏多开工具&#xff0c;发展为涵盖多个领域的智能操作平台。不论是手游搬砖、短视频运营&#xff0c;还是账号养成等场景&#xff0c;云手机群控都展现出了强大的应用潜力。本文将为大家详细解析云手机群控的应用场景…

数据仓库: 9- 数据仓库数据治理

目录 9- 数据治理9.1 数据标准化9.1.1 数据标准化的定义9.1.2 数据标准化的重要性9.1.3 数据标准化的主要内容9.1.4 数据标准化的实施步骤9.1.5 数据标准化常用工具9.1.6 数据标准化的挑战与应对策略9.1.7 案例分析9.1.8 总结 9.2 主数据管理(MDM)9.2.1 主数据管理的核心目标9.…

18.springcloud_openfeign之扩展组件二

文章目录 一、前言二、子容器默认组件FeignClientsConfigurationDecoder的注入Contract约定 对注解的支持对类上注解的支持对方法上注解的支持对参数上注解的支持MatrixVariablePathVariableRequestParamRequestHeaderSpringQueryMapRequestPartCookieValue FormattingConversi…

kong网关使用pre-function插件,改写接口的返回数据

一、背景 kong作为api网关&#xff0c;除了反向代理后端服务外&#xff0c;还可对接口进行预处理。 比如本文提及的一个小功能&#xff0c;根据http header某个字段的值&#xff0c;等于多少的时候&#xff0c;返回一个固定的报文。 使用到的kong插件是pre-function。 除了上…

Java中处理if-else的几种高级方法

前言 在我看来多写几个if-else没啥大不了的&#xff0c;但是就是看起来没啥逼格&#xff0c;领导嫌弃。我根据开发的经历写几个不同的替代方法 一、枚举法替代 我先前写了一篇文章&#xff0c;可以去看看。 通过枚举替换if-else语句的解决方案_枚举代替if else c语言-CSDN博…