如何实现屏幕出现指定文本时自动触发截图的功能
屏幕特定文本触发自动截图可行方案
方案核心逻辑
你之前用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
相关产品推荐
相关产品推荐

