# OCR Annotator Веб-инструмент для разметки кропов текста. Показывает изображение, вы вводите текст, результат сохраняется в `labels.tsv` — готовый формат для дообучения TrOCR. ## Быстрый старт через Docker ### 1. Установите Docker и Docker Compose (если ещё нет) ```bash # Ubuntu / Debian sudo apt update sudo apt install -y docker.io docker-compose-plugin # Добавьте себя в группу docker (чтобы не писать sudo) sudo usermod -aG docker $USER newgrp docker ``` ### 2. Скачайте / разархивируйте проект ```bash # Перейдите в папку проекта cd ocr-annotator ``` ### 3. Положите ваши кропы в папку data/images ```bash mkdir -p data/images # Скопируйте ваши кропы: cp /path/to/your/crops/*.jpg data/images/ # или cp -r /path/to/your/crops/. data/images/ ``` Поддерживаемые форматы: `jpg`, `jpeg`, `png`, `bmp`, `tiff`, `webp` ### 4. Запустите ```bash docker compose up --build ``` Откройте браузер: **http://localhost:5000** При следующих запусках (образ уже собран): ```bash docker compose up ``` Остановить: ```bash docker compose down ``` --- ## 🤖 Авто-разметка (TrOCR) В шапке рабочего экрана есть кнопка **🤖 Авто-разметка**. Она прогоняет все **неразмеченные** картинки текущей подпапки через модель TrOCR и сохраняет предсказания с пометкой «авто» — то есть **требуется ручная перепроверка**. - Авто-метки в списке файлов и в счётчике отмечены оранжевым и значком 🤖. - Фильтр **🤖 Проверить** показывает только авто-метки, ожидающие проверки. - Как только вы вручную сохраняете такую метку (Enter / «Сохранить»), пометка «авто» снимается — метка становится проверенной. - Прогресс показывается в статус-баре; разметка идёт в фоне, можно продолжать проверять уже готовые картинки. Модель задаётся переменной `TROCR_MODEL` (по умолчанию `raxtemur/trocr-base-ru` — TrOCR, дообученная на русский). Можно указать любую HuggingFace-модель типа `VisionEncoderDecoder`, например `microsoft/trocr-base-printed`. При первом запуске модель скачивается из HuggingFace и кэшируется в `data/hf_cache` (переменная `HF_HOME`), поэтому повторные запуски быстрые. > В экспортируемый `labels.tsv` пометка «авто» **не попадает** — там остаётся > чистый формат `имя_файлатекст` для дообучения TrOCR. --- ## Горячие клавиши | Клавиша | Действие | |---------------|-----------------------------| | `Enter` | Сохранить и перейти дальше | | `Tab` | Пропустить (без сохранения) | | `Alt + →` | Следующее изображение | | `Alt + ←` | Предыдущее изображение | --- ## Результат Файл `data/labels.tsv` — табуляция-разделённый файл: ``` crop_001.jpg Иванов И.И. crop_002.jpg ул. Ленина, д. 5 crop_003.jpg СЧЁТ-ФАКТУРА ``` Скачать через интерфейс: кнопка **⬇ Экспорт TSV**, или забрать прямо из папки `data/labels.tsv`. --- ## Использование для дообучения TrOCR ```python from datasets import Dataset from PIL import Image import pandas as pd # Читаем разметку df = pd.read_csv("data/labels.tsv", sep="\t", header=None, names=["file_name", "text"]) df["image"] = df["file_name"].apply(lambda f: Image.open(f"data/images/{f}").convert("RGB")) dataset = Dataset.from_pandas(df[["image", "text"]]) # Далее — стандартный fine-tuning TrOCR через HuggingFace Trainer ``` --- ## Запуск без Docker (если нужно) ```bash pip install flask gunicorn # для кнопки «🤖 Авто-разметка» дополнительно: pip install torch transformers pillow sentencepiece export IMAGES_DIR=./data/images export OUTPUT_FILE=./data/labels.tsv export TROCR_MODEL=raxtemur/trocr-base-ru # необязательно python app.py # или через gunicorn: gunicorn --bind 0.0.0.0:5000 app:app ``` --- ## Структура проекта ``` ocr-annotator/ ├── app.py # Flask backend ├── Dockerfile ├── docker-compose.yml ├── templates/ │ └── index.html # UI └── data/ ├── images/ # ← кладите сюда кропы └── labels.tsv # ← сюда пишется разметка ```