Files
wow-design-wiki/concepts/dots-mocr.md
T
neo 76c4c5b4fe design-systems: add 74 brand DESIGN.md files (VoltAgent/awesome-design-md)
- 74 brands: airbnb, stripe, apple, figma, linear, vercel, etc.
- 147 files: DESIGN.md + README.md per brand (~2.1 MB)
- Each DESIGN.md contains structured brand analysis (colors, typography, components)
- Updated 00-overview.md with new design-systems directory
2026-06-21 20:40:35 +05:00

109 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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