Гайд: как настроить API-распознавание документов за 30 минут

Рассказываю о том, как интегрировать распознавание документов за 30 минут — быстро и без головной боли.

Обложка: Гайд: как настроить API-распознавание документов за 30 минут

Всем привет! Меня зовут Егор, я Python-разработчик, и часто взаимодействую с компаниями среднего и малого бизнеса в качестве внешнего подрядчика. Например, модернизирую CRM в стоматологических клиниках.

Один из последних запросов — прикрутить к CRM автоматическое распознавание паспорта РФ.

Проблематика: стоматологическая клиника заметила, что ручное «перепечатывание» паспортов создает очереди при регистрации пациентов.

Вы отлично понимаете, о чем я, если когда-то ждали в клинике договор на обслуживание перед самым началом приема врача.

Для тех, кто сталкивается с похожими задачами по оптимизации процессов, я написал этот гайд.

Начало: как выбирали распознавание

Поскольку остановились совершенно на конкретном решении российской компании, на его примере и расскажу, что и как делать.

С чем сравнивали: с другим облачным сервисом и SDK-решением для распознавания паспортов. Тестировал сам на открытых демо-стендах и смотрел сравнения в других источниках. Например, здесь.

Что хотел от сервиса заказчик:

  • соотношение цена/качество
  • функционал без излишеств (нормальные скорость и качество распознавания)
  • простая тарификация для небольших объёмов, минимум общения с поставщиком

Что в итоге понравилось мне:

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

Начало работы

Чтобы начать работу с API, надо зарегистрироваться в личном кабинете сервиса.

При регистрации начисляют небольшой баланс для бесплатного тестирования – на 25 распознаваний. По запросу дали ещё 50 распознаваний.

В личном кабинете нас интересует раздел «Распознавание». Выбираем интересующий тип документа (в нашем случае – паспорт РФ, первый разворот и регистрация), прикрепляем PDF c двумя разворотами паспорта и начинаем распознавание.

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

Распознались все поля, включая сложные ключи, такие как машиночитаемые записи.

За расшифровкой всех ключей в ответе можно обратиться к документации: kyc.beorg.ru/reference_public/dev

Подключение к API

Для подключения к API нам понадобится:

Чтобы начать отправлять запросы в API, получаем ключи доступа. Находятся они в разделе «Проекты»:

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

Нам необходимо взять с этой страницы:

  1. token: токен, по которому API может нас авторизовать
  2. 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 два вида запросов:

  1. Отправить документ
  2. Получить результат

В результате получаем подобный ответ:

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

Выводы

Вот так просто мы написали небольшой скрипт, который позволяет получить данные из паспорта (и не только паспорта…) за несколько минут.

Разумеется существуют и другие платные и бесплатные сервисы распознавания документов (например от Google), но, увы, он практически ушел с российского рынка, а мы оперируем в этом вопросе персональными данными.

Резюме по избранному сервису распознавания:

  1. Просто
  2. Быстро (за кофе)
  3. Без головной боли для меня, как разраба
  4. Хорошее качество за свои деньги