Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. token: токен, по которому API может нас авторизовать
  2. machine_uid: номер машины, с которой планируется посылать запрос для разделения отслеживания документов со стороны клиента

project_id: идентификатор проекта

Общение по API должно происходить в соответствии со схемой:

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

Пишем скрипт:

			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. Получить результат

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

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

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

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

Выводы

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

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

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

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