# Unlimited-OCR: как распознать целую книгу за один проход

Ставишь открытую модель Unlimited-OCR от Baidu и распознаёшь многостраничный PDF целиком за один проход - без нарезки на куски. Ниже ссылки, установка одной командой и готовый скрипт.

// Что это

## Почему эта модель, а не обычный OCR

Обычные OCR-модели режут длинный документ на куски и теряют нить между страницами. Unlimited-OCR читает весь документ целиком, хоть целую книгу, за один проход. Сделана на основе DeepSeek-OCR и на длинных документах сильно его обгоняет.

- 3 миллиарда параметров, но за один проход работают только 500 миллионов - поэтому модель лёгкая
- Reference Sliding Window Attention (R-SWA): читает локально, но держит контекст всего документа
- Из коробки берёт одну картинку, пачку страниц или целый PDF
- Открытая, лицензия MIT

// Шаг 1

## Установка одной командой

Короткий вариант из ролика - три пакета:

```
pip install torch transformers pymupdf
```

_Минимальный набор: PyTorch, Transformers и PyMuPDF для PDF_

Если что-то не заводится - ставь ровно те версии, на которых модель проверяли авторы:

```
pip install torch==2.10.0 torchvision==0.25.0 transformers==4.57.1 Pillow==12.1.1 matplotlib==3.10.8 einops==0.8.2 addict==2.4.0 easydict==1.13 pymupdf==1.27.2.2 psutil==7.2.2
```

_Версии из карточки модели на Hugging Face_

// Шаг 3

## Распознай первый PDF

- 1 «Положи PDF рядом со скриптом» — Назови файл your_doc.pdf или поменяй имя в последней строке скрипта.
- 2 «Сохрани скрипт как ocr_pdf.py» — Скрипт переводит каждую страницу в картинку на 300 dpi и отдаёт все страницы модели одним запросом. При первом запуске модель скачается с Hugging Face.
- 3 «Запусти» — python ocr_pdf.py - результат ляжет в папку output.

```
import os
import tempfile

import fitz  # PyMuPDF
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()

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

# Multi page / PDF работает только в режиме base (image_size=1024)
model.infer_multi(
    tokenizer,
    prompt='<image>Multi page parsing.',
    image_files=pdf_to_images('your_doc.pdf', dpi=300),
    output_path='output',
    image_size=1024,
    max_length=32768,
    no_repeat_ngram_size=35, ngram_window=1024,
    save_results=True,
)
```

_ocr_pdf.py - весь PDF за один проход_

// Шаг 4

## Что ещё она умеет

Пачка страниц, которые уже лежат картинками, - передай список файлов в тот же infer_multi:

```
model.infer_multi(
    tokenizer,
    prompt='<image>Multi page parsing.',
    image_files=['page1.png', 'page2.png', 'page3.png'],
    output_path='output',
    image_size=1024,
    max_length=32768,
    no_repeat_ngram_size=35, ngram_window=1024,
    save_results=True,
)
```

_Несколько страниц-картинок_

Одна картинка - скан, скриншот, фото страницы - через infer:

```
model.infer(
    tokenizer,
    prompt='<image>document parsing.',
    image_file='your_image.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,
)
```

_Одна картинка, режим gundam_

врезка `// Режимы`: текст «Для одной картинки два режима: gundam - base_size=1024, image_size=640, crop_mode=True; base - base_size=1024, image_size=1024, crop_mode=False. Для пачки страниц и PDF - только base.»

---

// Финал

## Проверь себя

- [ ] Открыл репозиторий baidu/Unlimited-OCR на GitHub и модель на Hugging Face
- [ ] Проверил, что есть видеокарта NVIDIA с CUDA - своя или облачная
- [ ] Поставил пакеты: pip install torch transformers pymupdf
- [ ] Сохранил скрипт ocr_pdf.py и положил рядом свой PDF
- [ ] Запустил python ocr_pdf.py и дождался загрузки модели
- [ ] Открыл папку output и проверил текст всех страниц
- [ ] Попробовал одну картинку через infer

---

Источник: https://localhost:3000/m/unlimited-ocr-kak-raspoznat-celuyu-knigu-za-odin-prohod
