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

156 lines
5.4 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.

# 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` пометка «авто» **не попадает** — там остаётся
> чистый формат `имя_файла<TAB>текст` для дообучения 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 # ← сюда пишется разметка
```