百度开源 Unlimited-OCR:长文档 OCR 一次搞定(保姆级上手)

百度开源 Unlimited-OCR:长文档 OCR 一次搞定,保姆级上手
做文档处理的朋友应该都有体会:单个名片、发票类的 OCR,现在工具基本都能搞定;可一旦遇到几十页的 PDF、厚厚一叠扫描件、排版复杂的书籍/合同,大多数方案就开始吃力了。
今天分享我们一直在关注的一个开源项目——百度出品的 Unlimited-OCR。它在 GitHub 上已经涨到 22,258 颗星、2,255 个 Fork(MIT 协议,可免费商用),目标就一句话:一次性搞定长文档 OCR。
老问题:长文档 OCR 为什么这么难?
传统方案的常规操作是:逐页截图 → 逐页调 OCR → 手动合并结果。遇到表格和图片混排的文档,版面分析还会各种翻车。
哪怕是公认效果最好的 DeepSeek-OCR,处理长文档时也有一个硬伤:随着输出变长,KV 缓存越来越大,生成速度越来越慢,几十页跑到后面几乎走不动,最后只能手动拆分、分页处理。
Unlimited-OCR 要解决的,正是这个"长文档越跑越慢"的核心问题。
它牛在哪:一个巧妙的注意力机制
论文(arXiv:2606.23050)里讲得很清楚。Unlimited-OCR 以 DeepSeek-OCR 为底座,做了一个关键改动——用 Reference Sliding Window Attention(R-SWA,参考滑动窗口注意力) 替换了解码器里的所有注意力层。
简单理解:人抄一段长文本时,并不会反复回头把整页重新读一遍,而是**聚焦在最近写的内容 + 一个固定的"参考窗口"**上。R-SWA 就是模拟这种阅读工作记忆,把注意力限制在滑动窗口和参考窗口里,让 KV 缓存在整个生成过程中保持恒定大小。
结果就是:它在标准 32K 上下文下,能一次完成几十页文档的转录,而不会像传统方案那样越跑越慢。而且论文提到,R-SWA 思维是个通用的注意力机制,未来也适用于 ASR、翻译等任务。
怎么上手?三条路任选
1. 在线 Demo(不用装环境,先看效果)
最省事的方式:直接打开 Hugging Face Space 在线 Demo(huggingface.co/spaces/baidu/Unlimited-OCR),把图片或 PDF 丢进去就能看到一次解析的效果,适合先尝鲜验证。
2. Transformers 本地快速上手
用 Hugging Face Transformers 最直接,两种模式区分很清晰:
- gundam 模式(base_size=1024,image_size=640,crop_mode=True)——适合单张高精度解析,会做裁剪处理;
- base 模式(image_size=1024,crop_mode=False)——适合 PDF 多页解析,全局视图。
先装依赖(测试环境:Python 3.12 + CUDA 12.9 + PyTorch):
pip install torch torchvision transformers Pillow pymupdf
单图解析:
from transformers import AutoModel, AutoTokenizer
import torch
model_name = 'baidu/Unlimited-OCR'
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModel.from_pretrained(
model_name, trust_remote_code=True,
use_safetensors=True, torch_dtype=torch.bfloat16,
).eval().cuda()
# 单张高精度(gundam 模式)
model.infer(
tokenizer,
prompt='<image>document parsing.',
image_file='your_image.jpg',
output_path='your/output/dir',
base_size=1024, image_size=640, crop_mode=True,
max_length=32768,
)
多页 / PDF 只走 base 模式——仓库里还内置了 PDF 转图片工具,直接把 PDF 页转成图片后一次解析:
# PDF 多页解析(base 模式,image_size=1024)
model.infer_multi(
tokenizer,
prompt='<image>Multi page parsing.',
image_files=['page1.png', 'page2.png', 'page3.png'],
output_path='your/output/dir',
image_size=1024, max_length=32768,
)
3. vLLM / SGLang 部署(生产环境)
需要高吞吐的服务化场景,可以用 vLLM(官方 recipe:recipes.vllm.ai/baidu/Unlimited-OCR,有 Docker 镜像)或 SGLang 起一个 OpenAI 兼容 API,支持 streaming 输出。仓库还给了 infer.py 一键批量推理脚本,对图片目录或 PDF 做并发推理。
适合谁用?
- 有大量文档数字化需求的开发者——合同、档案、书籍扫描,一次 OCR 搞定;
- 做文档管理 / 内容管理产品的团队——集成进产品提升文档处理能力;
- 日常需要处理 PDF 和扫描件的用户——丢进去就出结果;
- 研究 OCR / NLP 方向的学生学者——论文和代码是很好的学习材料;
- 企业做文档智能化转型——合同审核、票据识别、档案数字化等。
几个要注意的点
- 硬件:NVIDIA GPU + CUDA 12.9,建议显存 8GB 以上;
- 模型权重约几个 GB,需要足够网络和磁盘空间;
- SGLang 部署有一些前置依赖和 wheel 安装步骤,生产环境建议仔细看仓库文档再配。
相关链接
- GitHub 仓库:github.com/baidu/Unlimited-OCR
- 论文:arxiv.org/abs/2606.23050
- 在线 Demo:huggingface.co/spaces/baidu/Unlimited-OCR
- ModelScope(国内下载更快,点此注册即可):modelscope.cn/models/PaddlePaddle/Unlimited-OCR —— 国内用户如果下载 Hugging Face 不方便,走 ModelScope 更快。注册入口 →
总结:如果你一直被"长文档 OCR 分页、拼接、越跑越慢"折磨,Unlimited-OCR 值得一试——轻量开源、MIT 可商用、一次解析几十页,还有在线 Demo 可以先体验,模型权重也能从 ModelScope 国内快速下载。需要批量处理 PDF 的开发者,强烈建议收藏这个项目。