Skip to content

识别扫描的 PDF 里的文字 - #103

Merged
JunieXD merged 1 commit into
mainfrom
scanned-pdf-ocr
Nov 14, 2026
Merged

JunieXD merged 1 commit into
mainfrom
scanned-pdf-ocr

Conversation

@JunieXD

@JunieXD JunieXD commented Nov 14, 2026

Copy link
Copy Markdown
Contributor

关联

Closes #47

改了什么

图片附件的识别已在 #74 合并,这个 PR 接上 #47 剩下的扫描的 PDF:有的通知把文件扫描成 PDF 挂出来,pypdf 取不出文字,抽取就看不到。

  • PDF 的某一页取不出文字时,用 pypdf 取出这一页上的图片,交给 实现图片附件的文字识别 #74 的文字识别。扫描件一页就是一张图片,取出来的就是扫描时的原图,不另加渲染页面的库。
  • pypdf 解出图片要用 Pillow,依赖写成 pypdf[image];Pillow 已经随 RapidOCR 装上,锁定的版本都不变。
  • 结果写进总体设计 §5.2,§5.1、§7.4、§16 跟着改,§18 去掉「扫描的 PDF 用哪个库渲染成图片」。

怎么验证的

  • 扫描件少见:从 45 个来源最近的通知里取到 13 个 PDF,又从网上搜到 13 个高校推免通知的 PDF,全都有文字层。每个文件只下载一次,都没有提交进仓库。
  • 挑出 8 份,把前两页渲染后存成三种扫描件(彩色 JPEG 200 dpi、黑白 300 dpi、页面转了 90 度),用这个分支构建的镜像,在 --cpus=4 --memory=3600m --network none 的容器里识别。其中 5 份有日期、时刻、网址和邮箱,共 18 项,空格不计:彩色认对 17 项,黑白 16 项,转过的 14 项;峰值内存最高 745 MiB。黑白的图片用 CCITT 压缩,镜像里能解开。
  • 原来的中文图片测试改成同一张图存成 PNG 和 PDF 各测一次:Pillow 存的 PDF 和扫描件一样,一页一张图、没有文字层。crawler/check.sh 通过,338 个测试。

影响

  • 没有文字层的 PDF 附件现在有文字了;一页识别几秒,同一时刻仍只识别一张。
  • 用 JBIG2 压缩的黑白扫描件,pypdf 要另装 AGPL 许可的解码程序才能解开,镜像里不装;这种附件和别的坏附件一样记一条日志、文字留空。
  • 接口、MCP 工具和表结构不变。

有的通知把文件扫描成 PDF 挂出来,pypdf 取不出文字,抽取就看不到(#47)。

- PDF 的某一页取不出文字时,用 pypdf 取出这一页上的图片,交给图片附件用的文字识别;扫描件一页就是一张图片,不另加渲染页面的库
- pypdf 解出图片要用 Pillow,依赖写成 `pypdf[image]`,锁定的版本不变
- 把真实通知做成扫描件,在限成 4 核、3600 MiB 的容器里实测,结果写进总体设计 §5.2;§5.1、§7.4、§16 跟着改,§18 去掉这一项
@JunieXD
JunieXD merged commit a2820e5 into main Nov 14, 2026
2 checks passed
@JunieXD
JunieXD deleted the scanned-pdf-ocr branch November 14, 2026 07:40
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