Содержание
Независимый разработчик и интегратор написал пошаговый гайд о внедрении продукта «Биорг.Паспорт» для автоматического распознавания паспортов и документов, удостоверяющих личность.
Меня зовут Егор, я Python-разработчик и часто взаимодействую с компаниями среднего и малого бизнеса в качестве внешнего подрядчика. Например, модернизирую CRM в стоматологических клиниках.
Один из последних запросов — прикрутить к CRM автоматическое распознавание паспорта РФ.
Проблематика: стоматологическая клиника заметила, что ручное «перепечатывание» паспортов создаёт очереди при регистрации пациентов.
Вы отлично понимаете, о чём я, если когда-то ждали в клинике договор на обслуживание перед самым началом приёма врача.
Для тех, кто сталкивается с похожими задачами по оптимизации процессов, я написал этот гайд.
Поскольку остановились на конкретном решении российской компании, на его примере и расскажу, что и как делать.
С чем сравнивали: с другим облачным сервисом и SDK-решением для распознавания паспортов. Тестировал сам на открытых демо-стендах и смотрел сравнения в других источниках. Например, здесь.
Что хотел от сервиса заказчик:
Что в итоге понравилось мне:
Чтобы начать работу с API, нужно зарегистрироваться в личном кабинете сервиса.
При регистрации начисляют небольшой баланс для бесплатного тестирования — на 25 распознаваний. По запросу дали ещё 50 распознаваний.
В личном кабинете нас интересует раздел «Распознавание». Выбираем интересующий тип документа (в нашем случае — паспорт РФ, первый разворот и регистрация), прикрепляем PDF с двумя разворотами паспорта и начинаем распознавание.

Получаем паспортные данные в формате JSON. Результаты можно наблюдать ниже:

Распознались все поля, включая сложные ключи, такие как машиночитаемые записи.
За расшифровкой всех ключей в ответе можно обратиться к документации: kyc.beorg.ru/reference_public/dev
Для подключения к API понадобится:
Чтобы начать отправлять запросы в API, получаем ключи доступа. Находятся они в разделе «Проекты»:

Нажимаем пиктограмму с глазом и наблюдаем все необходимые ключи доступа и примеры запросов:

Нам необходимо взять с этой страницы:
token — токен, по которому API может нас авторизовать;machine_uid — номер машины, с которой планируется посылать запрос;project_id — идентификатор проекта.Общение по API должно происходить в соответствии со схемой:

Пишем скрипт:
import requests
import base64
from time import sleep
PATH_TO_IMAGE = "/home/usr/Downloads/41f28357a0b2464287415c383c7d1b7a.pdf"
PROJECT_ID = "U_RATE_2"
TOKEN = "<ваш токен>"
MACHINE_UID = "<ваш идентификатор машины>"
# вид документа
TYPE = "PASSPORT_REG"
# кодируем изображение в base64
with open(PATH_TO_IMAGE, "rb") as image_file:
image = base64.b64encode(image_file.read()).decode()
image_file.close()
# отправляем изображение документа в beorg
document = requests.post(
"https://api.beorg.ru/api/bescan/add_document",
headers={"Content-Type": "application/json", "Accept-Language": "ru"},
json={
"project_id": PROJECT_ID,
"token": TOKEN,
"machine_uid": MACHINE_UID,
"images": [image],
"process_info": [
{
"type": TYPE
}
],
},
)
# достаём из ответа номер для отслеживания
document_id = document.json().get("document_id")
print(f"Номер для отслеживания: {document_id}")
if document_id is not None:
# опрашиваем API, пока не получим результат
result_req = requests.get(f"https://api.beorg.ru/api/document/result/{document_id}?token={TOKEN}")
while result_req.status_code != 200:
print("Документ обрабатывается")
sleep(1)
result_req = requests.get(f"https://api.beorg.ru/api/document/result/{document_id}?token={TOKEN}")
# достаём данные из ответа API
result = result_req.json()
print("/////////////////////")
print("Результат:")
print(result)
Тут всё просто. Всё обрабатывается на стороне Beorg. Также вы можете взять скрипт из репозитория на GitHub.
Вам нужно всего лишь посылать на API два вида запросов:
В результате получаем подобный ответ:

Посмотреть виды запросов можно в документации или в разделе «Распознавание».

Вот так просто мы написали небольшой скрипт, который позволяет получить данные из паспорта (и не только паспорта) за несколько минут.
Разумеется, существуют и другие платные и бесплатные сервисы распознавания документов (например, от Google), но он практически ушёл с российского рынка, а мы оперируем персональными данными.
Резюме по избранному сервису распознавания:
Оригинальный материал опубликован на ресурсе Tproger.
Для подключения понадобятся: Python 3, библиотеки base64 и requests, а также ключи доступа из личного кабинета — token, machine_uid и project_id. Документация с описанием всех эндпоинтов и примерами запросов доступна по адресу kyc.beorg.ru/reference_public/dev.
Да. При регистрации в личном кабинете начисляется баланс на 25 бесплатных распознаваний. По запросу можно получить ещё 50 тестовых распознаваний. Оплата за реальные распознавания возможна с карты физического лица.
API поддерживает распознавание паспортов РФ (первый разворот и страница с регистрацией), водительских удостоверений, ПТС и других документов, удостоверяющих личность. Тип документа задаётся параметром type в запросе, например PASSPORT_REG для паспорта с пропиской.
API возвращает данные в формате JSON. В ответе содержатся все распознанные поля документа, включая сложные ключи — например, машиночитаемые записи (MRZ). Полный список ключей с расшифровкой доступен в документации по адресу kyc.beorg.ru/reference_public/dev.
Схема состоит из двух запросов: сначала отправляется изображение документа (POST на /api/bescan/add_document), в ответ приходит document_id для отслеживания. Затем по этому идентификатору выполняется GET-запрос на /api/document/result/{document_id} до получения результата со статусом 200.
Да. API легко интегрируется в любую систему, которая поддерживает HTTP-запросы. В статье описан пример интеграции в CRM стоматологической клиники на Python. Готовый скрипт доступен на GitHub. Для коммерческих систем достаточно подставить свои ключи доступа из личного кабинета.
Работаем только с юридическими лицами
Работаем только с юридическими лицами.
Работаем только с юридическими лицами.
Ошибка: Контактная форма не найдена.
Ошибка: Контактная форма не найдена.
Ошибка: Контактная форма не найдена.