fix(avatar): 支持扫描型 PDF 知识库 OCR 索引 #22

Merged
stefanfeng merged 1 commits from codex/avatar-scanned-pdf-ocr-20260908 into main 2026-09-08 17:19:48 +08:00
Owner

问题根因

  • 安徽中医药大学_中医学基础.pdf 共 22 页,每页均为扫描图片,pypdf 与 pdfplumber 可提取文本均为 0。
  • 原索引器只读取 PDF 文本层,因此生产标记失败;测试环境运行 8 月 27 日旧镜像,缺少状态字段,前端错误地一直显示处理中。

修复内容

  • 普通 PDF 继续走原有快速文本提取,仅在文本层为空时启动扫描件 OCR。
  • 使用 PyMuPDF 逐页渲染并调用现有视觉 OCR 模型,完成后再切分和向量化。
  • 增加逐页重试、积分预留/结算与失败释放、80 页上限保护。
  • 页面显示扫描件识别阶段及实时进度。
  • 修复发布后,原失败文档可直接点击重新索引,无需重新上传。

验证

  • 真实 22 页文件验证:每页单图、文本层 0 字符,页面成功渲染为 1191x1684 JPEG。
  • 后端全量测试:123 passed,2 subtests passed。
  • 前端 vue-tsc 与 Vite 生产构建通过。
  • Python 编译及 git diff 校验通过。
## 问题根因 - `安徽中医药大学_中医学基础.pdf` 共 22 页,每页均为扫描图片,pypdf 与 pdfplumber 可提取文本均为 0。 - 原索引器只读取 PDF 文本层,因此生产标记失败;测试环境运行 8 月 27 日旧镜像,缺少状态字段,前端错误地一直显示处理中。 ## 修复内容 - 普通 PDF 继续走原有快速文本提取,仅在文本层为空时启动扫描件 OCR。 - 使用 PyMuPDF 逐页渲染并调用现有视觉 OCR 模型,完成后再切分和向量化。 - 增加逐页重试、积分预留/结算与失败释放、80 页上限保护。 - 页面显示扫描件识别阶段及实时进度。 - 修复发布后,原失败文档可直接点击重新索引,无需重新上传。 ## 验证 - 真实 22 页文件验证:每页单图、文本层 0 字符,页面成功渲染为 1191x1684 JPEG。 - 后端全量测试:123 passed,2 subtests passed。 - 前端 vue-tsc 与 Vite 生产构建通过。 - Python 编译及 git diff 校验通过。
stefanfeng added 1 commit 2026-09-08 16:44:52 +08:00
stefanfeng merged commit 62eb9578fd into main 2026-09-08 17:19:48 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: stefanfeng/huihuiSquare#22