赞
踩
目录
在这里给大家安利一个自己开发的截图识别文字的程序!
程序使用的前提,是电脑本机装了Python环境!(版本不限)
这段代码创建了一个屏幕截图工具的GUI应用程序,允许用户选择区域截图并进行文字识别。
它解决了以下问题:
下面是对比情况:
首先会得到一个初始的文件夹,各个文件的作用如下所示(未提及的文件均不可动):
切记:仔细查看说明文档!
执行了初始化准备环境之后,得到的文件夹结果是:
运行了extraction.exe之后会得到一个窗口(这个用处不大):
看到这个就证明运行成功了。接下来就可以双击设置好的快捷键,开始截图:
这个就是截图的应用程序。
如果双击快捷键之后截图界面没有出来,则在自己电脑的状态栏打开即可。
完整代码如下,代码即注释:
- # 导入必要的模块
- from datetime import datetime # 用于获取当前日期和时间
- from tkinter import * # 用于创建 GUI 界面
- import pyautogui # 用于屏幕截图
- from PIL import ImageGrab # 用于处理图像数据
- import os # 用于文件和目录操作
- import pytesseract # 用于文字识别
- import pyperclip # 用于剪贴板操作
-
- # 设置 Tesseract OCR 的路径和配置
- tesseract_exe = r'.\Tesseract-OCR\tesseract.exe'
- tessdata_dir = r'.\Tesseract-OCR\tessdata'
- pytesseract.pytesseract.tesseract_cmd = tesseract_exe
- tessdata_dir_config = '--tessdata-dir "{}"'.format(tessdata_dir)
-
- # 创建一个名为 ScreenCaptureApp 的类
- class ScreenCaptureApp:
- def __init__(self, root):
- # 初始化应用程序的根窗口
- self.root = root
- self.root.attributes('-fullscreen', True) # 设置窗口全屏
- self.root.attributes('-alpha', 0.1) # 设置窗口透明度
- self.root.title("Area capture") # 设置窗口标题
-
- # 获取屏幕的宽度和高度
- self.screen_width, self.screen_height = pyautogui.size()
-
- # 创建一个 Canvas 控件用于显示截图区域
- self.canvas = Canvas(self.root, cursor="cross")
- self.canvas.pack(fill=BOTH, expand=YES)
-
- # 绑定鼠标事件处理函数
- self.canvas.bind("<ButtonPress-1>", self.on_press)
- self.canvas.bind("<B1-Motion>", self.on_drag)
- self.canvas.bind("<ButtonRelease-1>", self.on_release)
-
- # 初始化一些坐标和变量
- self.start_x = None
- self.start_y = None
- self.end_x = None
- self.end_y = None
- self.rect = None
- self.mask_rect = None
- self.image_path = None
-
- # 更新窗口大小
- self.update_window_size()
-
- # 更新窗口大小
- def update_window_size(self):
- screen_width = self.root.winfo_screenwidth()
- screen_height = self.root.winfo_screenheight()
- self.root.geometry("%dx%d" % (screen_width, screen_height))
-
- # 鼠标按下事件处理函数
- def on_press(self, event):
- self.start_x = self.canvas.canvasx(event.x)
- self.start_y = self.canvas.canvasy(event.y)
- if self.rect:
- self.canvas.delete(self.rect)
- if self.mask_rect:
- self.canvas.delete(self.mask_rect)
- self.rect = self.canvas.create_rectangle(self.start_x, self.start_y, self.start_x, self.start_y, outline="blue", fill="blue",
- stipple='gray25', width=3)
-
- # 鼠标拖动事件处理函数
- def on_drag(self, event):
- cur_x = self.canvas.canvasx(event.x)
- cur_y = self.canvas.canvasy(event.y)
- self.canvas.coords(self.rect, self.start_x, self.start_y, cur_x, cur_y)
- self.update_mask(cur_x, cur_y)
-
- # 鼠标释放事件处理函数
- def on_release(self, event):
- self.end_x = self.canvas.canvasx(event.x)
- self.end_y = self.canvas.canvasy(event.y)
- # 计算截图区域的坐标
- if self.start_x < self.end_x and self.start_y < self.end_y:
- left = self.start_x
- top = self.start_y
- right = self.end_x
- bottom = self.end_y
- # ... (其他情况的计算省略)
-
- # 使用 ImageGrab.grab 截取屏幕图像
- screenshot = ImageGrab.grab(bbox=(left, top, right, bottom))
-
- # 获取当前脚本的目录和当前日期时间
- script_directory = os.path.dirname(os.path.abspath(__file__))
- current_datetime = datetime.now().strftime("%Y-%m-%d-%H%M%S")
-
- # 构建图像文件名
- file_name = f"xzlScreenshot-{current_datetime}.png"
- self.image_path = os.path.join(script_directory, "image/" + file_name)
-
- # 保存截图到文件
- screenshot.save(self.image_path)
-
- # 配置 Tesseract OCR 参数
- custom_config = r'--oem 3 --psm 6 -c preserve_interword_spaces=1'
-
- # 使用 pytesseract 进行文字识别
- text = pytesseract.image_to_string(screenshot, lang='+'.join(['eng', 'chi_sim']), config=f'--tessdata-dir "{tessdata_dir}" {custom_config}')
-
- # 将识别结果复制到剪贴板
- pyperclip.copy(text)
-
- # 读取配置文件并检查是否需要自动删除截图
- with open('config.txt', 'r', encoding="utf-8") as file:
- content = file.read()
- key_value_pairs = content.strip().split('\n')
- for i in range(0, len(key_value_pairs)):
- key = key_value_pairs[i].split('=')
- value = key[1]
- if str(key[0]) == "autoDeleteImg":
- auto_delete_img_value = value
- break
- if int(auto_delete_img_value) == int(1):
- if self.image_path:
- os.remove(self.image_path)
-
- # 关闭应用程序窗口
- self.root.destroy()
-
- # 更新遮罩效果
- def update_mask(self, cur_x, cur_y):
- if self.mask_rect:
- self.canvas.delete(self.mask_rect)
- self.mask_rect = self.canvas.create_rectangle(0, 0, self.root.winfo_screenwidth(), self.root.winfo_screenheight(), fill="black", )
- self.canvas.tag_lower(self.mask_rect)
- self.canvas.coords(self.mask_rect, self.start_x, self.start_y, cur_x, cur_y)
-
- # 主函数,创建应用程序对象并运行
- def main():
- root = Tk()
- app = ScreenCaptureApp(root)
- root.mainloop()
-
- # 检查脚本是否作为主程序运行
- if __name__ == "__main__":
- main()
下载的安装包是不需要独立安装第三方模块的,都已经集成好了。
应用程序的压缩包已经上传到云服务器了,访问公网地址就可以下载了:截图提取文字应用程序压缩包.zip
如果本地没有环境或者不想配置,可以看这一篇:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。