Выпуск новостей завершён 15 сентября 2026. Материалы сохранены на дату публикации. Перейти к инструкциям →

Архив · Полный материал · Tproger

Как распознать паспорт на Python за 5 минут

Как распознать паспорт на Python за 5 минут: пошаговая интеграция Smart ID Engine, настройка распознавания паспорта РФ, обработка изображения и получение текстовых и графических данных. — Читать дальше « Как распознать паспорт на Python за 5 минут »

Наука · TprogerДима Дмитриев, Smart Engines3 минуты
Перейти к тексту ↓
Как распознать паспорт на Python за 5 минут
Tproger
Коротко о главномРазвернутьСвернуть
  1. Ввод данных паспорта – отправная точка для доступа к продуктам и услугам в банках и других финансовых организациях, страховых и телеком-компаниях.
  2. Технологии автоматического распознавания паспорта позволяют ускорить доступ клиента к услугам, избежать ошибок и рисков утечки персональных данных.
  3. Python для этого подходит идеально: на нем пишут и быстрые прототипы с MVP, и промышленные серверные и высоконагруженные системы.

Ввод данных паспорта – отправная точка для доступа к продуктам и услугам в банках и других финансовых организациях, страховых и телеком-компаниях. Технологии автоматического распознавания паспорта позволяют ускорить доступ клиента к услугам, избежать ошибок и рисков утечки персональных данных.

Python для этого подходит идеально: на нем пишут и быстрые прототипы с MVP, и промышленные серверные и высоконагруженные системы. Значит, распознавание можно встроить прямо в то приложение, где данные уже обрабатываются, без отдельного сервиса между ними.

Smart ID Engine распознает удостоверяющие личность документы и отдает структурированные данные и изображения отдельных полей: фото владельца, подпись, штамп. Полный код доступен на GitHub .

Пошаговое встраивание в Python-приложение

1. Подключение библиотеки

Для подключения библиотеки в проект необходимо скопировать в ваш проект файлы обертки (папка bindings), саму библиотеку (папка bin) и конфиг распознавания (папка data-zip с файлом bundle_…se). Обертку и библиотеку нужно подключить в проект:

sys.path.append(os.path.join(sys.path[0], '<path_to/bindings/python/>'))
sys.path.append(os.path.join(sys.path[0], '<path_to/bin/>'))
import pyidengine

2. Создание движка распознавания

Движок распознавания создается из конфига распознавания (data-zip/bundle_…se). В параметрах необходимо указать путь к нему и параметр ленивой инициализации (True/False). При значении False все внутренние объекты будут инициализированы сразу не дожидаясь, когда они понадобятся для какой-то конкретной сессии.

engine = pyidengine.IdEngine.Create('<path_to_config>', True)

3. Настройка распознавания

Настройка распознавания (settings) включает в себя выбор режима распознавания (mode), маски документа (document type masks), а также при желании указание дополнительных опций. Для распознавания документа по одному изображению используется режим singleshot (если документ распознается по нескольким картинкам — default). Для внутреннего паспорта РФ требуется специфицировать маску документа, указав rus.passport.national в доступных к распознаванию документах.

settings = engine.CreateSessionSettings()
settings.SetCurrentMode("singleshot")
settings.AddEnabledDocumentTypes("rus.passport.national")

4. Распознавание документа

Сессия распознавания паспорта РФ подразумевает распознавание одного документа (по одному или нескольким кадрам). Для распознавания другого документа создайте новую сессию, настройки можно оставить те же. Создание сессии осуществляется путем указания ранее созданных настроек (settings) и персонализированной подписи (personalized_signature).

session = engine.SpawnSession(settings, <personalized_signature>)

Загрузка изображения паспорта РФ по пути (path_to_image):

image = pyidengine.Image.FromFile(<path_to_image>)
session.Process(image)
result = session.GetCurrentResult()

5. Извлечение информации из результата распознавания

doc_type = result.GetDocumentType()
print(f"Тип документа: {doc_type}")
Тип документа: rus.passport.national
doc_info = session.GetDocumentInfo(doc_type)
description = doc_info.GetDocumentDescription()
print(f"Описание документа: {description}")
Описание документа: Russian Passport (national)

Текстовые поля

Включают все текстовые строки, которые были извлечены с документа

text_field_iterator = result.TextFieldsBegin()
print("Текстовые поля:")
while(text_field_iterator != result.TextFieldsEnd()):
field = text_field_iterator.GetValue()
name = field.GetName() # название поля
value = field.GetValue().GetFirstString().GetCStr() # значение поля
is_accepted = "+" if field.GetBaseFieldInfo().GetIsAccepted() else "-" # представленность поля
confidence = field.GetBaseFieldInfo().GetConfidence() # уверенность распознавания поля
print(f"[{is_accepted}] ({confidence:.2f}) {name}: {value}")
text_field_iterator.Advance()
Текстовые поля:
[+] (1.00) birthdate: 12.09.1982
[+] (1.00) birthplace: ГОР. АРХАНГЕЛЬСК
[+] (1.00) name: ЕВГЕНИЙ
[+] (1.00) number: 000000
[+] (1.00) patronymic: АЛЕКСАНДРОВИЧ
[+] (1.00) series: 1104
[+] (1.00) surname: ИМЯРЕК
...

Полный вывод содержит более 30 полей, включая информацию об органе выдачи и MRZ-строку.

Поля изображений

Включают в себя вырезанные из исходного документа зоны интереса при их наличии. Для паспорта РФ — это подпись владельца, подпись органа выдачи, фото владельца, штамп.

image_field_iterator= result.ImageFieldsBegin()
while(image_field_iterator != result.ImageFieldsEnd()):
field = image_field_iterator.GetValue()
name = field.GetName() # название поля
image = field.GetValue() # изображение
is_accepted = "+" if field.GetBaseFieldInfo().GetIsAccepted() else "-"
# представленность поля
confidence = field.GetBaseFieldInfo().GetConfidence() # уверенность распознавания поля
width = field.GetValue().GetWidth()
height = field.GetValue().GetHeight()
print(f"[{is_accepted}] ({confidence:.2f}) {name} {width} x {height}")
image_field_iterator.Advance()
[+] (1.00) authority_signature 700 x 550
[+] (1.00) photo 214 x 214
[+] (1.00) signature 700 x 550

Заключение

Как можно убедиться, распознавание паспорта можно легко встроить на Python. На выходе система Smart Engines возвращает структурированный результат, включая текстовые данные, подписи, печати и другие реквизиты и атрибуты документа.

При этом распознавание паспорта на Python – не единственный вариант интеграции Smart ID Engine. Та же библиотека может работать и как часть мобильного или десктоп-приложения, а также прямо в браузерах или мессенджерах. Выбор конкретного варианта зависит от того, какие документы нужно распознавать и откуда поступает изображение – подробнее об этом можно прочитать на сайте Smart Engines .

Реклама. Рекламодатель: ООО «Смарт Энджинс Сервис» ИНН 7728328449, erid: 2W5zFJof1MB