# PaddleOCR-VL локально: как разобрать скан и проверить таблицу

Источник: https://modelium.tech/zhurnal/paddleocr-vl-lokalno/

Для разбора страницы используйте полный pipeline PaddleOCR-VL 1.6, а не только VLM через Transformers: он выделяет области документа, распознаёт элементы и собирает результат. На Linux начните с одного несекретного скана и сохраните вывод; сверяйте цифры и строки таблицы с оригиналом. Поддержка конкретного железа, скорость и качество русской первички требуют проверки на собственных данных.

Сверено 2 октября 2026 года по документации PaddleOCR на Git commit `dab3fe3` и карточке весов на HF revision `c5630ab`. Ни скорость, ни качество русских сканов Modelium не измерял. Запрос «paddleocr vl» имеет качественный сигнал Google Suggest ru/RU, но частотность в России неизвестна.

## Что выдаёт PaddleOCR-VL и почему нужна полная цепочка?

PaddleOCR-VL 1.6 — модель распознавания элементов документа, а официальный **pipeline** сначала находит и упорядочивает области страницы, затем распознаёт каждую область и собирает их в результат. Таблица, формула, текст и порядок чтения проходят через эту цепочку, поэтому запуск только VLM через Transformers или vLLM — не эквивалент разбора всей страницы [s1](#src-s1). В коде pipeline отдельно задаются версия и модель распознавания: при сравнении двух запусков фиксируйте конфигурацию обоих этапов [s7](#src-s7).

Публичная модель на HF — `PaddlePaddle/PaddleOCR-VL-1.6`, ревизия `c5630abae1d940eafe0697512a0325494b02ab42` содержит файл весов и конфигурацию [s6](#src-s6). В конфигурации есть `bfloat16`, но ни из dtype, ни из размера файла нельзя вывести минимальную RAM/VRAM для полного pipeline [s5](#src-s5)[s1](#src-s1). Автор сообщает 96,33% в OmniDocBench v1.6; это **авторская оценка на своём наборе**, а не обещание качества ваших русских счетов или УПД [s3](#src-s3).

## Что приготовить до первого локального разбора?

Этот путь рассчитан на **Linux x64 CPU или поддерживаемый NVIDIA GPU**, с отдельной средой Python 3.9–3.13. Документация ручной установки требует PaddlePaddle не ниже 3.2.1 и группу `paddleocr[doc-parser]`; не ставьте одновременно CPU- и GPU-пакеты PaddlePaddle. Для Apple Silicon, AMD/Intel и NVIDIA Blackwell в документации предусмотрены другие инструкции — команды ниже для них не обещают совместимости [s1](#src-s1)[s2](#src-s2). Подберите подходящий wheel для своей ОС и драйвера по официальной инструкции до установки: пример с CUDA 12.6 нельзя механически переносить на любой GPU [s1](#src-s1).

Возьмите *свой тестовый скан* `scan.png` без закрытых данных: хорошо видимые строки, цифры, ячейки таблицы и несколько заранее известных контрольных значений. Исходный файл и ручной эталон храните отдельно от результата. Первый запуск по документации скачивает компоненты из сети; «работает локально» не равно «уже подготовлено к офлайну». Для изолированного контура потребуется отдельно перенести зависимости/модели и проверить сетевые обращения [s1](#src-s1).

## Как пройти путь на Linux без облачного OCR API?

- Создайте и активируйте отдельное окружение: `python3.11 -m venv .venv-paddleocr`, затем `source .venv-paddleocr/bin/activate`. Команды ниже — документированный путь установки, **не проверенный запуск Modelium** [s1](#src-s1).

- Для x64 CPU выполните `python -m pip install paddlepaddle==3.2.1 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/`; для совместимой NVIDIA/CUDA 12.6 вместо него — `python -m pip install paddlepaddle-gpu==3.2.1 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/`. Это два альтернативных пути, не последовательные команды [s1](#src-s1).

- Установите пакет разбора: `python -m pip install -U "paddleocr[doc-parser]>=3.6.0"`. Карточка модели приводит эту группу и версию; базовый `paddleocr` без опции не покрывает весь сценарий разбора документа [s3](#src-s3)[s2](#src-s2).

- Для CPU на своём файле выполните `paddleocr doc_parser -i ./scan.png --pipeline_version v1.6 --device cpu --save_path ./output`. Для поддерживаемой NVIDIA уберите `--device cpu`. Параметр `pipeline_version` принимает v1.6, а `save_path` сохраняет результаты под `./output`; это **ожидаемое поведение документации**, не результат запуска на нашем сервере [s1](#src-s1)[s3](#src-s3).

- Откройте сохранённые файлы и сопоставьте текст и таблицу с изображением. CLI печатает структурный результат и при `--save_path` записывает файлы; не принимайте любой созданный файл за успешное распознавание всех полей [s1](#src-s1).

Для интеграции вместо CLI у API есть `PaddleOCRVL(pipeline_version="v1.6")`, `predict("./scan.png")` и методы результата `save_to_json(save_path="output")` и `save_to_markdown(save_path="output")` [s3](#src-s3). JSON содержит блоки `block_label`, `block_bbox`, `block_content` и порядок `block_order`: сохраняйте их, если важно проверить, откуда взялась строка [s1](#src-s1). Для многостраничного PDF результат по умолчанию разбивается по страницам; функция `restructure_pages` может объединять таблицы через страницы, но её результат тоже требует ручной проверки [s1](#src-s1).

## Как понять, что таблица распознана пригодно?

Сделайте эталон для одной страницы: число строк и столбцов, итоговые суммы, единицы измерения, артикулы, разделители и две-три ячейки на границе таблицы. Сверьте не только наличие текста в Markdown, но и соответствие каждой строки исходному изображению: сдвиг одной строки может испортить последующую загрузку в учётную систему. Сохраните найденные расхождения по типам — пропущенная область, неверный порядок чтения, распознанная цифра, склеенная ячейка. Это **методика проверки**, а не данные о точности модели.

Если таблица вообще не выделена, первым делом проверьте этап анализа областей и не отключён ли `use_layout_detection`: документация показывает, что выключение этого параметра меняет цепочку [s1](#src-s1). Для повернутого или искривлённого скана предусмотрены `use_doc_orientation_classify` и `use_doc_unwarping`; по умолчанию они отключены, поэтому включайте и сравнивайте результат на том же исходнике, а не объявляйте улучшение без измерения [s1](#src-s1). Если распознано только одно обрезанное поле, проверьте, не перешли ли вы на пример Transformers: автор отдельно ограничивает его element-level распознаванием, а для страницы рекомендует полный pipeline [s3](#src-s3)[s1](#src-s1).

## Когда не использовать результат напрямую?

Не переносите распознанные реквизиты или суммы в 1С без сверки с оригиналом и человеком: модель извлекает элементы, а сопоставление с учётной схемой — следующий этап. [Разбор задачи документов для 1С](/zadachi/raspoznavanie-dokumentov-1s/) помогает определить, какие поля и ошибки проверять; [Docling](/zhurnal/docling/) — альтернативный путь для структурных PDF, а [сравнение OCR-подходов](/zhurnal/ocr-modeli/) полезно после одинакового теста на своём наборе.

Текст `LICENSE` у закреплённых весов — Apache 2.0 [s4](#src-s4). Это не автоматическое разрешение для каждого дополнительного компонента полного процесса и не юридическое заключение; проверяйте выбранные веса, зависимости и условия обработки документов отдельно. Изолированность сети также требует теста: [порядок проверки офлайн-контура](/zhurnal/proverka-offline-kontura-ii/) не заменяется словом «локально».

**Следующий шаг:** сохраните один обезличенный `scan.png`, выполните локальную команду на своём устройстве и вручную отметьте каждую ошибку таблицы/цифр по исходнику. Если качество не подходит, [сравните OCR-подходы](/zhurnal/ocr-modeli/) на *том же* тестовом скане. Ни скорость, ни минимальная память, ни точность русского текста на вашем железе здесь не заявлены.

## Источники

1. [PaddleOCR — PaddleOCR-VL pipeline usage, закреплённый Git commit](https://github.com/PaddlePaddle/PaddleOCR/blob/dab3fe35379033fdcb2d0e9572fac0b36c9a9ebf/docs/version3.x/pipeline_usage/PaddleOCR-VL.en.md) — получено 2026-10-02
2. [PaddleOCR — Installation, dependency group doc-parser](https://github.com/PaddlePaddle/PaddleOCR/blob/dab3fe35379033fdcb2d0e9572fac0b36c9a9ebf/docs/version3.x/installation.en.md) — получено 2026-10-02
3. [PaddleOCR-VL-1.6 — карточка автора с командами и авторскими оценками](https://huggingface.co/PaddlePaddle/PaddleOCR-VL-1.6/blob/c5630abae1d940eafe0697512a0325494b02ab42/README.md) — получено 2026-10-02
4. [PaddleOCR-VL-1.6 — LICENSE на ревизии модели](https://huggingface.co/PaddlePaddle/PaddleOCR-VL-1.6/blob/c5630abae1d940eafe0697512a0325494b02ab42/LICENSE) — получено 2026-10-02
5. [PaddleOCR-VL-1.6 — конфигурация весов](https://huggingface.co/PaddlePaddle/PaddleOCR-VL-1.6/blob/c5630abae1d940eafe0697512a0325494b02ab42/config.json) — получено 2026-10-02
6. [Hugging Face — машинный инвентарь ревизии PaddleOCR-VL-1.6](https://huggingface.co/api/models/PaddlePaddle/PaddleOCR-VL-1.6/revision/c5630abae1d940eafe0697512a0325494b02ab42) — получено 2026-10-02
7. [PaddleOCR — реализация PaddleOCRVL, закреплённый commit](https://github.com/PaddlePaddle/PaddleOCR/blob/dab3fe35379033fdcb2d0e9572fac0b36c9a9ebf/paddleocr/_pipelines/paddleocr_vl.py) — получено 2026-10-02
