Playbook

糊图变清晰:本地免费超分 + OCR 重绘(对比复盘)

2026-01-23 · 自用工作流 · 截图/信息图/小字优先

当“超分也不够清晰”时,把信息重建出来(而不是硬编像素)。

本次样例是一张 293×312 的低清动作网格截图:先试了传统锐化/对比增强(上限有限),再试 AI 超分(OpenCV DNN:EDSR×4/FSRCNN×4,本地 CPU 可跑,但 EDSR 内存很大),最后用 OCR 把可识别文字“重绘”回高清图层,显著提升可读性。

Local-First Free CPU Super-Resolution OCR Overlay R2 Hosted

TL;DR

结论:对“文字+线条”的截图/信息图,单纯锐化/超分都有上限;最稳的是 OCR/矢量重绘(让文字回到可编辑的字体),AI 超分更像“把底图放大变顺”。

  • 最简单(本地免费):OpenCV DNN FSRCNN×4(快、轻;提升清晰度但不“补字”)。
  • 最好看(本地免费但吃内存):OpenCV DNN EDSR×4 (质量更像“AI 修复”,但峰值 RSS ~1.45GiB)。
  • 最可读(截图小字)EDSR×4 →(可选)再放大×2 → OCR 重绘 (本次样例里,这是让小字真正“回到可读”的方法)。
Best For
截图小字
Best Method
OCR 重绘
Fastest
FSRCNN×4
Quality
EDSR×4

Best Minds

这类问题的“最懂的人”,通常来自三条线:① 超分/感知增强(SR、GAN);② 传统图像处理(锐化、去噪、反卷积、MTF);③ OCR/版式重建(把信息结构化)。

Super-Resolution / ESRGAN

Xintao Wang(Real-ESRGAN)

  • Thesis:真实世界退化(压缩、噪声、模糊)不是单一核;需要“盲超分/感知增强” 才能让细节看起来回来。
  • Arguments:GAN/感知损失能补“像细节”的纹理;对人眼观感往往比插值更明显。
  • Limits:对小字/符号可能会“编造笔画”;且高质量实现常依赖 GPU(本机 Vulkan/Metal 不可用时会卡住)。
Classical Image Processing

Peyman Milanfar(计算摄影/增强)

  • Thesis:大多数“变清晰”的上限由信息缺失决定;先稳住噪声/对比/锐化的纪律,避免过冲与假边。
  • Arguments:对截图/线稿,CLAHE、去噪+轻锐化、局部对比增强能快速抬升可读性且可控。
  • Limits:无法凭空恢复字体细节;越锐越容易出现光晕/振铃,视觉更“硬”但信息并未增加。
OCR / Layout

Ray Smith(Tesseract)

  • Thesis:当目标是“读懂文字”,最佳策略是把文字识别出来并以矢量/字体形式重建,而不是让像素猜。
  • Arguments:对低清截图,OCR 可以给出结构化文本;重绘后变成“真文字”,放大不糊、可编辑、可搜索。
  • Limits:识别受限于清晰度与语言模型;对极小字需要手工校对;复杂版式重建可能需要额外规则。

Options

方案 本次表现 优势 代价/风险 适用
传统增强(CLAHE/锐化/反卷积) 提升有限(上限到顶) 快;不“编细节”;可控 容易更刺眼;可能出光晕/假边 照片/截图都能“抬一点”
AI 超分(OpenCV DNN · EDSR×4) 观感明显更“像高清” 本地 CPU 可跑;质量更像 AI 修复 内存高;对小字可能不准 想要整体更顺/更细
AI 超分(OpenCV DNN · FSRCNN×4) 比 EDSR 弱但够快 极快;内存低;模型小 细节补全能力弱 批量处理/机器一般
AI 超分(Real-ESRGAN / waifu2x ncnn) 本机跑不通(驱动限制) 通常效果更强、生态成熟 依赖 Vulkan/Metal/CUDA 有 GPU 或驱动齐全
OCR/矢量重绘(文字层叠加) 小字可读性最佳 “真文字”;可编辑;放大不糊 需校对;只对文字有效 信息图/截图/表格

推荐默认:对“截图小字”优先走 EDSR×4 →(可选)×2 → OCR 重绘;对“真实照片”优先走 EDSR×4FSRCNN×4(避免 OCR 误判带来的“假信息”)。

Workflow

Step-By-Step
  1. 先做传统增强对比(确认“还能挖多少信息”):scripts/image_enhance_compare.py
  2. 跑 AI 超分(本地 CPU):OpenCV DNN EDSR×4 / FSRCNN×4
  3. 若目标是“读字”:从超分结果上 OCR 抽取高置信度文字,重绘为清晰字体层(可导出 SVG)
  4. 把关键结果(原图/传统/AI/OCR)上传 R2,生成可分享的对比页
  5. 把流程固化成一个默认 skill:一键复用
Input 低清截图 Traditional Enhance CLAHE / Unsharp AI Super-Res EDSR / FSRCNN OCR Overlay 文字重绘(SVG) Output 高清对比页
流程结构图:先确认传统增强上限,再用 AI 超分扩大底图,最后用 OCR 把“信息”重建成真文字。

Results

本次对比图已上传到 R2:image-upscale/scapula-control/20260123-175739(点击图片可全屏放大)。

Original (293×312)
Original · 293×312 · 105KiB · R2
OCR overlay x8 (2344×2496)
OCR Text Overlay ×8(最佳可读)· 2344×2496 · 2.9MiB · R2
Traditional CLAHE+Unsharp x8 (2344×2496)
Traditional(OpenCV CLAHE+Unsharp)×8 · 2344×2496 · 4.3MiB · R2
AI Super-Resolution EDSR x4 (1172×1248)
AI Super-Resolution(OpenCV DNN · EDSR×4)· 1172×1248 · 1.5MiB · R2
AI Super-Resolution FSRCNN x4 (1172×1248)
AI Super-Resolution(OpenCV DNN · FSRCNN×4)· 1172×1248 · 1.6MiB · R2
AI pipeline x8 (EDSR x4 then x2) (2344×2496)
AI Pipeline ×8(EDSR×4 → 再×2)· 2344×2496 · 5.1MiB · R2

Bench

Memory & Time (Observed)

这是本机实测(pyenv Python 3.10 + OpenCV),不同机器会变,但相对量级很稳定: EDSR 更吃内存,FSRCNN 极快。

EDSR ×4
~10.7s
FSRCNN ×4
~0.24s
EDSR ×4
~1.45GiB
FSRCNN ×4
~207MiB
Model Size
EDSR ×4
37MiB
FSRCNN ×4
41KiB
FSRCNN ×2
38KiB
Output (×8)
2.9–5.1MiB

CPU 情况:本次没有做精确 CPU% 采样;但 SR 推理是明显 CPU-bound 的短任务(EDSR 更重)。 若你要批量跑,优先 FSRCNN 或限制并发。

Constraints

GPU Route Failed (This Machine)

Real-ESRGAN-ncnn-vulkan / waifu2x-ncnn-vulkan 在本机报 Vulkan/Metal 兼容问题(MoltenVK VK_ERROR_INCOMPATIBLE_DRIVER),因此本次 AI 路线采用 OpenCV DNN(CPU 可跑)。

Python Env

系统 Python 3.12 无 cv2;本次用 pyenv 的 Python 3.10 + OpenCV 来跑 SR。后续 skill 会做解释器自检与回退。

Repro

Traditional Compare (Local)
python3 scripts/image_enhance_compare.py --in tmp/scapula.png --scales 4,8 --html docs/image-upscale-compare

会生成一份 data-URI 内嵌对比页(本地查看很方便,但不适合部署到 Vercel)。

R2 Upload
node 8_Workflow/video/OLDLIFEASSONG/TOOLS/cartoon/upload-to-r2.js \\
  --src tmp/r2-upload/image-upscale-scapula/20260123-175739 \\
  --bucket pic \\
  --prefix image-upscale/scapula-control/20260123-175739

需要预先配置 Cloudflare 账号/Token(脚本会读对应 .env);上传后会在同目录写入每个文件的 *.json(记录 public URL)。

Next Action

把它变成“默认一键技能”。下一步:把本次最佳流程封装成 skill(输入图片路径 → 产出 EDSR×4 / FSRCNN×4 / OCR overlay + 对比页;可选上传 R2),以后直接 $image-upscale-best 调用。

Closing summary:当目标是“读清楚”,请优先重建信息(OCR/矢量/重排版);当目标是“看起来更清晰”,才把超分当主力。