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

Метод /recognize

Алгоритм распознавания документов включает в себя классификацию документов на изображении и распознавание в нём текста полей.

Алгоритм работы метода API /recognize

  1. Алгоритм ищет на входящем изображении прямоугольные области, похожие на документы, и вырезает их.

  2. Классификатор присваивает каждой вырезанной области класс: главный разворот паспорта России, водительское удостоверение образца 2011 года, СНИЛС и так далее. По ссылке доступен список поддерживаемых типов документов.

  3. Алгоритм оценивает ориентацию документа в пространстве. При необходимости, классификатор поворачивает или зеркально отражает документ.

  4. Алгоритм находит и вырезает поля документа. Например, в паспорте отдельно вырезаются фамилия, место рождения, серия, номер и остальные поля.

  5. Алгоритм OCR оцифровывает символы на вырезанном поле документа.

  6. OCR присваивает результату распознавания «уровень уверенности» confidence.

  7. Если включен режим ручного распознавания, модуль HITL обрабатывает пару «вырезанное поле + оцифрованный текст» .

  8. Оцифрованный текст проходит верификацию по маскам и словарям.

Уровень уверенности confidence

Параметр confidence в ответе показывает уровень уверенности алгоритма в корректности распознавания символов:

  • 0.90-1.00 — абсолютно уверен;

  • 0.70-0.89 — вполне уверен;

  • 0.50-0.69 — в ответе возможна ошибка;

  • 0.01-0.49 — в поле наверняка есть ошибка;

  • 0 — в поле точно ошибка.

Алгоритм вернёт пустой ответ с нулевым confidence, если оцифрованный текст не пройдёт проверку по маскам и словарям. Например, дата рождения «56.12.1988» не попадёт в ответ.

Функция сверки полей с внешним файлом

Функция сравнивает результаты распознавания полей с текстом из вашего файла. Это полезно, когда вы хотите сверить данные из изображений документов с данными из других источников. Для использования функции дополнительно укажите JSON-файл в параметре verify_fields.

Ниже показан пример JSON-файла для сравнения серии-номера и ФИО из паспорта РФ с результатами распознавания:

{
  "series_and_number": "1111 222222",
  "surname": "Иванов",
  "first_name": "Иван",
  "other_names": "Иванович"
}

Для составления своего JSON-файла скопируйте наименования полей из API-спецификации.

Функция сверки возвращает атрибут "valid" для каждого поля документа. Допустимые значения атрибута:

  • "true" — текст поля в JSON-файле и в результатах распознавания совпадают;

  • "false" — текст не совпадает;

  • "null" — поле отсутствует в JSON-файле.

Помимо этого, функция сверки возвращает атрибут "levenshtein" — расстояние Левенштейна для результата распознавания и аналогичного поля из внешнего JSON-файла.

API-спецификация

Ниже представлена API-спецификация для метода распознавания документов. Подробнее о том, как составить запрос на распознавание, в разделе Подключение и тестирование.

recognize

POST https://latest.dbrain.io/recognize

Query Parameters

Request Body

{
  "detail": [ // техническая информация
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string"
    }
  ],
  "items": [
    {
      "doc_type": "passport_main", // тип документа
      "fields": {
        "date_of_birth": { // наименование поля документа
          "text": "01.04.2004", // значение поля документа
          "confidence": 0.5262104272842407 // параметр Confidence
          "valid": null, // результат проверки при наличии в запросе verify_fields
          "levenshtein": null, // расстояние левенштейна после проверки при наличии в запросе verify_fields
          "coords": [ // координаты поля во входном файле
            [
              [
                873,
                1468
              ],
              [
                1187,
                1468
              ],
              [
                1187,
                1520
              ],
              [
                873,
                1520
              ]
            ]
          ]
        },
        "date_of_issue": { // наименование поля документа
          "text": "01.04.2018", // значение поля документа
          "confidence": 0.5271461009979248 // параметр Confidence
          "valid": null, // результат проверки при наличии в запросе verify_fields
          "levenshtein": null, // расстояние левенштейна после проверки при наличии в запросе verify_fields
          "coords": [ // координаты поля во входном файле
            [
              [
                752,
                1142
              ],
              [
                947,
                1142
              ],
              [
                947,
                1196
              ],
              [
                752,
                1196
              ]
            ]
          ]          
        }
      },
      "color": true, // цветность изображения в рамках объекта ("true", если цветное; "false", если ч/б)
      "other": 
      {
        "external_check_results": 
        {
          "inn": "1234567890",
          "fico":
          {
            "errorCode": 0,
            "status": "SUCCESS",
            "exclusionCode": 0,
            "score": 620,
            "reasonCode1": "D9",
            "reasonCode2": "M1",
            "reasonCode3": "T5",
            "reasonCode4": "A6",
            "reasonCode1Desc": "Слишком мало времени с момента последней просрочки",
            "reasonCode2Desc": "Количество счетов с просрочками",
            "reasonCode3Desc": "Слишком много недавних запросов кредитной истории по субъекту",
            "reasonCode4Desc": "Размер задолженности по просроченным счетам",
            "scoreSource": "nbki"
          },
          "pledges_list": [],
          "vehicle_restrict_list": [],
          "vehicle_wanted_list": [],
          "vehicle_dtp_and_restrict": 
          {
            "restrict_list": [],
            "dtp_list": []
          },
          "is_valid": true
        },
        "external_check_errors":
        {
          "inn": "string",
          "fico": "string",
          "pledges_list": "string",
          "vehicle_restrict_list": "string",
          "vehicle_wanted_list": "string",
          "vehicle_dtp_and_restrict": "string",
          "is_valid": "string"
        }
      }
      "error": null // = "Recognition for requested document not implemented", если модель не обучена распознавать документ
    }
  ],
  "task_id": null, // внутренний id задачи
  "code": null, // код ошибки
  "message": null, // сообщение об ошибке в рамках объекта
  "errno": null, // номер ошибки
  "traceback": null, // сообщение об ошибке в рамках объекта
  "fake": true, // ответ при параметре check_fake = "true"
  "pages_count": 1, // кол-во страниц во входном файле
  "docs_count": 1 // кол-во документов во входном файле
}

Last updated