Логотип библиотеки manuscript-ocr
Логотип библиотеки manuscript-ocr

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

Manuscript OCR — это open-source проект, опубликованный на GitHub и GitVerse.

Старина и нейросети: зачем мы учим ИИ читать рукописи

Представьте: перед вами пожелтевший лист рукописи XIX века. Строчки выведены красивым витиеватым почерком — но понять, что там написано, почти невозможно. Непривычные буквы, дореволюционная орфография, странные сокращения. И всё это — на фоне пятен, потёртостей и разрывов бумаги.

Скан страницы отчета губернатора Енисейской губернии за 1858 год
Скан страницы отчета губернатора Енисейской губернии за 1858 год

Если попробовать распознать такой текст с помощью обычной OCR-системы (например, Tesseract или EasyOCR), результат будет... грустным. Вместо связного текста — каша из символов. Почему? Проблема в самом материале:

  • дореформенная кириллица содержит символы, которых больше нет в языке (ѣ, і, ѳ и др.);

  • тексты написаны от руки — и каждый почерк по-своему «уникален»;

  • сами страницы повреждены, выцветшие, кривые и с тенями от переплёта.

Современные OCR-инструменты на таких документах распознают в лучшем случае 30–40% символов. А бывает, и вовсе не могут ничего прочитать. Потому что они просто не обучены на таком материале.

Что мы решили сделать

Мы создали бесплатную и открытую OCR-библиотеку, специально обученную распознавать рукописные документы дореформенной России. Проект уже включает в себя:

  • поддержку дореволюционной орфографии, включая редкие символы и титла (надстрочные сокращения);

  • устойчивую работу с низким качеством сканов — со сгибами, пятнами, потёртостями и другими архивными артефактами;

  • возможность дообучения модели под конкретные почерки и фонды.

Мы называем это «цифровым ключом» — инструментом, который открывает доступ к историческим документам, до сих пор остававшимся неприступными для машин.

400 тысяч слов вручную — и всё ради науки

Идея была простой: чтобы нейросеть научилась читать старинные рукописи, ей нужны примеры. Много примеров. А вот с этим и была главная трудность.

Мы начали с архивных сканов из волонтёрского проекта FromThePage, где энтузиасты вручную расшифровывали документы XIX века. Это большая и ценная работа, и мы с благодарностью ссылаемся на неё как на источник. Однако для обучения нейросети таких данных оказалось недостаточно: нужны были точные координаты каждого слова на изображении — а такая разметка в проекте не велась.

Поэтому мы использовали именно сканы, а всю разметку — расшифровки и координаты — создали самостоятельно.

Чтобы ускорить этот процесс, мы разработали собственный инструмент — Anno OCR. Это локальный и бесплатный редактор разметки, который легко адаптировать под конкретные задачи. С ним можно быстро отрисовывать bounding box-ы, вводить текст, перемещаться по страницам и экспортировать всё в формат для обучения. 

Интерфейс программы Anno OCR: слева — исходный скан, справа — панель расшифровок
Интерфейс программы Anno OCR: слева — исходный скан, справа — панель расшифровок

Так мы разметили около 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)


  1. avetissian
    28.10.2025 20:35

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


    1. konstantin_kozhin Автор
      28.10.2025 20:35

      Ваши школьные конспекты — идеальный стресс-тест для модели! Если выдержим это, с рукописями XIX века точно справимся)


  1. Bifid
    28.10.2025 20:35

    А почерк врача распознавать ваша нейросеть умеет ?


    1. konstantin_kozhin Автор
      28.10.2025 20:35

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


  1. AlexLeonov
    28.10.2025 20:35

    Искренне желаю вам удачи, но пока что качество распознавания оставляет желать лучшего и, если честно, ничем не отличается от других инструментов.

    Если посимвольно примерно половину символов инструмент распознает, то пословно - полный провал, конечно. Даже в печатном тексте, не говоря о рукописном.

    Вот пример: метрическая книга начала 20 века. Почерк весьма читаемый, разборчивый. Результат - плачевный.


    1. konstantin_kozhin Автор
      28.10.2025 20:35

      Спасибо, что не прошли мимо и за честный фидбэк! Версия на сайте — старая, ей уже около трёх месяцев. Сейчас мы активно дорабатываем библиотеку: дообучаем, тестируем, собираем обратную связь.

      По вашему примеру как раз видно, что с детекцией у нас уже всё довольно стабильно — она хорошо работает даже на сложных сканах. Сейчас на подходе более стабильная версия модуля распознавания: пробуем разные архитектуры, настраиваем параметры. Параллельно подключаем языковой корректор на базе LLM — он поможет подтянуть финальный текст и учитывать дореформенную орфографию.

      Финальную версию с экспериментами и метриками на разных данных планируем выложить к декабрю, после завершения гранта. Наша цель — не просто сделать одно решение, а создать инструмент, который можно дообучать и адаптировать под свои задачи. Будем очень рады любым идеям, советам и конструктивной критике!


      1. AlexLeonov
        28.10.2025 20:35

        Я могу поделиться с вами ресурсом на тестирование вашего решения. Есть доступ к архивам, есть целевые сканы, распознавание которых востребовано, есть и тестировщики, которые смогут это проверять.

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

        Но пока, если честно, я не вижу, с чего тут даже начать, нынешнее распознавание в половину букв даже не попадает.


        1. vilgeforce
          28.10.2025 20:35

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


          1. AlexLeonov
            28.10.2025 20:35

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


          1. bilayan
            28.10.2025 20:35

            Волонтеров, обычно интересующиеся своей генеалогией, не сказать чтоб прям очень много. А архивов много разных и объемы оч большие (даже просто отсканировать и где то как то хранить потом - проблема).

            Вручную разбирать абсолютно всё никто не будут, все ищут по большей части только конкретно их интересующие вещи, а это очень узкий пласт.

            Волонтёры скажут спасибо даже если будут просто сканы доступны без распознавания, даже если не за бесплатно будет возможность сканировать по требованию как в библиотеках. Сейчас с этим сложности. И вдвойне сложности если это еще и соседние страны бывшие в СССР.


        1. PereslavlFoto
          28.10.2025 20:35

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

          В этой очереди только люди, которые не могут платить, и архивы, которые не могут платить.


          1. AlexLeonov
            28.10.2025 20:35

            >> В этой очереди только люди, которые не могут платить

            Не хочу вас разочаровывать, но такое явление, как "выкуп" сканов из архивов весьма развито. Буквально недавно лично участвовал в сборе, более чем на 50 000 рублей за одно конкретное дело.

            И ничего, нашлись желающие заплатить. И нашелся архив, готовый оплату принять.


            1. PereslavlFoto
              28.10.2025 20:35

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


      1. anasana
        28.10.2025 20:35

        Если детекция мест, где на листе есть текст и графика, работает, то интересен такой кейс - перенос таких областей 1-в-1 в те же места просто на новый чистый лист и сохранение его так же картинкой.

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


  1. vilgeforce
    28.10.2025 20:35

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


    1. vilgeforce
      28.10.2025 20:35

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


      1. konstantin_kozhin Автор
        28.10.2025 20:35

        Да, мы применяли собственный софт — просто в моменте так было быстрее. По функциональности он близок к Label Studio, но у нас была возможность сразу «на коленке» дорабатывать интерфейс и добавлять нужные фичи. Например, мы прикрутили автокоррекцию через сайт «Славеница», чтобы ускорить расшифровку.

        В одной из следующих статей обязательно расскажем подробнее про наш опыт разметки и вспомогательные инструменты, которые делали под это. Покажем, как всё устроено, и выложим код — чтобы можно было использовать или доработать под свои задачи. Было бы интересно вместе подумать, чего не хватает существующим OCR-разметчикам и что можно было бы добавить.


        1. vilgeforce
          28.10.2025 20:35

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


          1. bilayan
            28.10.2025 20:35

            Для такого рукописного текста не будет особо разницы что DJVU что PDF, сегментатору и там и там будет тяжко. А как контейнер для картинок - еще вопрос что использовать. у PDF есть как минимум Jpeg2000 для сжатия (если вы не планируете к чёрно-белому приводить, то душим растр разными способами и PDF с jpeg2k должен быть норм)

            При наличии координат блоков текста/слов/букв, внедрить это что в DjVu что в PDF не должно составлять особого труда.

            С DjVu конечно попроще, и там выбор есть использовать djvused или djvutoy

            Нагенерировать файлики и просто внедрить

            Формат там простенький

            пришлось скриншотом, потому что разметку xml в спойлере хабр захотел скушать

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


  1. commers
    28.10.2025 20:35

    к сожалению работает плоховато


  1. commers
    28.10.2025 20:35


  1. Seachlyn
    28.10.2025 20:35

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