上一篇
按键识别屏幕文字的代码
- 行业动态
- 2025-05-15
- 6
监听指定键,触发屏幕截图并调用OC
按键触发屏幕文字识别实现方案
核心功能说明
通过监听全局键盘事件,当用户按下指定组合键时自动截取屏幕图像,使用OCR技术识别图像中的文字内容,并将结果输出到控制台或弹窗显示。
依赖库安装
库名称 | 安装命令 | 用途说明 |
---|---|---|
pynput | pip install pynput | 监听全局键盘事件 |
pillow | pip install pillow | 屏幕截图处理 |
pytesseract | pip install pytesseract | OCR文字识别 |
tesseract-ocr | 系统安装包 | Tesseract引擎支持 |
完整代码实现
from pynput import keyboard from PIL import ImageGrab import pytesseract import threading import time import os import tkinter as tk from tkinter import messagebox # 配置Tesseract路径(Windows示例) pytesseract.pytesseract.tesseract_cmd = r'C:Program FilesTesseract-OCRtesseract.exe' # 定义触发快捷键(Ctrl+Alt+S) TRIGGER_KEY = {'ctrl': True, 'alt': True, 's': True} def on_press(key): """键盘事件监听回调""" if key == keyboard.Key.esc: listener.stop() # 按ESC退出监听 elif match_keys(key, TRIGGER_KEY): threading.Thread(target=screenshot_ocr).start() # 后台线程处理 def match_keys(key, key_combination): """判断是否匹配快捷键组合""" if isinstance(key, keyboard.HotKey): return all([key_combination.get(k, False) for k in key_combination]) return False def screenshot_ocr(): """截图并执行OCR识别""" # 全屏截图(可根据需求改为区域截图) screenshot = ImageGrab.grab() screenshot_path = os.path.join(os.gettempdir(), 'screenshot.png') screenshot.save(screenshot_path) try: # 执行OCR识别(设置语言为简体中文) text = pytesseract.image_to_string(screenshot, lang='chi_sim') # 弹窗显示结果(使用tkinter避免阻塞主线程) root = tk.Tk() root.withdraw() messagebox.showinfo("识别结果", f"OCR文本: {text}") root.destroy() except Exception as e: print(f"OCR识别失败: {e}") finally: # 删除临时截图文件 if os.path.exists(screenshot_path): os.remove(screenshot_path) def main(): """启动键盘监听""" global listener listener = keyboard.Listener(on_press=on_press) listener.start() print("监听已启动,按Ctrl+Alt+S触发识别,按ESC退出") listener.join() if __name__ == "__main__": main()
关键参数说明
参数名称 | 默认值 | 说明 |
---|---|---|
TRIGGER_KEY | {'ctrl':True, 'alt':True, 's':True} | 触发识别的快捷键组合 |
lang | 'chi_sim' | OCR识别语言(简体中文) |
screenshot_path | 临时目录 | 截图文件存储路径 |
常见问题解决方案
问题现象 | 解决方案 |
---|---|
Tesseract未找到可执行文件 | 检查pytesseract.pytesseract.tesseract_cmd 路径是否正确 |
快捷键无响应 | 确认脚本以管理员权限运行(部分系统需要全局键盘监听权限) |
OCR结果出现乱码 | 尝试更换lang 参数为'eng' 或下载更精准的语言包 |
弹窗卡顿/延迟 | 将screenshot_ocr 函数改为异步执行或优化图片处理逻辑 |
相关问题与解答
Q1:如何修改触发快捷键为Ctrl+Shift+A?
A1:修改TRIGGER_KEY
定义为{'ctrl': True, 'shift': True, 'a': True}
,并重启程序即可,注意新快捷键不要与系统保留快捷键冲突。
Q2:为什么识别英文内容时出现多余空格?
A2:这是Tesseract的常见现象,可通过以下方法优化:
- 调用
pytesseract.image_to_string(image, config='--psm 6')
指定页面布局分析模式 - 对结果进行后处理,如`text.replace(‘ ‘, ‘