--- title: dots.mocr — Multimodal OCR created: 2026-06-15 updated: 2026-06-15 type: concept tags: [ocr, inference, local-llm, pdf, parsing] confidence: 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 ```yaml GPU: RTX 3080 Ti (12GB) — выделена под dots.mocr CUDA_VISIBLE_DEVICES=1 (через враппер run_vllm_gpu1.py) Порт: 8000 max_model_len: 16384 (ограничение VRAM) ``` ## Запуск ### 1. Сервер vLLM ```bash cd ~/workspace/dots.mocr source .venv/bin/activate python run_vllm_gpu1.py ``` Грузится ~50 сек, после этого отвечает на порту 8000. ### 2. Парсинг PDF/изображения ```bash # Базовый запуск 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. Склейка всех страниц и очистка ```bash 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