当前位置:首页 > 行业动态 > 正文

按键识别屏幕文字的代码

监听指定键,触发屏幕截图并调用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的常见现象,可通过以下方法优化:

  1. 调用pytesseract.image_to_string(image, config='--psm 6')指定页面布局分析模式
  2. 对结果进行后处理,如`text.replace(‘ ‘, ‘
0