摘要:还在手动暂停视频截字幕?还在边看直播边手打笔记?本文介绍的
screen_ocr.py脚本,利用 macOS 原生screencapture与Vision API,结合 Python 的imagehash库,实现了一个“框选即监控、变化即记录”的实时 OCR 笔记神器。特别适合视频字幕提取、在线会议记录及动态网页监控。
1. 工具简介:你的屏幕“速记员”
在日常开发与学习中,我们经常面临以下场景:
- 看网课/直播:老师讲得太快,来不及记笔记。
- 提取视频字幕:视频没有提供字幕文件,只能盯着画面看。
- 监控动态界面:某个网页或软件界面不断刷新数据,需要手动记录。
screen_ocr.py 专为解决这些痛点而生。它运行后,你只需在屏幕上框选出感兴趣的文字区域,它就会在后台“盯着”这块区域。一旦检测到画面内容变化(如字幕变了、数据刷新了),它会立即调用 macOS 原生的 OCR 引擎识别文字,并按时间顺序写入 Markdown 文件。
2. 核心功能解析
2.1 原生框选:screencapture -i
传统 Python 截图工具(如 pyautogui)通常无法精确框选区域,或者依赖庞大的 GUI 库(如 tkinter、PyQt)。screen_ocr.py 直接调用了 macOS 内置的 screencapture -i 命令。
- 体验:按下运行键,鼠标变成十字准星,跟平时用
Cmd+Shift+4一模一样。 - 优势:零依赖、原生体验、支持 Retina 屏幕高清截图。
2.2 智能去抖:感知哈希 (pHash) 比对
如果每秒钟都调用 OCR,不仅浪费资源,还会产生大量重复文本(比如画面没变,但识别结果可能因为噪点略有不同)。
脚本引入了 imagehash 库,计算图片的 pHash (感知哈希)。
- 原理:将图片缩放、灰度化、DCT 变换后生成一个 64 位的指纹。
- 判定:只有当新旧两帧图片的汉明距离(Hamming Distance)大于 5 时,才认为画面发生了实质变化。
- 效果:完美过滤静止画面,仅在文字更新时触发识别。
2.3 极速识别:macOS Native Vision API
通过 ocrmac 库封装,直接调用 macOS 系统级的 VNRecognizeTextRequest。
- 速度:得益于 Apple Silicon 的 NPU 加速,识别一帧仅需几十毫秒。
- 语言:支持中英文混合识别 (
zh-Hans,en-US),准确率极高。
2.4 实时笔记生成
脚本会在后台维护一个 seen_texts 集合(基于 OCR 结果的精确匹配去重),一旦识别到新内容,便以 Markdown 格式追加写入:
### [14:30:05] 捕获内容
- 今天我们来学习 Python 的异步编程...
- 首先导入 asyncio 模块...
3. 实战代码解读
让我们看看 screen_ocr.py 中最核心的逻辑片段:
# 1. 唤起原生框选
cmd = ["screencapture", "-i", "-r", cropped_frame]
subprocess.run(cmd, capture_output=True)
# 2. 进入监控循环
while True:
time.sleep(check_interval)
# 3. 静默截图 (screencapture -x 表示不播放快门声)
subprocess.run(["screencapture", "-x", cropped_frame], ...)
# 4. 计算哈希并比对
current_phash = calculate_image_hash(cropped_frame)
if current_phash - last_phash <= 5:
continue # 画面没变,跳过
# 5. 调用 OCR 识别
annotations = ocrmac.text_from_image(cropped_frame, ...)
# 6. 去重并写入 Markdown
if frame_text not in seen_texts:
with open(output_md, "a") as f:
f.write(f"\n### [{timestamp}] 捕获内容\n")
4. 使用指南
依赖安装
确保你的 Mac 上安装了 Python 3.10+,并安装必要的库:
pip install ocrmac Pillow imagehash
运行脚本
python screen_ocr.py
- 运行后,鼠标会变成截图光标。
- 框选屏幕上的字幕区域或文字区域。
- 脚本进入监控模式,识别到的文字会实时打印在终端,并保存在
screen_notes.md中。 - 按下
Ctrl + C即可结束监控。
5. 应用场景推荐
- 网课/视频学习:框选视频播放器,自动生成课程笔记。
- 直播监控:框选直播弹幕或礼物区域,记录互动数据。
- 老旧软件数据提取:对于那些没有 API 也没有导出功能的软件,直接监控屏幕数据区域。
6. 总结
screen_ocr.py 是一个典型的“小而美”的 Python 效率工具。它没有复杂的界面,却充分利用了 macOS 系统级的能力(原生截图与 Vision API),配合高效的算法(pHash),解决了一个高频的痛点。
如果你厌倦了手动打字记录,不妨试试这个脚本,让 AI 帮你做笔记!
作者:Boss 环境:macOS Sequoia, Python 3.12, M4 Pro