5.0 KiB
5.0 KiB
title, created, updated, type, tags, confidence
| title | created | updated | type | tags | confidence | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| dots.mocr — Multimodal OCR | 2026-06-15 | 2026-06-15 | concept |
|
high |
dots.mocr — Multimodal OCR
dots.mocr — мультимодальная OCR-модель от xiaohongshu (小红书, rednote-hilab), 3B параметров на базе Qwen3-VL-4B. Распознаёт текст на русском, английском, китайском и других языках. Парсит PDF и изображения в структурированные данные (JSON + Markdown + визуализация).
- Репозиторий: https://github.com/rednote-hilab/dots.mocr
- Модель: https://huggingface.co/rednote-hilab/dots.mocr
- arXiv: https://arxiv.org/abs/2603.13032
Сетап
Директория: /home/nik/workspace/dots.mocr/
Окружение: Python 3.12 (через uv), .venv/
Зависимости: PyTorch 2.7+ cu128, vLLM 0.23, transformers 4.57, PyMuPDF, flash-attn
GPU: RTX 3080 Ti (12GB) — выделена под dots.mocr
CUDA_VISIBLE_DEVICES=1 (через враппер run_vllm_gpu1.py)
Порт: 8000
max_model_len: 16384 (ограничение VRAM)
Запуск
1. Сервер vLLM
cd ~/workspace/dots.mocr
source .venv/bin/activate
python run_vllm_gpu1.py
Грузится ~50 сек, после этого отвечает на порту 8000.
2. Парсинг PDF/изображения
# Базовый запуск
python3 dots_mocr/parser.py file.pdf --port 8000 --model_name model \
--num_thread 8 --max_completion_tokens 12000
# Только текст (чистый md, без layout-разметки и base64-картинок) — быстрее
python3 dots_mocr/parser.py file.pdf --port 8000 --model_name model \
--num_thread 8 --max_completion_tokens 12000 --prompt prompt_ocr
# Или через скрипт-помощник
./parse.sh file.pdf --output ./results --prompt prompt_ocr
3. Получение результатов
results/ИмяФайла/
├── ИмяФайла_page_0.md # Markdown страницы
├── ИмяФайла_page_0.jpg # Визуализация с bbox
├── ИмяФайла_page_0.json # Layout JSON (если не prompt_ocr)
└── ИмяФайла_page_1.md
4. Склейка всех страниц и очистка
cd results/Папка
cat *_page_*.md > Итог.md
# Удалить base64-изображения (актуально для prompt_layout_all_en)
sed -e 's/!\[.*\](data:image[^)]*)//g' -e '/^[[:space:]]*$/d' Итог.md > Итог_clean.md
Режимы (промпты)
| Промпт | Описание | Скорость |
|---|---|---|
prompt_layout_all_en |
Layout + текст + таблицы HTML + формулы LaTeX | ~20-30 с/стр |
prompt_ocr |
Только текст (без layout-разметки) | ~2-5 с/стр ✅ |
prompt_layout_only_en |
Только детекция блоков (без текста) | быстро |
prompt_grounding_ocr |
OCR в заданном bbox | среднее |
prompt_web_parsing |
Парсинг веб-страниц | среднее |
prompt_scene_spotting |
Поиск текста на сцене | среднее |
prompt_image_to_svg |
Конвертация графики в SVG | среднее |
prompt_general |
Free-form QA (с --custom_prompt) | среднее |
Особенности
- prompt_ocr работает в 10 раз быстрее full layout и выдаёт чистый Markdown без base64-вставок для картинок. Рекомендуется для анализа текстовых документов.
- Для сложных PDF с таблицами, формулами и многостраничной вёрсткой —
prompt_layout_all_enдаёт полную картину (HTML таблицы, LaTeX формулы). - Большие "Picture" элементы (декоративные блоки, фоны) могут содержать текст —
prompt_ocrвытаскивает и его. max_model_len=16384— ограничение из-за 12GB VRAM. Для одного PDF-листа хватает.
Проблемы
- vLLM v0.23 использует V1 engine с multiprocessing spawn, который сбрасывает
CUDA_VISIBLE_DEVICES. Решение: врапперrun_vllm_gpu1.pyсos.environ+if __name__ == "__main__". - При
--gpu-memory-utilization > 0.9может не хватить памяти для KV-кэша — падает на инициализации. - Порт 8000 — не конфликтует с llama-server (порт 8080).
Связанное
- russian-ocr — Tesseract + RapidOCR на CPU (альтернатива без GPU)
- local-llm — общая инфраструктура локальных LLM