wechat-robot-skills/skills/pdf/references/reading-and-ocr.md
2026-09-09 12:30:35 +08:00

45 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 原生文本、OCR 与模型辅助复核
## 识别顺序
1. `inspect_pdf.py` 检查页数与加密状态;`extract_text.py` 分批检查原生文本。
2. 可靠原生文字直接使用。对 `text_quality.suspect_pages` 调用本地 `ocr_text.py`,普通扫描件不先做整本图片识别。
3. PDF 任务中的单张截图、扫描图片用 `ocr_image.py`。文字识别以 OCR 为主,大模型用于具体疑难内容的辅助判断。
4. OCR 返回 `needs_review`、低置信度区域,或文字与表格结构/阅读顺序冲突时,先按原图质量合理提高 DPI(最多 400)。仍有疑问或涉及手写、复杂公式、图表、印章时,用 `render_pdf.py` 只渲染相关页,通过当前环境实际可用的图像查看/识别能力辅助复核。可使用已安装的 image-recognition skill;不能虚构工具或识别结果。
5. 复核时提供页码、待判断问题与 OCR 候选,区分“确认原文”“模型推测”“无法辨认”。不要让模型补写看不见的金额、账号、日期或姓名。辅助结果不能覆盖其他页已可靠提取的文字。
`needs_ocr: false` 表示原生文字无明显问题,不代表图中的趋势、流程、版式和关系已经被理解。任务需要这些非文本信息时可以按需查看相关页,不重复 OCR 全文。
## PDF 页 OCR
通过 `execute_skill_script` 调用 `scripts/ocr_text.py`,仅传参数:
```text
--input '/usr/local/src/pdf/tmp/task/source.pdf' --pages '2,5-6'
```
- 页码从 1 开始,一次最多 4 页;默认 260 DPI,允许 150–400,单页渲染不超过 2000 万像素。
- `--timeout` 是每页渲染超时,默认 180 秒,范围 1–600。
- 默认 `--max-chars 24000`,最高 60000。
- 字符游标:`next_offset > 0` 时用 `--pages <next_page> --start-offset <next_offset>` 续读该页;`next_offset = 0` 时用 `remaining_pages` 继续。单页续读结束后仍要继续先前未处理的页面。
- 使用镜像内 RapidOCR/ONNX 模型。固定脚本明确指定本地模型路径,缺少模型立即失败,不触发下载。渲染 PNG 只在脚本内部临时使用,完成即清理。
## 单张图像 OCR
调用 `scripts/ocr_image.py`:
```text
--input '/usr/local/src/pdf/tmp/task/scan.png'
```
支持 PNG/JPEG/WebP/TIFF/BMP,最大 25 MiB、2000 万像素、单帧;自动按 EXIF 调整方向。`--max-chars` 和 `--start-offset` 用于续读可靠文本。多页 TIFF 不默默只读首帧,应先得到按页文件或 PDF。
## 结果解读
- 仅使用 `usable_for_summary: true` 的 `text` 作为正文。`empty/sparse/low_confidence` 不等于空白页面;需要核验。
- 单行置信度低于 0.60 的文字不会混入可靠正文,即使整页平均置信度很高。`review_regions` 给出 `text_candidate`、置信度和像素框;这些是**待核验候选**,不能当事实。
- `needs_review: true` 可能与 `usable_for_summary: true` 同时出现:表示该页有可用文字,也有未确认区域。`complete_ocr_coverage` 只有全部请求页处理完成且无需复核时才为真。
- `review_regions` 最多返回 40 个,每段候选最多 500 字;截断时有显式标记。需要完整复核时查看对应原图,不把列表上限误认为没有其他疑点。
- OCR 的阅读顺序按几何位置排序,多栏、跨栏标题或复杂表格不保证逻辑顺序。表格先尝试 `extract_tables.py`;扫描表格用 OCR 字框对齐并核验行列、表头、合计,不把平铺文字直接当结构化表格。
- 引用使用真实 PDF 页码;记录实际阅读/识别范围,不能只处理前几页就声称已覆盖全文。