受到python截图小工具(按键触发)_python实现鼠标框选截图功能-CSDN博客的启发,我决定做一个可以在屏幕截图,然后识别截图中文字的小程序,这样就可以提高工作效率。对于wps的图片识别文字需要会员也可以无视,对于微信截图再识别文字也比较麻烦。再者,将识别的文字保存到excel文件,就可以不断截图,不断获取文字,提高工作效率。
上源码:
# -*- coding: utf-8 -*-
"""
Created on Sun Aug 25 11:19:30 2024
@author: YBK
"""
'''
通过按键(左Ctrl键)来触发
可以容错,不固定方位
如果有问题输出错误
如果没问题就输出两点的坐标
需求:
1、按键触发
2、输出大致图片
3、检测错误
'''
import pyautogui
import datetime
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
from paddleocr import PaddleOCR
from openpyxl import load_workbook
from openpyxl.styles import Alignment
ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory
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]])#左上角坐标和宽、高
now = datetime.datetime.now()
filename = str(now).replace('-','').replace(':','').replace(' ','').split('.')[0]
img.save("e:\\截图\\" + filename + ".jpg")
# 识别图片中的文字
image_path = "e:\\截图\\" + filename + ".jpg"
result = ocr.ocr(image_path, cls=True)
texts = ''
for line in result:
if line is not None:
for detection in line:
# print(detection[1][0])
texts = texts + detection[1][0] + '\n'
print(texts)
# 把结果保存到excel文件中
# 加载现有的Excel文件
file_path = 'e:\\截图\\截图数据.xlsx'
wb = load_workbook(file_path)
# 激活工作表,默认激活第一个工作表
sheet = wb.active
# 假设我们要添加的数据是一个列表
new_row = [now.strftime("%Y-%m-%d %H:%M:%S"), texts]
# 获取最后一行的编号
last_row = sheet.max_row
# 在Excel中添加新数据
for i in range(len(new_row)):
sheet.cell(row=last_row + 1, column=i + 1).value = new_row[i]
sheet.cell(row=last_row + 1, column=i + 1).alignment = Alignment(wrap_text=True,vertical='center')
# 保存修改后的Excel文件
wb.save(file_path)
wb.close()