ocr_annotator/README.md
2026-06-24 13:01:26 +04:00

5.4 KiB
Raw Permalink Blame History

OCR Annotator

Веб-инструмент для разметки кропов текста. Показывает изображение, вы вводите текст, результат сохраняется в labels.tsv — готовый формат для дообучения TrOCR.

Быстрый старт через Docker

1. Установите Docker и Docker Compose (если ещё нет)

# Ubuntu / Debian
sudo apt update
sudo apt install -y docker.io docker-compose-plugin

# Добавьте себя в группу docker (чтобы не писать sudo)
sudo usermod -aG docker $USER
newgrp docker

2. Скачайте / разархивируйте проект

# Перейдите в папку проекта
cd ocr-annotator

3. Положите ваши кропы в папку data/images

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. Запустите

docker compose up --build

Откройте браузер: http://localhost:5000

При следующих запусках (образ уже собран):

docker compose up

Остановить:

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 пометка «авто» не попадает — там остаётся чистый формат имя_файла<TAB>текст для дообучения TrOCR.


Горячие клавиши

Клавиша Действие
Enter Сохранить и перейти дальше
Tab Пропустить (без сохранения)
Alt + → Следующее изображение
Alt + ← Предыдущее изображение

Результат

Файл data/labels.tsv — табуляция-разделённый файл:

crop_001.jpg	Иванов И.И.
crop_002.jpg	ул. Ленина, д. 5
crop_003.jpg	СЧЁТ-ФАКТУРА

Скачать через интерфейс: кнопка ⬇ Экспорт TSV, или забрать прямо из папки data/labels.tsv.


Использование для дообучения TrOCR

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 (если нужно)

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        # ← сюда пишется разметка