Skip to content
Protei edited this page Oct 21, 2026 · 15 revisions

RussianDocs OCR

Распознавание и валидация документов РФ (паспорт, водительское удостоверение, СНИЛС, загранпаспорт, свидетельство о рождении, свидетельство о регистрации ТС) по фотографии с телефона или скану — полностью локально, без внешних сервисов. Библиотека на Python + референс-сервис (FastAPI + Vue) + порты на Go, .NET и Kotlin/JVM с доказанным паритетом.

Вики — навигация и справка. Нормативные документы (лицензия, безопасность, процедуры) живут в репозитории и версионируются вместе с кодом — здесь на них только ссылки.

Поддерживаемые документы

Документ Серии / годы выпуска
Внутренний (общегражданский) паспорт 1997–2011 и 2011+
Страница регистрации внутреннего паспорта адрес, печатные и рукописные строки (рукописные пока не распознаются); штампы регистрации: вид штампа, его адрес, какую регистрацию снимает «снят с учёта», действующая регистрация
Водительское удостоверение 2011–2019 и 2020+; оборот опознаётся (DLBACK_ALL), поля оборота пока не читаются
СНИЛС 1996+
Загранпаспорт биометрический 2007+, без биометрии 2003+
Свидетельство о рождении бланки образца 1998 и 2018 годов (форма приказа Минюста № 167), включая дату актовой записи
Свидетельство о регистрации ТС (СТС) старая форма (1996) и новая (2019), обе стороны; признак лизинга

Серии различаются моделями и набором полей, поэтому годы выпуска — часть типа (INTPASSPORT_2011, BIRTHCERT_1998, …). Как добавить новый тип — docs/add-doc-type.md.

С чего начать

Я хочу… Идти сюда
подключить распознавание к своему Python-проекту Интеграция → «Как pip-пакет»
поднять готовый REST-сервис с веб-интерфейсом Интеграция → «Сервис»
использовать из Go / C# / Kotlin Интеграция → «Порты»
понять, почему что-то не работает Диагностика и FAQ
узнать, насколько это точно и быстро Точность и производительность
понять, что происходит с персональными данными Персональные данные
понять, как выкладываются и скачиваются веса моделей Веса моделей
узнать, что планируется дальше Планы

Последние обновления

Версия Главное
4.10.0 разбор в памяти без хранения (PROCESSING_MODE=memory, #24): сервис и порты разбирают документ внутри запроса и ничего не сохраняют; README переписан простым русским; веса не менялись
4.9.0 признак проверки у каждого поля (results.field_checks): «проверено / не сходится / проверить нечем» — по машиночитаемой зоне, контрольным цифрам, контрольному числу СНИЛС и согласованности дат; чтение не исправляется; порты Go, .NET и Kotlin выдают то же; веса не менялись
4.8.1 тесты порта .NET снова собираются (новый компилятор C# на машинах GitHub); распознавание и веса не менялись
4.8.0 штампы регистрации на странице прописки (#27): у каждого штампа свой адрес, «снят с учёта» указывает снятую регистрацию, определяется действующая; классификатор типа и угла переобучен (права на боку); порты Go, .NET и Kotlin читают страницу прописки целиком; набор весов models-v11
4.7.2 порт Go снова собирается на Linux; набор тестов укладывается в память CI; распознавание не менялось
4.7.1 сопоставление с подложкой больше не зависит от платформы: решение «выпрямлять ли СТС» одинаково на Windows и Linux; порты на Linux совпадают с эталонами по всем четырём случаям СТС
4.7.0 сначала документ, потом тип: детектор документов вырезает документ из кадра (#26), process_frame читает все документы кадра; оборот прав опознаётся; СТС выпрямляется по подложке, признак лизинга; дата актовой записи свидетельства; порты Go, .NET и Kotlin вровень с Python, включая рамки на исходном снимке; набор весов models-v10
4.6.1 свидетельства о рождении 1998 года: рамка поля больше не срезает край цифр, даты читаются заметно лучше (#25); набор весов models-v8 (отличается от v7 одним детектором полей)
4.6.0 новый тип — СТС (#17), обе формы и обе стороны; набор весов models-v7 (требует 4.6.0); рамки полей на исходном снимке (results.field_quads, #18); вход по учётным записям в сервисе и портах (#21); requirements.txt заменён набором 2026 года
4.5.0 внутренний паспорт восстанавливается по шаблону бланка (на настоящих сканах точных полей 65,6 % → 83,3 %); детектор полей и детектор слов переобучены, набор весов models-v6; дата в каноническом виде рядом с прочитанной; порты Go, .NET и Kotlin догнали эталон; значения полей на паспортах могут измениться
4.4.1 состав тестовых данных приведён к безопасному; проверки без материала пропускаются с указанием причины; сверка портов умеет объявлять случай отозванным
4.4.0 новый тип BIRTHCERT_2018 и поле MRZ; точных полей 1410 → 1489 из 1583; ломающее: печатная точка в сокращениях и упразднение метки BIRTHCERT_2004
4.3.0 серия/номер паспортов — кириллическим движком (фикс «3→8» из issue #12): exact 103/113 → 111/113; фикс двойного декодирования в детекторах (#13)
4.2.1 патч безопасности зависимостей (Dependabot: python-multipart, nanoid, pydantic-settings, pytest)
4.2.0 свидетельства о рождении во всех трёх портах + первый conformance-кейс BIRTHCERT

Полная история — CHANGELOG.md.

Какой документ отвечает на какой вопрос

Вопрос Документ в репозитории
Как установить и вызвать README.md
Как устроен и разворачивается сервис service/README.md
Что где лежит в портах и как их проверять ports/README.md
Численные конвенции, обязательные для любого порта ports/CONVENTIONS.md
Как выпускается набор весов моделей docs/models-release.md
Как добавить новый тип документа docs/add-doc-type.md
Официальные цифры точности и как измерить самому docs/accuracy.md
Безопасность, ответственность оператора ПДн, 152-ФЗ SECURITY.md
Откуда образцы в samples/ и почему это не чьи-то документы samples/README.md
Как контрибьютить CONTRIBUTING.md
История изменений CHANGELOG.md

Два независимых номера версий

  • Код — SemVer-теги vX.Y.Z (релизы).
  • Веса моделей — теги models-<набор>; состав зафиксирован по SHA-256 в models.lock.json, скачивает scripts/fetch_models.py / rdocs-fetch-models. Веса в git не хранятся. У каждой сети внутри набора своя версия, и новый набор выкладывает только изменившиеся сети — Веса моделей.

Почему оси разделены и как публикуется набор — docs/models-release.md.

Лицензия и поддержка

MIT — и код, и веса моделей (подробности: LICENSE, NOTICE). Проект выполнен при финансировании Фонда содействия инновациям.