
Проект реализуется командой: Константин Кожин — руководитель проекта; Павел Шерстнев — ML-инженер; Антон Михалев — ML-инженер; Анна Пятаева — научный руководитель проекта; Владислава Жуковская — специалист по разметке данных; Алина Нуриманова — специалист по разметке данных. Работа ведётся при поддержке гранта (Фонд содействия инновациям, конкурс «Код-ИИ», VII очередь, декабрь 2024 – декабрь 2025).
Manuscript OCR — это open-source проект, опубликованный на GitHub и GitVerse.
Старина и нейросети: зачем мы учим ИИ читать рукописи
Представьте: перед вами пожелтевший лист рукописи XIX века. Строчки выведены красивым витиеватым почерком — но понять, что там написано, почти невозможно. Непривычные буквы, дореволюционная орфография, странные сокращения. И всё это — на фоне пятен, потёртостей и разрывов бумаги.

Если попробовать распознать такой текст с помощью обычной OCR-системы (например, Tesseract или EasyOCR), результат будет... грустным. Вместо связного текста — каша из символов. Почему? Проблема в самом материале:
дореформенная кириллица содержит символы, которых больше нет в языке (ѣ, і, ѳ и др.);
тексты написаны от руки — и каждый почерк по-своему «уникален»;
сами страницы повреждены, выцветшие, кривые и с тенями от переплёта.
Современные OCR-инструменты на таких документах распознают в лучшем случае 30–40% символов. А бывает, и вовсе не могут ничего прочитать. Потому что они просто не обучены на таком материале.
Что мы решили сделать
Мы создали бесплатную и открытую OCR-библиотеку, специально обученную распознавать рукописные документы дореформенной России. Проект уже включает в себя:
поддержку дореволюционной орфографии, включая редкие символы и титла (надстрочные сокращения);
устойчивую работу с низким качеством сканов — со сгибами, пятнами, потёртостями и другими архивными артефактами;
возможность дообучения модели под конкретные почерки и фонды.
Мы называем это «цифровым ключом» — инструментом, который открывает доступ к историческим документам, до сих пор остававшимся неприступными для машин.
400 тысяч слов вручную — и всё ради науки
Идея была простой: чтобы нейросеть научилась читать старинные рукописи, ей нужны примеры. Много примеров. А вот с этим и была главная трудность.
Мы начали с архивных сканов из волонтёрского проекта FromThePage, где энтузиасты вручную расшифровывали документы XIX века. Это большая и ценная работа, и мы с благодарностью ссылаемся на неё как на источник. Однако для обучения нейросети таких данных оказалось недостаточно: нужны были точные координаты каждого слова на изображении — а такая разметка в проекте не велась.
Поэтому мы использовали именно сканы, а всю разметку — расшифровки и координаты — создали самостоятельно.
Чтобы ускорить этот процесс, мы разработали собственный инструмент — Anno OCR. Это локальный и бесплатный редактор разметки, который легко адаптировать под конкретные задачи. С ним можно быстро отрисовывать bounding box-ы, вводить текст, перемещаться по страницам и экспортировать всё в формат для обучения.

Так мы разметили около 400 тысяч слов. Основа корпуса — Отчёты губернаторов Енисейской губернии за конец XIX века. Эти рукописи отражают жизнь региона: от золотых приисков до судопроизводства. И для модели они оказались настоящим вызовом. Что делает эти документы особенно сложными:
Формальный канцелярский стиль с длинными фразами и устаревшими оборотами;
Дореформенная орфография: символы вроде ѣ, і, ѳ, надстрочные титла, редкие знаки;
Неоднородный почерк: на одной странице может быть сразу несколько стилей письма;
Повреждения: пятна от чернил, выцветшие участки, складки, заломы;
Скан-артефакты: кривые строки, тени от переплёта, смазанные чернила, обрезанные края.
Даже с таким объёмом данных модель всё ещё с трудом распознавала редкие символы и нестандартные формы. Мы поняли: без синтетики не обойтись.
Когда буквы рисует нейросеть: зачем мы придумали свои слова
Когда исторических сканов мало, а редкие символы вроде «ѳ» встречаются раз в сто лет — пора создавать свои. Мы подошли к этому как к генеративной задаче: нужно научить нейросеть рисовать фразы в дореволюционном стиле, будто их писал архивный клерк из 1860-х.
Мы применили два подхода: ScrabbleGAN и StackMix.
ScrabbleGAN: как будто написал человек
ScrabbleGAN собирает слово из отдельных глифов — картинок букв. Он варьирует шрифт, искажения, толщину, шум. Мы дообучили его на рукописях с дореформенной кириллицей, добавили исторические артефакты — и он начал выдавать удивительно убедительные строчки.
Плюс в том, что можно генерировать любые слова и подгонять частоту нужных символов. Именно так мы «накормили» модель сотнями примеров ѣ и нестандартных титл — вместо редких случайностей в оригинальных данных.
Что приятно удивило: некоторые сгенерированные слова начали выглядеть «уставшими» — будто их действительно писал человек.
StackMix: собрать слово из обломков
А это — совсем другой путь. StackMix берёт реальные слова, режет их на буквы, мешает, вставляет фрагменты страниц и случайные дефекты. Он не придумывает буквы, а как бы «лепит» новые слова из старых — идеально для симуляции архивного хаоса. Особенно выручал при тренировке устойчивости модели к потёртостям и теням.
Что нас особенно порадовало: строки, собранные StackMix, выглядели так, будто их вырезали из настоящих ветхих отчётов и склеили заново. Получился такой цифровой «документ из лоскутков» — и именно такой шумный хаос помог модели лучше понимать реальную архивную грязь.
Почему синтетика сработала
Такие данные помогли модели наконец «понять» редкие символы, улучшили устойчивость к артефактам и дали нам возможность сбалансировать корпус. Вместе с ручной разметкой это стало прочной основой для следующего этапа — обучения нейросетей.
Под капотом Manuscript OCR: как работает наша библиотека
Как научить ИИ читать дореформенные рукописи? Мы выстроили для этого целую цепочку из модулей — от поиска слов на странице до финального текста. Назовём это не просто архитектурой, а мозговым пайплайном библиотеки.
Далее — краткий обзор ключевых компонентов. Если вам интересно подробнее — мы описали техническую сторону проекта в научной статье.
Шаг 1: Найти текст на странице
Сначала нужно определить, где именно на изображении находятся слова. Это задача детекции.
Мы реализовали собственную версию алгоритма на основе архитектуры EAST — одной из самых быстрых и надёжных для сегментации текста. Модель была адаптирована под особенности архивных сканов: добавили учёт складок, теней, потёртостей, обучили на собственных разметках. В итоге детектор стабильно работает даже на сложных фрагментах с дореволюционным почерком.
Шаг 2: Распознать, что написано
Когда найдены bounding box-ы слов, на сцену выходит блок распознавания. Мы построили пайплайн на основе TPS-ResNet-BiLSTM-Attention — но реализовали его полностью вручную и под свои задачи. Здесь модель выравнивает слова, считывает их «слева направо», понимает, где заканчивается ѣ и начинается і, и выдаёт итоговый текст. Это — сердце системы.
Шаг 3: Сделать текст читаемым
Следующий этап (находится в разработке) — постобработка текста. Мы строим корректирующую языковую модель, натренированную на дореформенной кириллице. Она поможет исправлять ошибки и делать текст ближе к оригинальному написанию, с сохранением старой орфографии. То есть, если модель случайно распознала "и" вместо "і" — корректор подскажет, что это не тот случай.
Всё это объединено в модульный пайплайн, где каждый блок можно использовать отдельно. Хотите встроить только распознаватель в архивный сайт — можно. Хотите обучить свою модель — пожалуйста, весь код открыт. Библиотека легко подключается к другим системам.
Что пошло не так — и как мы с этим справились
Вот несколько подводных камней, с которыми мы столкнулись (и обошли):
Внутри одного документа — разная орфография. Авторы XIX века не особо любили стандарты. Это сильно мешало модели, но помог гибкий препроцессинг.
Архитектуры OCR не работают “как есть”. Пришлось переписывать всё вручную, чтобы учесть специфику дореформы.
Нехватка данных. Выход — в собственном корпусе и генерации рукописной синтетики (ScrabbleGAN и StackMix).
Сбор и разметка. 400 тысяч слов руками, в своем инструменте — Anno OCR (репозиторий в статье выше). Заняло сотни часов.
Финальный шаг — и новый этап: цифровой ключ в действии
Manuscript OCR — это открытая библиотека для распознавания рукописей с дореформенной кириллицей. Мы обучили её на собственных данных, адаптировали под архивные реалии и выложили с открытым кодом и документацией. Сейчас библиотека уже используется:
для распознавания архивных документов и создания цифровых коллекций;
в образовательных проектах по истории, лингвистике и цифровым гуманитарным наукам;
в научных исследованиях, связанных с историей дореволюционной России.
Проект начался как студенческая инициатива, а сегодня стал частью диссертационной работы и серьёзной исследовательской практики. Мы продолжаем развивать систему: расширяем поддержку новых источников, улучшаем архитектуры, исследуем возможности VLM и языковых моделей для корректировки и генерации дореформенных текстов.
Библиотека создана с одной целью — сделать исторические рукописи доступными для людей и машин. Теперь у исследователей, архивистов и преподавателей появился удобный цифровой инструмент, который помогает «расслышать» документы, молчавшие десятилетиями.
Manuscript OCR — это open-source проект, опубликованный на GitHub и GitVerse.
Комментарии (22)

Bifid
28.10.2025 20:35А почерк врача распознавать ваша нейросеть умеет ?

konstantin_kozhin Автор
28.10.2025 20:35Пока на врачебный почерк нейросеть смотрит с уважением, но с осторожностью)
Мы выложили демо на https://manuscript.sfu-kras.ru/ — там можно потестировать промежуточную версию. Основной корпус — дореформенные рукописи, поэтому медтексты пока сложны. Но к декабрю выпустим стабильную версию библиотеки, и дообучить под медицину (в том числе с синтетикой) — не проблема.

AlexLeonov
28.10.2025 20:35Искренне желаю вам удачи, но пока что качество распознавания оставляет желать лучшего и, если честно, ничем не отличается от других инструментов.
Если посимвольно примерно половину символов инструмент распознает, то пословно - полный провал, конечно. Даже в печатном тексте, не говоря о рукописном.
Вот пример: метрическая книга начала 20 века. Почерк весьма читаемый, разборчивый. Результат - плачевный.


konstantin_kozhin Автор
28.10.2025 20:35Спасибо, что не прошли мимо и за честный фидбэк! Версия на сайте — старая, ей уже около трёх месяцев. Сейчас мы активно дорабатываем библиотеку: дообучаем, тестируем, собираем обратную связь.
По вашему примеру как раз видно, что с детекцией у нас уже всё довольно стабильно — она хорошо работает даже на сложных сканах. Сейчас на подходе более стабильная версия модуля распознавания: пробуем разные архитектуры, настраиваем параметры. Параллельно подключаем языковой корректор на базе LLM — он поможет подтянуть финальный текст и учитывать дореформенную орфографию.
Финальную версию с экспериментами и метриками на разных данных планируем выложить к декабрю, после завершения гранта. Наша цель — не просто сделать одно решение, а создать инструмент, который можно дообучать и адаптировать под свои задачи. Будем очень рады любым идеям, советам и конструктивной критике!

AlexLeonov
28.10.2025 20:35Я могу поделиться с вами ресурсом на тестирование вашего решения. Есть доступ к архивам, есть целевые сканы, распознавание которых востребовано, есть и тестировщики, которые смогут это проверять.
Более того, я прекрасно представляю как это всё можно монетизировать. Очередь на распознавание метрических книг, исповедных росписей и прочих генеалогических документов - стоит до горизонта.
Но пока, если честно, я не вижу, с чего тут даже начать, нынешнее распознавание в половину букв даже не попадает.

vilgeforce
28.10.2025 20:35Дайте доступ волонтерам - они ручками расшифруют и спасибо скажут :-)

AlexLeonov
28.10.2025 20:35Вы недооцениваете размеры архивов. Проекты по их индексации имеются, но нынешними темпами на это потребуются столетия.

bilayan
28.10.2025 20:35Волонтеров, обычно интересующиеся своей генеалогией, не сказать чтоб прям очень много. А архивов много разных и объемы оч большие (даже просто отсканировать и где то как то хранить потом - проблема).
Вручную разбирать абсолютно всё никто не будут, все ищут по большей части только конкретно их интересующие вещи, а это очень узкий пласт.
Волонтёры скажут спасибо даже если будут просто сканы доступны без распознавания, даже если не за бесплатно будет возможность сканировать по требованию как в библиотеках. Сейчас с этим сложности. И вдвойне сложности если это еще и соседние страны бывшие в СССР.

PereslavlFoto
28.10.2025 20:35представляю как это всё можно монетизировать. Очередь на распознавание метрических книг, исповедных росписей и прочих генеалогических документов - стоит до горизонта
В этой очереди только люди, которые не могут платить, и архивы, которые не могут платить.

AlexLeonov
28.10.2025 20:35>> В этой очереди только люди, которые не могут платить
Не хочу вас разочаровывать, но такое явление, как "выкуп" сканов из архивов весьма развито. Буквально недавно лично участвовал в сборе, более чем на 50 000 рублей за одно конкретное дело.
И ничего, нашлись желающие заплатить. И нашелся архив, готовый оплату принять.

PereslavlFoto
28.10.2025 20:35Это частный случай, казус. Конечно, иногда такое бывает. Однако такой случай — очень необычный.

anasana
28.10.2025 20:35Если детекция мест, где на листе есть текст и графика, работает, то интересен такой кейс - перенос таких областей 1-в-1 в те же места просто на новый чистый лист и сохранение его так же картинкой.
Это позволит подчистить весь лист от фона сканирования вокруг текста. Обычно даже хорошие сканы нормальных оригиналов имеют полно мелких точек, ниточный мазков и цапок. И не включая явный мусор на листе в новый, мы таким образом не портим яркость и контраст самим буквам, они не станут паровозом утоньшаться в угоду общему порогу фильтра, который обычно применяется ко всему листу.

vilgeforce
28.10.2025 20:35Anno OCR умеет сохранять результаты в PDF/DJVU? А области с написанием не "слева направо"? Вообще это выглядит ровно как то, что мне нужно - ручная расчшифровка рукописей!

vilgeforce
28.10.2025 20:35Ну и сорцы бы Anno OCR. По файлу вижу что там Python + Qt :-)

konstantin_kozhin Автор
28.10.2025 20:35Да, мы применяли собственный софт — просто в моменте так было быстрее. По функциональности он близок к Label Studio, но у нас была возможность сразу «на коленке» дорабатывать интерфейс и добавлять нужные фичи. Например, мы прикрутили автокоррекцию через сайт «Славеница», чтобы ускорить расшифровку.
В одной из следующих статей обязательно расскажем подробнее про наш опыт разметки и вспомогательные инструменты, которые делали под это. Покажем, как всё устроено, и выложим код — чтобы можно было использовать или доработать под свои задачи. Было бы интересно вместе подумать, чего не хватает существующим OCR-разметчикам и что можно было бы добавить.

vilgeforce
28.10.2025 20:35Ну я лично сразу буду смотреть как это прикрутить к DJVU :-) Потому что хочу поиск, да еще и в оффлайне. При этом полное распознавание не так важно: нужно очень точно распознавать названия деревень, например и иметь возможность искать по этим данным

bilayan
28.10.2025 20:35Для такого рукописного текста не будет особо разницы что DJVU что PDF, сегментатору и там и там будет тяжко. А как контейнер для картинок - еще вопрос что использовать. у PDF есть как минимум Jpeg2000 для сжатия (если вы не планируете к чёрно-белому приводить, то душим растр разными способами и PDF с jpeg2k должен быть норм)
При наличии координат блоков текста/слов/букв, внедрить это что в DjVu что в PDF не должно составлять особого труда.
С DjVu конечно попроще, и там выбор есть использовать djvused или djvutoy
Нагенерировать файлики и просто внедрить
Формат там простенький
пришлось скриншотом, потому что разметку xml в спойлере хабр захотел скушать

тем же DjVuToy, кстати, можно и в PDF перегнать, получив результат как был в DjVu и с +/- таким же весом. Все же он более распространён и часто людям проще именно с ним.

Seachlyn
28.10.2025 20:35Я ещё не пробовал, очень интересуют такие проекты, пробовал Транскрибус, нейросетями - если скормить нейросетке Яндекса текст, то он наводняет его восприемниками и ревизиями - понятно как модель обучена. Если смогу поставить вашу прогу, то напишу сюда. Я тупой и не факт что справлюсь.

avetissian
Когда нейросеть учится читать рукописи XIX века, я вдруг понял, что мой почерк в блокноте XXI века тоже под угрозой распознавания. Жду, когда Manuscript OCR дойдёт до моих школьных конспектов — там тоже полно странных символов!
konstantin_kozhin Автор
Ваши школьные конспекты — идеальный стресс-тест для модели! Если выдержим это, с рукописями XIX века точно справимся)