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

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

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

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

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

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

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

Подготовьте изображение документа для теста. Если у вас такого нет, используйте [паспорт РФ из Википедии](https://ru.wikipedia.org/wiki/Паспорт_гражданина_Российской_Федерации#/media/Файл: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`
* Прокрутите вниз до раздела `Documents`, нажмите на метод `/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 %}

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

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

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

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

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

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

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

Для этого передайте сервису извлечения данных результаты работы классификатора: изображение в параметре `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" %}
Перед началом работы с сервисами изучите раздел [«Общая информация о сервисах»](/dbrain-official/obshaya-informaciya-o-servisakh.md). Там мы рассказываем про допустимые форматы файлов, виды запросов и ответов, набор HTTP-статусов и даём рекомендации по устранению ошибок
{% endhint %}

## В ответе:

* `task_id` — string, идентификатор запроса, формат: 32 символа, 16-ричная строка
* `items` — массив, который содержит распознанные документы
* `doc_type` — string, тип документа, все типы перечислены в [классификации документов](/dbrain-official/tipy-dokumentov.md)
  * `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 %}

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.dbrain.io/dbrain-official/izvlechenie-dannykh.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
