CoolFace
Datasetpublic

lab-ii/sakha-ocr-synth

Синтетические строки якутского текста для OCR 500 000 изображений строк с точной разметкой. Сделано для обучения распознавателя якутского (саха) текста: готовые движки для этого языка не работают, а размеченных строк почти нет. Зачем вообще синтетика: у tesseract-rus и ABBYY FineReader 10 на якутской печати доля правильно прочитанных специфических букв ҕ ҥ ө һ ү равна нулю. Не «низкая» — ноль на 460 тысячах букв, при том что эти буквы составляют около 7% всех букв и встречаются… See the full description on the dataset page: https://huggingface.co/datasets/lab-ii/sakha-ocr-synth.

sourceHugging Facecc-by-4.0updated 16d agoView on Hugging Face
0likes145downloads
Dataset Card

Синтетические строки якутского текста для OCR

500 000 изображений строк с точной разметкой. Сделано для обучения распознавателя якутского (саха) текста: готовые движки для этого языка не работают, а размеченных строк почти нет.

Зачем вообще синтетика: у tesseract-rus и ABBYY FineReader 10 на якутской печати доля правильно прочитанных специфических букв ҕ ҥ ө һ ү равна нулю. Не «низкая» — ноль на 460 тысячах букв, при том что эти буквы составляют около 7% всех букв и встречаются в 31% слов. Модель, обученная на этом наборе, читает их наравне с остальными.

Что внутри

строк500 000
форматparquet, картинка встроена (JPEG)
высота строки48 px, ширина произвольная
длина текста25–170 символов
гарнитур152 семейства (465 файлов Google Fonts + системные), 6 семейств отложено
алфавит123 символа: кириллица, ҔҕҤҥҮүҺһӨө, цифры, пунктуация
python
from datasets import load_dataset
ds = load_dataset("lab-ii/sakha-ocr-synth", split="train")
print(ds[0]["text"])
ds[0]["image"]

Как сделано

Текст берётся из корпуса якутского языка (Sakha Texts, викитексты), строка рисуется случайной гарнитурой и проводится через деградацию. Три режима строки с разными весами:

  • —обычный текст, 62% — то, из чего состоит основная масса страницы;
  • —заголовок, 16% — 1–5 слов, 34% капслоком, 28% с прописной, 55% подчёркнутых. Прописные пришлось генерировать принудительно: в корпусе их почти нет, а заголовки набирают именно ими, и без этого модель их не читала;
  • —экранный рендер, 22% — серые чернила на сером фоне с градиентом, лёгкое размытие. Скриншотов и слайдов модель иначе не видит вовсе.

Поверх этого:

  • —«шакалирование» — уменьшение в 0.28–0.62 раза с обратным увеличением и 1–3 прохода JPEG с качеством 18–55;
  • —аугментация начертания — толщина штриха, сжатие/растяжение 0.80–1.22, наклон −0.10…0.28;
  • —низкое разрешение и жёсткий контраст — реальная газетная строка занимает по высоте около 21 px и при этом резче синтетической, если её не сжимать.

Каждая строка проходит проверку на читаемость (резкость и контраст): цепочка пересжатий легко стирает текст полностью, а учить на пустых картинках — только шуметь. При провале проверки строка перегенерируется, после двух попыток — без «шакалирования».

Отбор шрифтов

Заявленная в шрифте поддержка символа ничего не значит: у части гарнитур таблица cmap содержит ҕ ҥ ө һ ү, но рисуются они как г ҥ о h у. Поэтому каждая гарнитура проверяется рендерингом: спец-буква и её кириллический двойник растеризуются и сравниваются попиксельно. Так отсеялись, например, .New York (ө неотличима от о) и ещё 649 из 1170 шрифтов Google Fonts с подзаголовком «cyrillic-ext».

Воспроизведение

В репозитории лежат скрипты генерации и манифест гарнитур:

bash
python build_corpus.py --out sah_lines.txt          # корпус строк
python build_font_manifest2.py --out fonts.json     # отбор шрифтов с проверкой рендером
python pregen.py --n 500000 --out data_v6 \
    --manifest fonts.json --corpus sah_lines.txt \
    --held "Charis SIL,Old Standard TT,PT Serif,Scada,Ubuntu,Vollkorn" \
    --procs 96

--held отложенные семейства: на них меряется перенос на незнакомое начертание. На 96 ядрах 500 тыс. строк генерируются за 8.6 минуты.

Что этим набором меряли

Модель, обученная на нём плюс реальные строки, даёт на газетной вёрстке CER 0.22% и WER 2.05%, пропуск спец-букв 0.3%. Одной синтетики (без реальных данных) хватает на CER около 0.95% на незнакомой газете — это честный перенос на домен, которого модель не видела.

Веса и рецепт обучения: lab-ii/sakha-ocr.

Ограничения

  • —Только печатный текст. Рукописи не покрыты.
  • —Строки, а не страницы: разметки блоков и колонок здесь нет.
  • —Распределение гарнитур — это Google Fonts, а не то, чем набраны якутские книги 1940–1990-х (Литературная, Школьная, Академическая, Журнальная). Их в открытом доступе нет, и это главный незакрытый пробел.
  • —Тексты меток — из корпуса якутского языка; ошибки и опечатки корпуса переходят в разметку как есть.

Лицензия и происхождение

CC BY 4.0. Изображения отрисованы шрифтами Google Fonts (OFL/Apache 2.0) и системными шрифтами macOS; сами файлы шрифтов в набор не входят, только манифест с названиями. Тексты меток взяты из открытых якутских текстов (Sakha Texts, викитексты).