百度开源 Unlimited-OCR:一次识别整篇文档,告别逐行扫描时代

百度开源 Unlimited-OCR:一次识别整篇文档,告别逐行扫描时代

已打包好,国内可直接网盘下载源码: 夸克网盘(提取码:dcWH)

拿到一份 50 页的 PDF 合同,需要把关键条款摘出来,结果 OCR 工具只能一行一行识别,识别完还要手动拼回段落结构,格式全乱了。

或者更惨------扫描的发票、表格、手写笔记混在一起,传统 OCR 直接放弃治疗,识别出来的东西像天书。

百度最近开源的 Unlimited-OCR,就是冲着这些痛点来的。GitHub 上线不到两个月,已经拿下 21000+ Star,热度直接拉满。

它到底能干什么?

简单说,Unlimited-OCR 做的事情是一次性把整页甚至整份文档识别出来,不是逐行扫描,而是直接理解文档的版面结构,输出带格式的完整内容。

核心能力:

  • 单页高精度识别:支持 gundam(裁切增强)和 base 两种模式,单张图片最高支持 1024 分辨率
  • 多页连续识别:多张图片或 PDF 一次性送入,跨页内容自动关联
  • 版面结构保留:标题、段落、表格、列表等结构信息不丢失
  • PDF 直出:内置 PyMuPDF 转换,PDF 直接进,Markdown 出来

这跟传统 OCR 的区别在哪?传统方案是"识别文字 → 后处理排版",Unlimited-OCR 是"理解版面 → 输出结构化内容",思路完全不同。

快速上手:5 分钟跑起来

环境准备

推荐 Python 3.12 + CUDA 12.9,依赖如下:

bash 复制代码
pip install torch==2.10.0 torchvision==0.25.0
pip install transformers==4.57.1
pip install Pillow==12.1.1 matplotlib==3.10.8
pip install einops==0.8.2 addict==2.4.0 easydict==1.13
pip install pymupdf==1.27.2.2 psutil==7.2.2

单张图片识别

python 复制代码
import torch
from transformers import AutoModel, AutoTokenizer

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,
)
model = model.eval().cuda()

# gundam 模式:裁切增强,适合复杂版面
model.infer(
    tokenizer,
    prompt='<image>document parsing.',
    image_file='contract_page1.jpg',
    output_path='./output',
    base_size=1024, image_size=640, crop_mode=True,
    max_length=32768,
    no_repeat_ngram_size=35, ngram_window=128,
    save_results=True,
)

两种模式怎么选?

模式 base_size image_size crop_mode 适用场景
gundam 1024 640 True 单页复杂版面,表格、多栏混排
base 1024 1024 False 多页文档,简单版面

多页 PDF 识别

这才是 Unlimited-OCR 的杀手级功能------多页文档一次性解析:

python 复制代码
import os
import tempfile
import fitz  # PyMuPDF

def pdf_to_images(pdf_path, dpi=300):
    doc = fitz.open(pdf_path)
    tmp_dir = tempfile.mkdtemp(prefix='pdf_ocr_')
    mat = fitz.Matrix(dpi / 72, dpi / 72)
    paths = []
    for i, page in enumerate(doc):
        out = os.path.join(tmp_dir, f'page_{i+1:04d}.png')
        page.get_pixmap(matrix=mat).save(out)
        paths.append(out)
    doc.close()
    return paths

# PDF → 图片列表 → 多页解析
model.infer_multi(
    tokenizer,
    prompt='<image>Multi page parsing.',
    image_files=pdf_to_images('contract.pdf', dpi=300),
    output_path='./output',
    image_size=1024,
    max_length=32768,
    no_repeat_ngram_size=35, ngram_window=1024,
    save_results=True,
)

注意多页模式只能用 base 配置(image_size=1024),ngram_window 也要调大到 1024,防止跨页内容重复。

生产部署:vLLM + Docker

单卡推理够用,但生产环境肯定要上 vLLM 加速。官方已经提供了 Docker 镜像,开箱即用:

bash 复制代码
# CUDA 13.0
docker pull vllm/vllm-openai:unlimited-ocr

# Hopper GPU (CUDA 12.9)
docker pull vllm/vllm-openai:unlimited-ocr-cu129

启动后直接走 OpenAI 兼容 API,对接现有系统零成本。

SGLang 部署:高并发场景

如果并发量更大,SGLang 是另一个选择。它支持流式输出和自定义 logit processor,适合批量处理:

bash 复制代码
# 安装 SGLang
uv venv --python 3.12
source .venv/bin/activate
uv pip install wheel/sglang-0.0.0.dev11416+g92e8bb79e-py3-none-any.whl
uv pip install kernels==0.11.7
uv pip install pymupdf==1.27.2.2

# 启动服务
python -m sglang.launch_server \
    --model baidu/Unlimited-OCR \
    --served-model-name Unlimited-OCR \
    --attention-backend fa3 \
    --page-size 1 \
    --mem-fraction-static 0.8 \
    --context-length 32768 \
    --enable-custom-logit-processor \
    --disable-overlap-schedule \
    --skip-server-warmup \
    --host 0.0.0.0 \
    --port 10000

批量推理脚本也准备好了:

bash 复制代码
# 图片目录批量处理
python infer.py \
    --image_dir ./examples/images \
    --output_dir ./outputs \
    --concurrency 8 \
    --image_mode gundam

# PDF 批量处理
python infer.py \
    --pdf ./examples/document.pdf \
    --output_dir ./outputs \
    --concurrency 8 \
    --image_mode gundam

跟 DeepSeek-OCR 有什么区别?

Unlimited-OCR 明确说了是站在 DeepSeek-OCR 肩膀上往前走了一步。关键差异:

1. 长文档能力

DeepSeek-OCR 主要处理单页,Unlimited-OCR 原生支持多页连续解析,跨页内容自动衔接。这是最大的区别。

2. 重复抑制

引入了 no_repeat_ngram_size + ngram_window 机制,长文本生成时不会出现重复段落。这个参数很关键------单页用 128,多页用 1024。

3. 裁切增强模式

gundam 模式通过裁切策略提升复杂版面的识别精度,这是 DeepSeek-OCR 没有的。

4. 生态支持

百度云、ModelScope、vLLM、SGLang、ms-swift 全都接上了,部署路径比 DeepSeek-OCR 丰富得多。

实战踩坑记录

坑 1:显存不够

模型用的是 bfloat16 精度,单卡至少需要 40GB 显存(A100/A800 级别)。显存不够的话,考虑用 vLLM 的量化部署或者百度云 API。

坑 2:ngram 参数调错

单页场景 ngram_window=128 就够,多页必须调到 1024。调小了会出现段落重复,调大了影响生成速度。别偷懒用默认值。

坑 3:PDF DPI 选择

pdf_to_images 里的 DPI 参数,300 是推荐值。200 以下识别精度明显下降,600 以上显存占用翻倍但精度提升有限。别盲目拉高。

坑 4:输出格式处理

模型输出可能包含 <|det|> 标记(版面检测信息),需要后处理去掉:

python 复制代码
import re

DET_RE = re.compile(r'<\|det\|>([^<\s]+)(?:\s*\[[^\]]*\])?\s*<\|/det\|>(.*)', re.DOTALL)

def remove_det(raw: str) -> str:
    blocks = []
    cur = None
    for line in raw.splitlines():
        line = line.rstrip()
        if not line:
            continue
        m = DET_RE.match(line)
        if m:
            category, content = m.group(1).strip(), m.group(2).strip()
            if category == 'image':
                continue
            if cur is not None:
                blocks.append(cur)
            cur = [content] if content else []
            continue
        if cur is None:
            cur = []
        cur.append(line)
    if cur is not None:
        blocks.append(cur)
    return '\n\n'.join('\n'.join(b) for b in blocks).strip()

适用场景总结

场景 推荐配置 说明
合同/法律文档 gundam + 单页 版面复杂,需要精确识别
学术论文 base + 多页 格式统一,跨页引用多
发票/收据 gundam + 单页 表格密集,精度优先
书籍扫描 base + 多页 页数多,需要连续解析
手写笔记 gundam + 单页 手写体识别需要裁切增强

写在最后

Unlimited-OCR 的意义不只是"又一个 OCR 工具",它代表了一个方向:从逐行识别到整页理解。当模型能直接理解文档结构,OCR 就不再是"识别文字"的活,而是"理解文档"的活。

对于开发者来说,MIT 协议 + 多种部署方案 + 完善的生态支持,上手成本很低。如果你在做文档处理相关的项目,值得认真试试。

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

论文:https://arxiv.org/abs/2606.23050

HuggingFace 模型:https://huggingface.co/baidu/Unlimited-OCR


已打包好,国内可直接网盘下载源码: 夸克网盘(提取码:dcWH)

相关推荐
小弥儿2 小时前
GitHub今日热榜 | 2026-08-01:硬件安全工具与AI教育并行
人工智能·学习·开源·github
vipjx23 小时前
百度网盘不限速原理解析:如何合法合规提升你的网盘下载速度
开源
a1117764 小时前
中文优先的企业 RAG 知识库 开源项目
开发语言·开源·kotlin
TunerT_TQ4 小时前
Valhalla 静态工程审阅 #009|Continue 源码证据驱动评测【大厂开源基础设施特辑】
vscode·测试工具·开源·llm·github·jetbrains·ai编程助手
TunerT_TQ4 小时前
Valhalla 静态工程审阅 #008|RisingWave 源码证据驱动评测【大厂开源基础设施特辑】
rust·开源·github·实时数据处理·流式数据库·apacheflink·streamingsql
带娃的IT创业者6 小时前
Inkling:当开源模型开始思考“如何思考”
人工智能·开源·大语言模型·多模态·moe·开源模型·inkling
在水一缸6 小时前
KOReader:当开源精神遇上电子墨水屏,一场阅读体验的静默革命
开源·开源项目·电子墨水屏·极客·kindle·koreader·阅读体验
余俊晖7 小时前
再看多模态OCR视觉token裁剪思路-LayoutLite基于token的隐式布局分析
人工智能·ocr·多模态
fthux8 小时前
装闭 RenoPit 源码解析(13):生成AI装修闭坑PDF报告
人工智能·ai·pdf·开源·github