Получение результата
Запустив распознавание пакета, необходимо периодически выполнять опрос сервиса на предмет получения результата.
Время распознавания одной страницы зависит от типа документа.
Например, страница паспорта в среднем распознается за 9 секунд, а страница счета-фактуры за 30 секунд.
Пример запроса:
Url: https://extractor.correct.su/api/packages
Url (with query parameters): https://extractor.correct.su/api/packages/42?allowPartialResults=true&includeStamps=true&includeSignatures=true&includeBarcodes=true&includeUnrecognizedTables=true&includeUnrecognizedTexts=true
Headers: Authorization, Content-Type (application/json)
Query parameters (all are optional):
allowPartialResults=true
- получать промежуточные результаты распознавания
includeStamps=true
- включая печати
includeSignatures=true
- включая подписи
includeBarcodes=true
- включая штрих-коды
includeUnrecognizedTables=true
- включая таблицы на нераспознанных страницах
includeUnrecognizedTexts=true
- включая текст для нераспознанных страниц
Method: GET
Пример ответа:
Для полей шапки документа (Наименование организации, Наименование контрагента, ИНН, КПП и т.д.) и Итоговых сумм табличной части (Стоимость, Сумма НДС, Сумма с НДС, ), ключ "tableRow": null.
Табличная часть начинается, где "tableRow": 0 - это 1-я строка таблицы. То есть Поля (№п/п ("fieldKey": "Index"), Наименование позиции ("fieldKey": "Name") и т.д.) имеющие "tableRow": 0 - относятся к первой строке таблицы. Поля с "tableRow": 1 - это 2-я строка таблицы и т.д.
{
"Id": 42 //Идентификатор пакета
"CreatedAt": "2020-04-26T12:04:59.1568486+03:00" //Момент создания пакета
"State": "Recognized" //Текущий статус пакета
"Documents": [ //Массив, содержащий распознанные документы
{
"Id": "12345678-abcd-dcba-0000-0123456789ab" //Идентификатор документа в формате GUID
"DocType": //Тип документа
"Pages": [ //Массив, содержащий идентификаторы изображений,
//соответствующих страницам документа
{
"Id": 1
}, {
"Id": 2
}],
"Files": [ //Только для документов ЭДО (электронного документооборота):
//массив, содержащий идентификаторы файлов документа
{
"Id": 3
}, {
"Id": 4
}],
"ContractorStamp": { //Печать контрагента
"IsRecognized": true, //Флаг, показывающий, найдена ли печать контрагента на документе
"ImageId": 9122, //Идентификатор изображения, на котором найдена печать контрагента
"Location": { //Координаты найденной печати контрагента на документе.
"LeftOffset": 100, //Расстояние от левой границы поля до левой границы страницы
"TopOffset": 100, //Расстояние от верхней границы поля до верхней границы страницы
"Width": 100, //Ширина печати
"Height": 100, //Высота печати
"BottomOffset": 100, //Расстояние от нижней границы поля до нижней границы страницы
"RightOffset": 100, //Расстояние от правой границы поля до правой границы страницы
}},
"CustomerStamp": { //Печать покупателя
"IsRecognized": true, //Флаг, показывающий, найдена ли печать покупателя на документе
"ImageId": 9122, //Идентификатор изображения, на котором найдена печать покупателя
"Location": { //Координаты найденной печати покупателя на документе.
"LeftOffset": 100, //Расстояние от левой границы печати до левой границы страницы
"TopOffset": 100, //Расстояние от верхней границы печати до верхней границы страницы
"Width": 100, //Ширина печати
"Height": 100, //Высота печати
"BottomOffset": 100, //Расстояние от нижней границы печати до нижней границы страницы
"RightOffset": 100, //Расстояние от правой границы печати до правой границы страницы
}},
"CompanyStamp": { //Печать организации
"IsRecognized": true, //Флаг, показывающий, найдена ли печать организации на документе
"ImageId": 9122, //Идентификатор изображения, на котором найдена печать организации
"Location": { //Координаты найденной печати организации на документе.
"LeftOffset": 100, //Расстояние от левой границы печати до левой границы страницы
"TopOffset": 100, //Расстояние от верхней границы печати до верхней границы страницы
"Width": 100, //Ширина печати
"Height": 100, //Высота печати
"BottomOffset": 100, //Расстояние от нижней границы печати до нижней границы страницы
"RightOffset": 100, //Расстояние от правой границы печати до правой границы страницы
}},
"RegistrationStamp": { //Печать регистрации
"IsRecognized": true, //Флаг, показывающий, найдена ли печать регистрации на документе
"ImageId": 9122, //Идентификатор изображения, на котором найдена печать регистрации
"Text": "г. Москва" //Текст, распознанный на печати регистрации
"Location": { //Координаты найденной печати регистрации на документе.
"LeftOffset": 66, //Расстояние от левой границы печати до левой границы страницы
"TopOffset": 264, //Расстояние от верхней границы печати до верхней границы страницы
"Width": 244, //Ширина печати
"Height": 110, //Высота печати
"BottomOffset": 145, //Расстояние от нижней границы печати до нижней границы страницы
"RightOffset": 377 //Расстояние от правой границы печати до правой границы страницы
}},
"Signatures": [ //Массив подписей, найденных на документе.
//Поиск выполняется только на ТОРГ-12, УПД и счетах-фактурах,
//а также доверенности (М-2)
"SignType": "Accountant", //Тип подписи. Может принимать значения:
//Accountant (бухгалтер), Director (руководитель),
//Shipper (грузоотправитель), //Consignee (грузополучатель),
//ProxyHolder (получатель доверенности – только для доверенности (М-2))
"IsRecognized": true, //Флаг, определяющий наличие или отсутствие подписи
"Location": { //Координаты найденной печати контрагента на документе.
"LeftOffset": 100, //Расстояние от левой границы подписи до левой границы страницы
"TopOffset": 100, //Расстояние от верхней границы подписи до верхней границы страницы
"Width": 100, //Ширина подписи
"Height": 100, //Высота подписи
"BottomOffset": 100, //Расстояние от нижней границы подписи до нижней границы страницы
"RightOffset": 100 //Расстояние от правой границы подписи до правой границы страницы
}],
"Codes": [ //Массив, содержащий найденные в изображениях документа коды
{
"Format": "EAN_13", //Формат кода. Распознаваемые форматы: CODE_39, CODE_128, CODE_93,
//CODABAR, ITF, EAN_13, EAN_8, UPC_A, UPC_E, INDUSTRIAL_25
"ImageId": 1, //Идентификатор изображения, на котором найден код
"Location": { //Положение найденного кода на изображении
"LeftOffset": 100, //Расстояние от левой границы кода до левой границы страницы
"TopOffset": 100, //Расстояние от верхней границы кода до верхней границы страницы
"Width": 100, //Ширина кода
"Height": 100, //Высота кода
"BottomOffset": 100, //Расстояние от нижней границы кода до нижней границы страницы
"RightOffset": 100, //Расстояние от правой границы кода до правой границы страницы
},
"Value": "1234567890123" //Закодированный текст
}],
"Fields": [ //Массив, содержащий распознанные поля документа.
//Каждый тип документа имеет свой собственный набор полей.
//Полных их перечень представлен ниже, в разделе "Распознаваемые документы"
{
"FieldKey": "Name", //Наименование распознанного поля
"FieldValue": "153", //Значение распознанного поля
"Location": { //Координаты распознанного поля на документе.
// Внимание! Сервис может производить изменение изображений перед отправкой на распознавание –
// например, выравнивание текста или поворот изображений.
// Данные координаты рассчитываются относительно уже измененного изображения.
// Мы не гарантируем их соответствие исходному загруженному документу
// Используйте метод получения изображения по его идентификатору, чтобы получить трансформированное изображение.
// Подробнее об этом методе можно узнать из полной версии схемы API.
"LeftOffset": 100, //Расстояние от левой границы поля до левой границы страницы
"TopOffset": 100, //Расстояние от верхней границы поля до верхней границы страницы
"Width": 100, //Ширина поля
"Height": 100, //Высота поля
"BottomOffset": 100, //Расстояние от нижней границы поля до нижней границы страницы
"RightOffset": 100, //Расстояние от правой границы поля до правой границы страницы
}
"DocumentPageIndex": 0, //Индекс страницы документа, на которой расположено поле, начиная с 0
"TableRow": 0, //Индекс строки в табличной части документа, начиная с 0.
//Принимает значение null, если поле не находится в табличной части документа
"TableIndex": null, //Индекс таблицы документа, начиная с 0.
//Принимает значение null, если поле не находится в табличной части документа
"FieldIndex": 0, //Индекс нетабличного поля документа.
//Принимает значение null, если поле находится в табличной части документа
//или на документе найдено только 1 поле данного типа.
//В противном случае принимает неотрицательное значение.
"Confidence": 0.5, //Уверенность распознавания поля от 0 (неуверенное поле) до 1 (уверенное поле)
"UnconfidentSymbols": "111", //Указатели на неуверенно распознанные символы
//(1 – неуверенный символ, 0 – уверенный символ)
"Nomenclature": { //Номенклатура, сопоставленная с данной строкой.
//Присутствует только для табличных полей с FieldKey "Name"
"NormalizedFieldValue": null, //Нормализованное значение поля
"NomenclatureType": "Product, //Тип номенклатуры: товар ("Product"), услуга ("Service") или неизвестно ("Unknown")
"Variants": [ //Варианты сопоставления номенклатуры,
//упорядоченные по убыванию уверенности сопоставления
{
"Id": "2", //Id номенклатуры в справочнике
"Confidence": 1.0 //Уверенность сопоставления
}]
}
}],
"Errors": [ // Массив ошибок, найденных в документе.
{
"Code": 1, // Код ошибки. Принимает значения:
// 1 – отсутствуют страницы.
"Description": "Отсутствуют страницы (1 шт.)", // Подробности ошибки.
"Data": { // Данные ошибки.
"MissingPagesCount": 1 // Кол-во пропущенных страниц.
}
}]
}
],
"UnrecognizedPages": [ //Массив, содержащий результаты распознавания изображений пакета,
//для которых не удалось определить тип документа
{
"Id": 3, //Идентификатор изображения
"PackageId": 42, //Идентификатор пакета, которому принадлежит изображение.
//Всегда совпадает с идентификатором пакета, результат распознавания которого вы запрашиваете
"Stamps": [ //Массив найденных на странице печатей
{
"IsRecognized": true, //Флаг, показывающий, найдена ли печать на изображении
"Location": { //Координаты найденной печати на изображении.
"LeftOffset": 100, //Расстояние от левой границы поля до левой границы изображения
"TopOffset": 100, //Расстояние от верхней границы поля до верхней границы изображения
"Width": 100, //Ширина печати
"Height": 100, //Высота печати
"BottomOffset": 100, //Расстояние от нижней границы поля до нижней границы изображения
"RightOffset": 100, //Расстояние от правой границы поля до правой границы изображения
}
}],
"Codes": [ //Массив, содержащий найденные на изображении коды
{
"Format": "EAN_13", //Формат кода. Распознаваемые форматы: CODE_39, CODE_128, CODE_93,
//CODABAR, ITF, EAN_13, EAN_8, UPC_A, UPC_E, INDUSTRIAL_25
"ImageId": 1, //Идентификатор изображения, на котором найден код
"Location": { //Положение найденного кода на изображении
"LeftOffset": 100, //Расстояние от левой границы кода до левой границы изображения
"TopOffset": 100, //Расстояние от верхней границы кода до верхней границы изображения
"Width": 100, //Ширина кода
"Height": 100, //Высота кода
"BottomOffset": 100, //Расстояние от нижней границы кода до нижней границы изображения
"RightOffset": 100, //Расстояние от правой границы кода до правой границы изображения
},
"Value": "1234567890123" //Закодированный текст
}],
"Fields": [ //Массив, содержащий распознанные поля изображения
//Для нераспознанных изображений распознаются поля таблиц
{
"FieldKey": "0", //Наименование распознанного поля.
//Содержит индекс столбца таблицы, начиная с 0, если не удаётся определить его заголовок
"FieldValue": "153", //Значение распознанного поля
"Location": { //Координаты распознанного поля на изображении.
//Внимание! Сервис может производить изменение изображений перед отправкой на распознавание –
//например, выравнивание текста или поворот изображений.
//Данные координаты рассчитываются относительно уже измененного изображения.
//Мы не гарантируем их соответствие исходному загруженному изображению
//Используйте метод получения изображения по его идентификатору, чтобы получить трансформированное изображение.
//Подробнее об этом методе можно узнать из полной версии схемы API.
"LeftOffset": 100, //Расстояние от левой границы поля до левой границы изображения
"TopOffset": 100, //Расстояние от верхней границы поля до верхней границы изображения
"Width": 100, //Ширина поля
"Height": 100, //Высота поля
"BottomOffset": 100 //Расстояние от нижней границы поля до нижней границы изображения
"RightOffset": 100, //Расстояние от правой границы поля до правой границы изображения
},
"DocumentPageIndex": null, //Индекс страницы документа, на которой расположено поле, начиная с 0.
//Для полей нераспознанных документов принимает значение null
"TableRow": 0, //Индекс строки, начиная с 0
"TableIndex": 0, //Индекс таблицы, начиная с 0
"FieldIndex": 0, //Индекс нетабличного поля документа.
//Принимает значение null, если поле находится в табличной части документа
//или на документе найдено только 1 поле данного типа.
//В противном случае принимает неотрицательное значение.
"Confidence": 0.5, //Уверенность распознавания поля от 0 (неуверенное поле) до 1 (уверенное поле)
"UnconfidentSymbols": "111" //Указатели на неуверенно распознанные символы (1 – неуверенный символ, 0 – уверенный символ)
}],
"TextLines": [ //Массив найденных на документе строк текста
{
"Value": "Акт" //Строка документа
}]
}]
}
Получение информации об ошибках в документе
В процессе распознавания документа сервис выполняет различные проверки документов. В случае обнаружения нарушения целостности документа, в ответе будут перечислены обнаруженные ошибки.
"Errors": [ // Массив ошибок, найденных в документе.
{
"Code": 1, // Код ошибки. Принимает значения:
// 1 – отсутствуют страницы.
"Description": "Отсутствуют страницы (1 шт.)", // Подробности ошибки.
"Data": { // Данные ошибки.
"MissingPagesCount": 1 // Кол-во пропущенных страниц.
}
}]
Получение промежуточных результатов распознавания
Передав флаг allowPartialResults=true, можно получать результаты распознавания отдельных документов, не дожидаясь обработки пакета целиком. Структура ответа остается такой же. Документы в теге Documents будут появляться по мере их распознавания. Определить готовность пакета целиком можно по полю State – если пакет распознан целиком, значение в теге будет "Recognized". До тех пор, пока идет обработка, значение в теге будет "Recognizing".