深色 IDE 截图 OCR 老是漏字,我加了一层预处理,顺手把识别结果做成了可搜索历史

1 阅读3分钟

系统自带的截图取字其实已经够用了。Windows 11 截图工具的「文本操作」、PowerToys 文本提取器,白底黑字抠几个字完全没问题;Umi-OCR 更是把批量、PDF、翻译都做全了。所以这篇不是劝谁换工具,只讲两个我反复踩到、现有工具不太顺手的场景,以及为此写的一个开源小工具。

一、深色截图为什么容易整行漏掉

我的编辑器、终端、大部分技术文档都是深色主题。框选一段代码或一段报错栈,常规 OCR 经常整行漏掉,或者只识别到一半。

原因不复杂:检测模型基本是按「白底黑字」训练的,深色背景配浅色字不在它的舒适区。以前的土办法是截图 → 丢进图片工具反色 → 再拿去识别,三步,还经常调不好对比度。

我在送进模型之前加了一层预处理,全部是本地图像运算:

  • 整图平均灰度 < 100 → 自动反色
  • 灰度标准差 < 45(浅灰字、水印字、低对比 UI)→ 对 LAB 的 L 通道再跑一次 CLAHE
  • 小选区放大 2–3 倍 再送进模型

深色截图预处理前后的真实像素对比

右图是代码里 _enhance() 对左图跑出来的真实像素结果,不是画的示意图。我故意没放「识别结果对比」——挑一张对自己有利的截图当准确率证据没什么意思,欢迎拿自己的深色截图实测。

二、剪贴板只记得最后一次

识别完粘贴到别处,过半小时想再要那段文字,只能重新截一次。现在每次识别都存进历史:关键词即时过滤、鼠标悬停浮窗看全文、双击再次复制,也能一键导出 txt / docx / pdf / md / xlsx。

改动很小,但用起来差别很大。

15 秒串联演示:框选识别 → 历史搜索 → 定格

顺手做的功能

文件夹拖入批量队列(去重、上限 500 张)、PDF 逐页识别(带进度、可取消)、表格框选转 Excel、滚动长截图拼接、截图贴图钉在桌面、框选即译(11 种语言)。

识别引擎是 RapidOCR / PP-OCRv6,栈是 Python 3.12 + PySide6 + onnxruntime + OpenCV。1080p 全屏 CPU 大约 7 秒,小区域基本秒出。

几个不想含糊的地方

  • 目前只有 Windows 10/11 x64 有可直接运行的二进制;Linux / macOS 可跑源码,但全局热键要 sudo 或辅助功能授权,长截图依赖 Win32 直接不可用。没有 macOS 版。
  • 单文件 exe 约 160 MB,每次启动都要自解压;所以另外出了 onedir 结构的 7z 绿色包(约 114 MB),解压一次,之后直接运行、删文件夹即卸载。
  • 程序未做代码签名,首次运行 Windows 会弹 SmartScreen。Release 页附了 SHA-256,介意的话可以 pip install -r requirements.txt && python entry.py 从源码跑。
  • 离线声明说准:内置简体中文模型,默认识别全程在本机完成、不上传任何数据;首次切换到繁中 / 英 / 日 / 韩时会联网下载对应识别模型(只下载、不上传),之后离线可用。另一处联网是可选的截屏翻译(文本发给必应翻译 / MyMemory,可在设置里关闭)。

最有用的反馈

不是劝谁换工具,系统自带的够用就继续用。如果你也常在深色 IDE 里抠代码,或者需要回头找之前识别过的内容,可以试试。

如果某个截图识别失手,最有用的反馈是:原始截图(去掉敏感信息)+ 你期望的文本 + Windows 版本,提到 issue 里,我照着调预处理参数。

(叫 SnapOCR 的项目有好几个,这个是 q037180/SnapOCR。)