Skip to content

feat(tools): OCR 环境自解析,不再依赖 PATH 与重启 - #11

Merged
ADC1920 merged 1 commit into
mainfrom
feat/ocr-autodetect
Nov 9, 2026
Merged

ADC1920 merged 1 commit into
mainfrom
feat/ocr-autodetect

Conversation

@ADC1920

@ADC1920 ADC1920 commented Nov 9, 2026

Copy link
Copy Markdown
Owner

背景

装完 tesseract 之后 check_image.py 的 OCR 仍然是 skipped。原因有两个,都不是「没装」:

  1. winget 装的 UB-Mannheim 版本把 exe 放在 C:\Program Files\Tesseract-OCR\,但没写进 PATH(机器级和用户级都没有)
  2. 默认 tessdata 只有 eng 和 osd,缺 chi_sim;而 C:\Program Files 不可写,中文包只能放用户目录

更关键的是:已运行的进程改不了环境变量。往用户 PATH 写了 C:\Program Files\Tesseract-OCR,也得重开会话才生效。让用户为了跑一次 OCR 去重启,不合理。

改动

  • 新增 resolve_ocr_env():先 shutil.which,再扫 Windows / macOS / Linux 的常见安装路径
  • 默认 tessdata 缺 chi_sim 时,去找用户级 tessdata(%LOCALAPPDATA%\tesseract\tessdata 等)并设 TESSDATA_PREFIX;环境里已显式设过的不覆盖
  • OCR 段补异常兜底:语言包缺失这类错误不再冒泡,降级为 skipped 并给出原因,不假装通过
  • README 的「已知限制」同步改写

验证

在 PATH 里没有 tesseract、TESSDATA_PREFIX 为空的进程里跑:

OCR: {"status": "done", "lines": 3, "sample": ["限时特惠", "免费试用", "FREE SHIPPING"]}

同一进程里 --selftest 的 4 组用例仍全部通过。

影响面

只改 check_image.py 的 OCR 分支,其余检查项与 --fix 逻辑不动;OCR 不可用时行为与之前一致(skipped + 原因)。

装了 tesseract 却仍报 skipped 的真实原因:装机版把 exe 放到 Program Files 但没写进 PATH;中文语言包默认 tessdata 里也没有。已运行的进程环境变量改不了,只能让脚本自己找。

- 新增 resolve_ocr_env():先 shutil.which,再扫 Windows/macOS/Linux 常见安装路径
- 默认 tessdata 缺 chi_sim 时,去找用户级 tessdata 并设 TESSDATA_PREFIX;显式设过的不覆盖
- OCR 段补异常兜底:语言包缺失等错误不再冒泡,降级为 skipped 并给原因
- README 已知限制同步改写

验证:在 PATH 无 tesseract、TESSDATA_PREFIX 为空的进程里跑,OCR 从 skipped 变为 done,识别出中英三行文字;--selftest 4 组仍通过。
@ADC1920
ADC1920 merged commit 749832c into main Nov 9, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant