You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现屏幕出现指定文本时自动触发截图的功能

屏幕特定文本触发自动截图可行方案

方案核心逻辑

你之前用AutoIt无法实现的核心原因是:AutoIt自带的文本读取能力仅能抓取标准Win32控件内的文本,对当前大量自绘界面、Electron应用、GPU渲染内容、网页内容完全无效,必须通过*屏幕截屏+光学字符识别(OCR)*的路径实现需求,整体流程非常成熟:

  • 按固定间隔抓取屏幕内容
  • 对截屏内容做离线OCR识别提取所有文本
  • 匹配目标字符串NeedToCapture
  • 匹配命中则保存截图,触发后加短暂冷却避免重复存储
  • 循环运行直到收到手动终止指令

最低成本实现路径(Python脚本,10分钟可跑通)

不需要复杂的环境配置,依赖的库全是开源离线可用的,不需要调用任何在线接口:

  • 屏幕捕获用mss,比传统PIL截屏速度快3-5倍,CPU占用极低
  • OCR用PaddleOCR轻量英文模型,屏幕印刷字体识别准确率99%以上,单帧识别耗时<100ms
  • 图片存储用Pillow即可

可直接运行的代码

提前安装依赖:pip install mss opencv-python paddleocr paddlepaddle pillow numpy

import time
import os
import mss
import cv2
import numpy as np
from paddleocr import PaddleOCR
from PIL import Image

# 基础参数,可根据自己需求调整
TARGET_TEXT = "NeedToCapture"
CHECK_INTERVAL = 1  # 检测间隔,单位秒,建议1-2秒,太低会增加CPU占用
TRIGGER_COOLDOWN = 5  # 触发截图后的冷却时间,单位秒,避免同个画面重复截图
SAVE_FOLDER = "./auto_captures"
os.makedirs(SAVE_FOLDER, exist_ok=True)

# 初始化OCR,关闭日志、关闭方向分类提速,仅识别英文
ocr = PaddleOCR(use_angle_cls=False, lang="en", show_log=False)
last_trigger_ts = 0

if __name__ == "__main__":
    print("屏幕监控已启动,按Ctrl+C即可手动停止")
    with mss.mss() as screen_capture:
        # 默认监控主全屏,若知道目标文本出现的固定区域,可替换为自定义区域坐标,格式为{"top": y起点, "left":x起点, "width":区域宽, "height":区域高},识别速度会提升数倍
        monitor_area = screen_capture.monitors[1]
        while True:
            try:
                # 截屏转OpenCV兼容格式
                frame = np.array(screen_capture.grab(monitor_area))
                frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)
                # 提取所有识别到的文本
                ocr_result = ocr.ocr(frame, cls=False)
                text_collect = []
                for line in ocr_result:
                    if line:
                        for word_info in line:
                            text_collect.append(word_info[1][0])
                page_text = " ".join(text_collect)
                # 匹配目标文本
                if TARGET_TEXT in page_text and time.time() - last_trigger_ts > TRIGGER_COOLDOWN:
                    ts_str = time.strftime("%Y%m%d_%H%M%S")
                    save_path = os.path.join(SAVE_FOLDER, f"capture_{ts_str}.png")
                    Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)).save(save_path)
                    print(f"检测到目标文本,截图已保存至:{save_path}")
                    last_trigger_ts = time.time()
                time.sleep(CHECK_INTERVAL)
            except KeyboardInterrupt:
                print("收到终止指令,监控已停止")
                break

优化建议

  • 如果明确知道目标文本只会出现在屏幕固定位置,一定要把监控区域从全屏改成对应小区域,CPU占用可以从15%左右降到3%以内,识别速度也会明显变快
  • 如果出现漏识别,可以把精确匹配改成模糊匹配,比如用字符串相似度算法设置90%以上相似度即触发,避免因为字体渲染、轻微色差导致漏判
  • 如果不想装Python环境,也可以用按键精灵搭配本地OCR插件实现同样逻辑,但灵活度低,且多数第三方封装的OCR插件识别准确率不如开源模型。

内容的提问来源于stack exchange,提问作者Mehrdad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:03:30