К содержимому
Все кейсы
  • API
  • OCR
  • Документы

OCR Anketus.
Фото документа.
Готовые поля.

Разработали API, который извлекает данные из документов и возвращает их для заполнения анкеты. Значения полей, предупреждения и проверки собраны в одном ответе.

4типа документов
4формата файлов
2OCR-движка

Подключён к сервису анкет Zagran

Данные для анкетыв структурированном ответе

Демонстрация заполнения анкеты по ответу OCR Anketus. Данные и оценки вымышлены
Макет анкеты с распознанными полями на телефоне, вымышленные данные
Пример интеграции API. Все данные и оценки на макетах вымышлены
Проект
OCR Anketus
Задача
Данные из фото документов
Наша работа
API, OCR-конвейеры, проверки, интеграция
Статус
Работает онлайн

Перенести данные
из фото в анкету

Паспортные реквизиты, даты, данные ребёнка и адрес регистрации приходится вводить в формы вручную. На фотографии эти сведения уже есть, но у документов разная структура, шрифты и качество снимка.

Сделали отдельный сервис распознавания. Он принимает файл, выбирает конвейер документа и возвращает готовые поля с проверками. Анкета может подставить результат и оставить пользователю возможность сверить и исправить данные.

Паспорт РФ

ФИО, дата рождения, серия и номер, орган выдачи и код подразделения.

Загранпаспорт

Реквизиты, даты, орган выдачи и данные машиночитаемой зоны.

Свидетельство о рождении

Данные ребёнка, родителей, серия, номер и актовая запись.

Регистрация

Дата регистрации, исходная строка адреса и его отдельные части.

Каждому документу
свой набор полей

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

Примеры ниже показывают структуру ответа API. Все персональные данные и оценки уверенности вымышлены

Пример ответа

Реквизиты и личные данные

Поля получены

Вымышленный образец

Паспорт РФИллюстрация входящего файла
Фамилия
ИВАНОВУверенность: 0,98
Имя
ИВАНУверенность: 0,97
Серия
4500Уверенность: 0,96
Номер
123456Уверенность: 0,96
Дата рождения
1990-01-15Уверенность: 0,95
Код подразделения
770-001Уверенность: 0,89

Разворот делится на зоны. Поля с разных страниц дополняют общий результат: личные данные, серия, номер и орган выдачи.

Посмотреть ответ API в JSON
{
  "request_id": "demo-request",
  "status": "success",
  "document_type": "passport_rf_internal",
  "detected_document_type": "passport_rf_internal",
  "fields": {
    "last_name": {
      "value": "ИВАНОВ",
      "confidence": 0.98
    },
    "first_name": {
      "value": "ИВАН",
      "confidence": 0.97
    },
    "passport_series": {
      "value": "4500",
      "confidence": 0.96
    },
    "passport_number": {
      "value": "123456",
      "confidence": 0.96
    },
    "birth_date": {
      "value": "1990-01-15",
      "confidence": 0.95
    },
    "division_code": {
      "value": "770-001",
      "confidence": 0.89
    }
  },
  "validation": {
    "format_checks_passed": true,
    "mrz_match": null,
    "required_fields_present": true
  },
  "warnings": []
}

Оценки уверенности относятся к отдельным распознанным полям и помогают выбрать данные для дополнительной проверки. В этом примере они заданы вручную для демонстрации.

Из изображения
в структурированный ответ

Основной конвейер выполняется на сервере сервиса. Для обработки документа используются локальные OCR-движки, отдельные правила извлечения и проверки полей.

  1. 01

    Файл

    Фото или первая страница PDF

  2. 02

    Подготовка

    Границы, наклон и контраст

  3. 03

    Распознавание

    RapidOCR и Tesseract

  4. 04

    Извлечение

    Конвейер выбранного документа

  5. 05

    Проверки

    Форматы, полнота и MRZ

Интеграция

Один запрос.
Поля для вашей формы.

API принимает файл и необязательную подсказку типа документа. Схема ответа единая для всех конвейеров. Этот сервис подключён к Zagran, где данные документов используются при заполнении анкеты.

Публичная документация Swagger OCR Anketus: метод recognize, заголовок X-API-Key и параметры файла
Реальная документация работающего API

Разобрать документ.
Сохранить смысл полей.

Сложности были в качестве снимков, разных формах документов, чтении штампов и ограничениях сервера. Для этих случаев сделали отдельные проходы и правила обработки.

Фото с наклоном и разным светом

Как решили

Перед OCR определяем границы документа, исправляем перспективу и небольшой наклон, усиливаем контраст. Разворот паспорта разбираем по страницам: зоны личных данных и реквизитов получают отдельные проходы. Для штампа регистрации предусмотрена своя подготовка изображения.

Разные документы и источники текста

Как решили

Сделали четыре конвейера извлечения. Объединяем строки RapidOCR и Tesseract, учитываем расположение полей и похожие латинские и кириллические символы. В паспортах используем машиночитаемую зону: проверяем контрольные цифры и сопоставляем её с видимыми реквизитами.

Работа на обычном CPU

Как решили

Исходный OCR-движок не запускался на процессоре сервера без AVX. Перешли на RapidOCR с ONNX Runtime, сохранив общий интерфейс распознавания. Независимые проходы OCR и обработку страниц паспорта запускаем параллельно. Для загранпаспорта Tesseract используется как дополнительный проход, когда первого результата недостаточно.

Ответ, который можно проверить

Как решили

API возвращает значения полей, оценки уверенности, проверки форматов и обязательных данных, предупреждения и статус частичного результата. Тип, определённый классификатором, отдаётся отдельно от подсказки клиента. Доступ к распознаванию защищён X-API-Key, для файлов есть ограничение размера и обработка неподдерживаемых форматов.

PythonFastAPIRapidOCRONNX RuntimeTesseractOpenCVPydanticDocker

Готовый API.
Проверенный путь обработки.

Сервис возвращает данные документов в общей структуре и уже используется в анкетах Zagran. Качество ответа можно проверять по полям, полноте результата и предупреждениям.

4

типа документов

Включая страницу регистрации в паспорте

4

формата файлов

JPEG, PNG, WebP и первая страница PDF

2

OCR-движка

RapidOCR и Tesseract в одном конвейере

11

сканов в сравнении версий

Один и тот же набор для v2 и v3

Сравнение v2 и v3

Быстрее на том же
наборе сканов

−6,2%общее время прогона
v2
144,4 с
v3
135,5 с

Сравнение выполнено на одном наборе из 11 сканов четырёх типов документов. Сохранённые результаты прогона от . Это замер конкретного тестового набора; время отдельного запроса зависит от изображения и типа документа.

Число конвейеров, форматы файлов и движки проверены по исходному коду проекта на . Публичные документация и health-эндпоинт доступны. Сохранённые замеры скорости относятся к сравнению версий, а примеры выше показывают вымышленный ответ API.

Распознавание встроено в общий путь заполнения анкеты. Сервис отдаёт найденные поля и сигналы проверки, а пользователь может сверить результат с документом и исправить его в форме.

Следующий продукт

Нужно получать данные из документов?

Разберём типы файлов, поля, проверки и интеграцию с вашей системой

Обсудить проект