当前位置:   article > 正文

使用Python+PaddleOCR+PyUserInput实现桌面图标自动控制/傻瓜式程序一键启动_paddleocr imagegrab

paddleocr imagegrab

概要

  随着工厂自动化要求越来越奇葩,绿箭侠对于工作环境的要求也越来越离谱。很多的操作工非常讨厌复杂的软件操作流程,为此作者将利用OCR目标检测以及键鼠自动控制库实现一键傻瓜式操作。

利用PIL截取显示器界面

  PIL库的ImageGrab是非常不错的截图软件,你可以通过指定xy的坐标以及框的长和宽来实现屏幕的自动化截图,便利快捷!

from PIL import ImageGrab
import numpy as np
img = ImageGrab.grab(bbox=(0, 0, 1920, 1080))  # bbox大小设定为桌面分辨率
img = np.asarray(img) # 获取图片的矩阵信息以便ocr识别
  • 1
  • 2
  • 3
  • 4

利用PaddleOCR实现文字检测以及识别

  这一步主要是为了定位,截取到桌面后,接下来就可以使用百度的PaddleOCR来对图像进行推理,当然使用通用的目标检测也是同样的效果,但是需要稍微训练一下数据。由于截取的屏幕上显示的字都是微软库中自带的十分标准的字体,所以我们只需要在PaddleOCR的官网上下载现成的中英文通用的检测模型识别模型即可。
  一般OCR的识别需要两步,第一步先用目标检测将带有文字的部分小图截取出来,第二步类似于分类,使用分类模型把图片分为不同的类别,类的标签就是所要检测的字。

import os
import time
import numpy as np
from PIL import ImageGrab
from paddleocr.tools.infer import utility
from paddleocr.tools.infer.predict_det import TextDetector
from paddleocr.tools.infer.predict_rec import TextRecognizer
import argparse
det_model_path = r'C:\Users\10547\Downloads\ch_PP-OCRv3_det_infer'
rec_model_path = r'C:\Users\10547\Downloads\ch_PP-OCRv3_rec_infer'
rec_char_dict_path = os.path.join(os.path.dirname(utility.__file__), '../../ppocr/utils/ppocr_keys_v1.txt')
time.sleep(3)
img = ImageGrab.grab()  # bbox大小设定为桌面分辨率
img = img.resize(mouse.screen_size())
img = np.asarray(img)
arg = argparse.ArgumentParser(utility.parse_args())
arg.prog.det_model_dir = det_model_path
arg.prog.rec_model_dir = rec_model_path
arg.prog.rec_char_dict_path = rec_char_dict_path
text_detector = TextDetector(arg.prog)
text_recognizer = TextRecognizer(arg.prog)
dt_boxes, _ = text_detector(img) # 文字检测/定位
img_list, index_list = [], []
for i, j, k, h in dt_boxes.astype(dtype=int):
    ymin = min(i[0], j[0], k[0], h[0])
    ymax = max(i[0], j[0], k[0], h[0])
    xmin = min(i[1], j[1], k[1], h[1])
    xmax = max(i[1], j[1], k[1], h[1])
    img_list.append(img[xmin:xmax, ymin:ymax])
    index_list.append(((ymin + ymax) / 2, (xmin + xmax) / 2))
rec_res, _ = text_recognizer(img_list) # 文字识别/识别文字
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

在这里插入图片描述

利用PyUserInput实现键鼠自动化

  PyUserInput库是一个非常优秀的键鼠自动化控制库,可以在不同的系统上运行,方法简单非常的容易上手!

from pymouse import PyMouse
mouse = PyMouse()
  • 1
  • 2

成果展示

完整代码:

import os
import time
import numpy as np
from PIL import ImageGrab, ImageFont, ImageDraw, Image
from paddleocr.tools.infer import utility
from paddleocr.tools.infer.predict_det import TextDetector
from paddleocr.tools.infer.predict_rec import TextRecognizer

import argparse
from pymouse import PyMouse

mouse = PyMouse()
det_model_path = r'C:\Users\10547\Downloads\ch_PP-OCRv3_det_infer'
rec_model_path = r'C:\Users\10547\Downloads\ch_PP-OCRv3_rec_infer'
rec_char_dict_path = os.path.join(os.path.dirname(utility.__file__), '../../ppocr/utils/ppocr_keys_v1.txt')
time.sleep(3)
img = ImageGrab.grab()  # bbox大小为桌面分辨率
img = img.resize(mouse.screen_size())
img = np.asarray(img)
arg = argparse.ArgumentParser(utility.parse_args())
arg.prog.det_model_dir = det_model_path
arg.prog.rec_model_dir = rec_model_path
arg.prog.rec_char_dict_path = rec_char_dict_path
text_detector = TextDetector(arg.prog)
text_recognizer = TextRecognizer(arg.prog)
dt_boxes, _ = text_detector(img)
img_list, index_list = [], []
for i, j, k, h in dt_boxes.astype(dtype=int):
    ymin = min(i[0], j[0], k[0], h[0])
    ymax = max(i[0], j[0], k[0], h[0])
    xmin = min(i[1], j[1], k[1], h[1])
    xmax = max(i[1], j[1], k[1], h[1])
    img_list.append(img[xmin:xmax, ymin:ymax])
    index_list.append(((ymin + ymax) / 2, (xmin + xmax) / 2))
rec_res, _ = text_recognizer(img_list)
src_im = Image.fromarray(utility.draw_text_det_res(dt_boxes, img))
draw = ImageDraw.Draw(src_im)
font_path = r'C:\Windows\Fonts\微软雅黑\msyhl.ttc'
font = ImageFont.truetype(font_path, 30)
for i, j in zip(rec_res, index_list):
    if i[0] == '微信':
        mouse.press(int(j[0]), int(j[1]))
        time.sleep(2)
        mouse.move(int(j[0]) + 200, int(j[0]))
        time.sleep(2)
        mouse.release(int(j[0]), int(j[0]))
    # draw.text(j, i[0], font=font, fill='red')
# src_im.show()


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

2023-06-28-17-48-14

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/264882?site
推荐阅读
相关标签
  

闽ICP备14008679号