# Извлечение данных

Полученные из сервиса данные можно использовать для предзаполнения онлайн-форм, сравнения с данными в CRM-системах, идентификации клиента и в десятках других бизнес-сценариев.

**Что делает сервис:**

* Находит документы на фото и сканах
* Обрабатывает многостраничные файлы в форматах PDF и DJVU
* Отделяет документы от фона — бабушкиных ковров и узорчатых скатертей
* Поправляет повёрнутые и зеркально отражённые документы
* Извлекает данные из некачественных фото:
  * обрезанные;
  * смазанные;
  * бликующие;
  * с наложением посторонних предметов.

{% hint style="info" %}
Если вы собираетесь работать только с качественными документами, воспользуйтесь [сервисами проверки](https://doc.dbrain.io/servisy/proverka-dokumentov) **перед** извлечением данных
{% endhint %}

## Как начать работать с сервисом извлечения данных

Есть 5 популярных способов взаимодействия с сервисом. Для любого вам нужен ключ лицензии. Чтобы получить ключ, напишите нам в [телеграм](https://t.me/dbrain_support_bot) или на <hello@dbrain.io>.

Подготовьте изображение документа для теста. Если у вас такого нет, используйте [паспорт РФ из Википедии](https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%81%D0%BF%D0%BE%D1%80%D1%82_%D0%B3%D1%80%D0%B0%D0%B6%D0%B4%D0%B0%D0%BD%D0%B8%D0%BD%D0%B0_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%BE%D0%B9_%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8#/media/%D0%A4%D0%B0%D0%B9%D0%BB:Pasport_RF.jpg).

<details>

<summary>Через веб-демо</summary>

1. Откройте [demo.dbrain.io](https://demo.dbrain.io)
2. Введите ключ лицензии в поле «Токен» и нажмите «Применить»
3. Выберите «Документы с чёткой структурой»
4. Нажмите кнопку «Выберите файл для распознавания»
5. Укажите изображение, которое нужно распознать
6. Нажмите кнопку «Распознать»

</details>

<details>

<summary>Через терминал</summary>

Обратитесь к методу `/recognize` по адресу [latest.dbrain.io](https://latest.dbrain.io/). В этом способе только два обязательных параметра:

* `token` — ваш ключ лицензии
* `image` — файл с изображением документа

Запрос curl должен выглядеть так:

```bash
curl -X 'POST' \
  'https://latest.dbrain.io/recognize?token=xxx' \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -F 'image=@image.jpg;type=image/jpeg'
```

</details>

<details>

<summary>Через Swagger</summary>

* Подготовьте ключ лицензии
* Откройте [Swagger](https://latest.dbrain.io/docs) и нажмите кнопку `Authorize` в правом верхнем углу
* Введите свой токен в любое поле и нажмите `Authorize`
* Прокрутите вниз до раздела `/pipelines/run/recognize`, нажмите на него
* В открывшемся разделе нажмите на кнопку `Try it out`
* Прокрутите страницу вниз до раздела `Request body`
* Нажмите на кнопку `Выберите файл` пункта `image`
* Укажите изображение, которое нужно распознать
* Нажмите кнопку `Execute`
* Ответ сервиса появится в пункте `Response body` раздела `Responses`
* Полученный на этом этапе `Curl` мы рекомендуем использовать как основу для написания интеграции с API сервиса Dbrain

</details>

<details>

<summary>Через Python</summary>

{% code overflow="wrap" %}

```python
import requests

url = 'https://latest.dbrain.io/recognize?token=xxx'
files = {'image': open('image.jpg', 'rb')}
headers = {'accept': 'application/json'}

response = requests.post(url, headers=headers, files=files)
```

{% endcode %}

Код использует библиотеку `requests` для отправки POST-запроса с файлом изображения. Функция `open()` используется для открытия файла изображения в двоичном режиме и передачи его в параметр `files`. Параметр `headers` используется для установки заголовка `accept` в значение `application/json`. Ответ от сервера сохраняется в переменной `response`.

Тело запроса передавайте в кодировке `UTF-8`.

</details>

<details>

<summary>Через 1С</summary>

```bsl
Функция РаспознатьДокумент(ПакетДвоичныеДанные, ИмяФайла) Экспорт
	// готовит HTTP-запрос, включая заголовки и тело, и отправляет его на сервер.
	ПараметрыЗапроса ="?token=B000000000000000000000"; // токен необходимо получить собственный!
	РазделительМультисообщения = "----MessageBoundary1C";

	HTTPЗапрос = Новый HTTPЗапрос("/recognize"+ПараметрыЗапроса);
	HTTPЗапрос.Заголовки.Вставить("accept", "application/json");
	HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + РазделительМультисообщения);

	ТелоПоток = Новый ПотокВПамяти();
	
	ЗаписьДанных = Новый ЗаписьДанных(ТелоПоток); 
	ЗаписьДанных.ЗаписатьСтроку("--" + РазделительМультисообщения);
	ЗаписьДанных.Записать(СоздатьСообщение_XML("image", ИмяФайла, ПакетДвоичныеДанные)); 
	ЗаписьДанных.ЗаписатьСимволы(Символы.ВК); 
	ЗаписьДанных.ЗаписатьСимволы(Символы.ПС);
	ЗаписьДанных.ЗаписатьСтроку("--" + РазделительМультисообщения + "--");
	ЗаписьДанных.Закрыть();
	
	ТелоДвоичныеДанные = ТелоПоток.ЗакрытьИПолучитьДвоичныеДанные();
	
	Попытка
		Соединение = Новый HTTPСоединение("latest.dbrain.io",
										443,
										,
										,
										,
										60,	
										ЗащищенноеСоединение());
	Исключение
		Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));	
	КонецПопытки;

	HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ТелоДвоичныеДанные);
	Возврат Соединение.ОтправитьДляОбработки(HTTPЗапрос);
	
КонецФункции	

Функция ЗащищенноеСоединение() 
	
	ЗащищенноеСоединение = Неопределено;
	
	СистемнаяИнфо = Новый СистемнаяИнформация;
	ТипПлатформыСервера = СистемнаяИнфо.ТипПлатформы;

	Если ТипПлатформыСервера = ТипПлатформы.Windows_x86
		Или ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда
		ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(
		Новый СертификатКлиентаWindows(),
		Новый СертификатыУдостоверяющихЦентровWindows());
	Иначе
		ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
	КонецЕсли;
	
	Возврат ЗащищенноеСоединение;
	
КонецФункции

Функция СоздатьСообщение_XML(ИмяСообщения, ИмяФайла, СообщениеДвоичныеДанные)   
	
	Поток = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Поток);
	// Заголовки
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + ИмяСообщения + """; filename=""" + ИмяФайла + """");
	Если Прав(ИмяФайла, 4) = ".xml" Тогда
		ТипMIME = "text/xml";
	ИначеЕсли Прав(ИмяФайла, 4) = ".pdf" Тогда
		ТипMIME = "application/pdf";
	Иначе
		ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяФайла, ".");
		Если ЧастиИмени.Количество() > 1 Тогда
			ТипMIME = "image/" + ЧастиИмени[ЧастиИмени.ВГраница()];	
		КонецЕсли;
	КонецЕсли;                                
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: " + ТипMIME);
	ЗаписьДанных.ЗаписатьСтроку("");
	// Тело
	ЗаписьДанных.Записать(СообщениеДвоичныеДанные);
	ЗаписьДанных.Закрыть();

	Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();
		
```

</details>

## Параметры запроса к API

Вы можете использовать эти параметры с любыми видами документов.

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

{% hint style="success" %}

#### doc\_type **— string array**

{% endhint %}

Поведение по умолчанию: сервис извлекает данные из всех [поддерживаемых типов документов](https://doc.dbrain.io/obshaya-informaciya/tipy-dokumentov), которые классификатор документов найдёт в файле.

Если вам нужно извлечь данные только из одного типа документа, укажите этот тип в параметре `doc_type:`

* Для извлечения данных только из главного разворота Паспорта РФ укажите `doc_type=passport_main`
* Для извлечения данных из нескольких типов документов допишите их в запрос через `&doc_type=`. Например, вам нужен главный разворот и прописка Паспорта РФ. В запросе это будет выглядеть так: `doc_type=passport_main&doc_type=passport_registration`

#### Режим распознавания

{% hint style="success" %}
**mode — string**
{% endhint %}

Поведение по умолчанию: `mode=default`

Вы можете использовать сервис [классификации документов](https://doc.dbrain.io/servisy/document-classification) отдельно от сервиса извлечения данных. Построить разную логику обработки документов в зависимости от того какие типы документов классификатор нашёл на изображении.

Для этого передайте сервису извлечения данных результаты работы классификатора: изображение в параметре `image` и тип документа в параметре `doc_type`, а также укажите `mode=recognize_only`. В таком случае сервис не будет запускать лишнюю классификацию документа и вы быстрее получите ответ.

#### **Возврат найденных изображений документов**

{% hint style="success" %}
**return\_crops&#x20;*****—*****&#x20;boolean**
{% endhint %}

Поведение по умолчанию: `return_crops=false` — cервис не возвращает найденные изображения документов.

Если вам нужны найденные сервисом изображения документов, укажите `return_crops=true.` Сервис вернёт в ответе API изображение в параметре crop.

{% hint style="info" %}
Перед началом работы с сервисами изучите раздел [«Общая информация о сервисах»](https://doc.dbrain.io/obshaya-informaciya/obshaya-informaciya-o-servisakh). Там мы рассказываем про допустимые форматы файлов, виды запросов и ответов, набор HTTP-статусов и даём рекомендации по устранению ошибок
{% endhint %}

## В ответе:

* `task_id` — string, идентификатор запроса, формат: 32 символа, 16-ричная строка
* `items` — массив, который содержит распознанные документы
* `doc_type` — string, тип документа, все типы перечислены в [классификации документов](https://doc.dbrain.io/obshaya-informaciya/tipy-dokumentov)
  * `fields` — string, поля документа, список полей по каждому документу приведён в **API-спецификация в** [**Google таблице**](https://docs.google.com/spreadsheets/d/1_rN49no9kxDZb6rjwQtMlSZr8FO0mIE3qVQ2oPFIAZ4/edit#gid=0)**.**
    * `text` — string, текст поля документа
    * `confidence` — number, уровень уверенности алгоритма в корректности извлечения данных из поля
    * `coords` — массив, координаты поля на документе, вырезанного и правильно ориентированного, по четырём точкам: верхний левый угол, верхний правый, нижний левый, нижний правый
  * `doc_coords` — массив, координаты документа на оригинальном изображении по четырём точкам: верхний левый угол, верхний правый, нижний левый, нижний правый
  * `confidence` — number, уровень уверенности алгоритма в корректности определения типа документа
* `task_tags` — массив string, теги, если они переданы в параметре task\_tags
* `page_count` — integer, число страниц в файле, актуально для PDF и DJVU
* `docs_count` — integer, число распознанных документов в файле
* `traceback` — string, сообщение об ошибке, которое содержит информацию о том, где произошла ошибка в коде и какие функции были вызваны перед ней. Это сообщение может помочь разработчикам понять причину возникновения ошибки и исправить ее. Передайте её нашей службе поддержки.

{% hint style="info" %}
Остальные поля не несут практического смысла. Оставили их для совместимости со старыми версиями
{% endhint %}

У каждого типа документа есть свои особенности извлечения. Изучите то, что нужно вам, тут:

* [Паспорт РФ](https://doc.dbrain.io/servisy/izvlechenie-dannykh/pasport)
* [Паспорт РФ: прописка](https://doc.dbrain.io/servisy/izvlechenie-dannykh/pasport-propiska)
* [Водительское удостоверение](https://doc.dbrain.io/servisy/izvlechenie-dannykh/voditelskoe-udostoverenie)
* [Свидетельство о регистрации транспортного средства РФ](https://doc.dbrain.io/servisy/izvlechenie-dannykh/sts)
* [Первичные бухгалтерские документы](https://doc.dbrain.io/servisy/izvlechenie-dannykh/bukhgalterskaya-pervichka)
* [Договоры, уставы, решения, приказы](https://doc.dbrain.io/servisy/izvlechenie-dannykh/dogovory)
* [Прочие документы](https://doc.dbrain.io/servisy/izvlechenie-dannykh/prochie-dokumenty)
