开发一个基于 Python 的“智能截图内容提取与总结工具”(支持 OCR + 文本摘要)



背景介绍

在日常工作中,我们经常需要从截图中提取文字内容,例如从网页、文档或图片中提取关键信息。然而,手动复制粘贴不仅费时,还容易出错。为了提升效率,我们可以开发一个“智能截图内容提取与总结工具”,它能够通过快捷键(如 Alt+X)截取屏幕指定区域,自动识别截图中的文字内容,并调用 AI 模型进行文本摘要,最终将结果以弹窗或文本文件形式展示给用户。

这个项目结合了图像处理、OCR 识别、文本摘要以及用户交互等技术,适合中级以下的 Python 开发者进行学习和实践。通过该项目,你可以掌握如何使用 Python 调用外部库(如 pytesseracttransformers)以及如何实现快捷键监听、截图、图像处理等核心功能。


思路分析

本项目的核心功能包括以下几个部分:

  1. 截图功能:通过快捷键触发,用户可以框选屏幕上的任意区域,系统截取该区域并保存为图片。
  2. OCR 文字识别:使用 pytesseractPaddlePaddle 识别截图中的文字内容。
  3. 文本摘要:使用 transformers 库调用预训练的摘要模型(如 facebook/bart-large-cnn)对识别出的文本进行摘要。
  4. 结果展示:将摘要结果以弹窗或文本文件形式展示,提升用户体验。

为了实现上述功能,我们使用了以下技术栈:

  • Python:主语言,用于实现逻辑控制。
  • pytesseract:OCR 文字识别工具,依赖 Tesseract-OCR。
  • pyautogui:用于截屏和模拟鼠标操作。
  • keyboard:监听快捷键(如 Alt+X)。
  • transformers:调用 Hugging Face 的预训练摘要模型。
  • tkinter:用于弹窗展示摘要结果(可选)。

代码实现

以下是一个完整的项目实现,包含多个模块,结构清晰、注释详细,适合初学者理解和运行。

1. 项目结构

screenshot_summarizer/
│
├── main.py              # 主程序逻辑
├── screenshot_utils.py  # 截图和图像处理模块
├── ocr_utils.py         # OCR 文字提取模块
├── summary_utils.py     # 文本摘要模块
└── config.py            # 配置文件(如模型路径、快捷键等)

2. 示例代码(main.py)

import keyboard
import pyautogui
import pytesseract
from PIL import Image
import os
from summary_utils import summarize_text
from screenshot_utils import capture_screenshot
from ocr_utils import extract_text_from_image
import tkinter as tk
from tkinter import messagebox

# 设置 Tesseract 路径(根据你的系统配置)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# 快捷键绑定:Alt+X 触发截图和摘要
def on_hotkey_pressed():
    print("正在截取屏幕...")
    screenshot_path = capture_screenshot()
    if screenshot_path:
        print("正在识别文字...")
        text = extract_text_from_image(screenshot_path)
        if text:
            print("正在生成摘要...")
            summary = summarize_text(text)
            print("摘要结果:", summary)
            # 保存摘要到文件
            with open("summary.txt", "w", encoding="utf-8") as f:
                f.write(summary)
            print("摘要已保存至 summary.txt")
            # 弹窗显示摘要内容
            show_summary(summary)
        else:
            print("未识别到文字内容。")
    else:
        print("截图失败。")

# 弹窗显示摘要内容
def show_summary(summary):
    root = tk.Tk()
    root.withdraw()  # 隐藏主窗口
    messagebox.showinfo("摘要结果", summary)
    root.destroy()

# 注册快捷键
keyboard.add_hotkey('alt+x', on_hotkey_pressed)

print("按 Alt+X 截图并生成摘要。按 Ctrl+C 退出。")

# 保持程序运行
try:
    while True:
        pass
except KeyboardInterrupt:
    print("程序已退出。")

3. 示例代码(screenshot_utils.py)

import pyautogui
import time
import os

def capture_screenshot():
    print("请框选屏幕区域...")
    time.sleep(2)  # 给用户时间框选
    screenshot = pyautogui.screenshot()
    screenshot_path = "screenshot.png"
    screenshot.save(screenshot_path)
    print(f"截图已保存为 {screenshot_path}")
    return screenshot_path

4. 示例代码(ocr_utils.py)

from PIL import Image
import pytesseract

def extract_text_from_image(image_path):
    try:
        image = Image.open(image_path)
        # 使用中文语言包,如需英文可改为 'eng'
        text = pytesseract.image_to_string(image, lang='chi_sim')
        return text.strip()
    except Exception as e:
        print(f"OCR 处理失败:{e}")
        return ""

5. 示例代码(summary_utils.py)

from transformers import pipeline

def summarize_text(text):
    # 使用 Hugging Face 的预训练摘要模型
    summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
    # 生成摘要,最大长度100,最小长度30
    summary = summarizer(text, max_length=100, min_length=30, do_sample=False)
    return summary[0]['summary_text']

输入输出示例

输入:
用户按下快捷键 Alt+X,并框选屏幕上的某段文字截图(例如一段新闻报道或文档内容)。

输出:
– 提取文字内容:“人工智能正在迅速发展,它在医疗、金融、教育等多个领域都有广泛应用。未来,AI 将更加智能,与人类协作更加紧密。”
– 摘要结果:“人工智能在多个领域广泛应用,未来将更加智能并与人类协作更紧密。”
– 工具弹窗显示摘要内容,或生成一个文本文件 summary.txt 保存摘要结果。


项目亮点

  • OCR 技术:使用 pytesseract 实现图像中的文字识别。
  • 文本摘要:调用 transformers 库中的 facebook/bart-large-cnn 模型进行文本摘要。
  • 快捷键交互:使用 keyboard 模块监听 Alt+X 快捷键,实现一键截图。
  • 用户友好:支持弹窗提示或保存为文件,提升用户体验。

总结

本项目是一个结合了图像处理、OCR 识别、文本摘要和用户交互的实用工具,适合中级以下的 Python 开发者进行学习和实践。通过该项目,你可以掌握如何使用 Python 调用外部模型、处理图像、监听快捷键以及生成摘要内容。

如果你希望进一步扩展功能,可以考虑:
– 支持多语言识别(如英文、日文等);
– 集成本地模型(如 distilbart)以减少网络依赖;
– 添加截图区域选择功能(如使用 pyautoguilocateOnScreenmouse 库实现自定义框选);
– 使用 pyqt5tkinter 创建更友好的图形界面。

该项目不仅具有实际应用场景,还具备较高的学习价值,适合用于个人项目或教学示例。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注