- 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
109 lines
5.0 KiB
Markdown
109 lines
5.0 KiB
Markdown
---
|
||
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
|