大家好,我是何三,独立开发者

OCR 这东西,说简单也简单,说难也难。简单的是——随便一个手机 App 都能扫名片。难的是——你真要用它扫一本 200 页的 PDF,你就等着被气死吧。

一页一页截,一页一页等,时不时还吐几行乱码给你。输出结果东拼西凑,页码都对不上。

所以当我看到百度开源的 Unlimited-OCR 时,第一反应不是"牛逼",而是——

等等,你说一次性解析整本 PDF?

对,没看错。不是一页一页来,是一口气读完一整本。max_length 干到了 32,768 个 token——说白了,这玩意儿能一口气往外吐差不多 3 万字,够写一篇本科毕业论文了。

这个项目 6 月 18 号才上线,到今天不到 10 天,已经快 8 千 Star 了。

概念对比

原理?其实就是把整本书当一张图看

传统 OCR 怎么干的?把 PDF 拆成一张一张图片,每张丢进模型识别,识别完了再拼回去。听起来没啥问题对吧?

但问题大了去了——页码之间的上下文是割裂的。前一句在讲"张三签署了合同",下一页的模型不知道"张三"是谁。

Unlimited-OCR 的思路很野:它直接把整本 PDF 的所有页面拼成一个 "超长视野",在这个视野里一次性完成识别。

大白话翻译就是——别人是读一页忘一页,它是把整本书摊在桌上,一目十行全部看完。

说实话,这块的实现细节我没完全搞懂。论文里说用了什么"动态分辨率"和"长视野注意力机制",我扫了一眼就觉得脑仁疼——但效果是实打实的,这就够了。

说到这个我突然想起来,当年百度开源 PaddleOCR 的时候我也写过一篇推荐。那会儿 PaddleOCR 主打的是"中文 OCR 最强",但处理长文档还得靠人手动分页。没想到几年后百度自己把这个坑填上了——同一个团队,从 PaddleOCR 到 Unlimited-OCR,一个"长视野"直接把分页这件事给干掉了

怎么跑?装好就能用

官方给了两套方案:HuggingFace TransformersSGLang

Transformers 版本最友好,几行代码搞定:

from transformers import AutoModel, AutoTokenizer

model = AutoModel.from_pretrained(
    'baidu/Unlimited-OCR', 
    trust_remote_code=True
)
model = model.eval().cuda()

model.infer(
    tokenizer,
    prompt='<image>document parsing.',
    image_file='你的扫描件.jpg',
    output_path='./output',
    max_length=32768,
)

跑完直接在 output 目录拿到完整的 Markdown 格式文本。

要是整本 PDF 呢?也不慌,README 里给了现成的 pdf_to_images 函数,转成图片后调 infer_multi 一次搞定。

更省事的是,Hugging Face 上已经有在线 Demo 了,浏览器打开就能试,连显卡都不用。

代码示例

同类工具,各有千秋

说到 OCR,目前开源圈绕不开的就是 DeepSeek-OCR。DeepSeek 那版在单图识别上确实强,但处理长文档时"记忆窗口"有限。

Unlimited-OCR 的思路类似于——给模型装了个 "外挂记忆条",让它可以记住前面 100 页的内容。

如果你需要的是国产 OCR 全家桶,百度的 PaddleOCR 依然是中文文档识别的一哥,但要说"一次性干翻整本 PDF",现在 Unlimited-OCR 是独一份。

GitHub 地址: https://github.com/baidu/Unlimited-OCR

总结一下

百度这次开源的 Unlimited-OCR,解决了一个特别痛但又特别具体的问题——整本 PDF 一次搞定。不需要装虚拟机,不需要按页截图,不需要手动拼接结果。一个模型,一段代码,完事。

适合谁用?经常处理论文、合同、扫描件的朋友,真的可以试试。

本文使用 MGO 编辑并发布

关注"何三笔记",回复"mgo" 免费下载使用