Практика.
Vision OCR можно комбинировать с другими сервисами Yandex Cloud в зависимости от задачи. Например, для распознавания текста на иностранном языке и последующего перевода подойдёт связка с сервисом Translate. А чтобы извлечь значения полей из документа и передать их в CRM или другую систему, можно подключить языковую модель в AI Studio, например YandexGPT.
ЛогикаЭто и будет темой следующего практического задания! Вы научитесь извлекать сущности в отсканированном документе с использованием связки сервисов Vision OCR и YandexGPT.
❗️Практическая часть курса предполагает использование облачных ресурсов, которые вы оплачиваете самостоятельно. Курс разработан так, чтобы расходы были минимальными, — часть из них покроет стартовый грант.Чтобы избежать лишних трат:— останавливайте ВМ в перерывах между практиками (это не снизит потребление до нуля, но заметно сократит расходы);— настройте бюджет и уведомления в разделе Биллинг;— удаляйте ресурсы после завершения курса;— необязательно выполнять все практики — сосредоточьтесь на релевантных.
Перед началом работы
Чтобы воспользоваться примерами, установите curl. Получите данные вашего аккаунта для аутентификации:1️⃣ Получите IAM-токен для аккаунта на Яндексе через команду yc iam create-token.Пример результата выполнения команды:
t1.9euelZqRxWalceXi86elpeJxomXmp6bnorl9Pc6A3FL-e8TXxW53fT3ejFuS_nvE9euelZqRx86VzIuYz5rPy4euelZqRxWalceXi86elpeJxomXmp6bnoS_nvE9euelZ
2️⃣ Получите идентификатор каталога, на который у вашего аккаунта есть роль ai.vision.user или выше. Для этого используйте команду yc resource-manager folder list. 3️⃣ При обращении к Vision OCR через API в каждом запросе укажите в заголовке IAM-токен Authorization в формате Authorization: Bearer <IAM-токен> Идентификатор каталога указывайте в теле запроса в параметре x-folder-id: <идентификатор_каталога>.Работа будет происходить в два этапа:1️⃣ Сначала вам предстоит распознать PDF-файл со счётом и получить его текстовую расшифровку.2️⃣ А затем отправить запрос в YandexGPT с текстовой расшифровкой PDF и получить значения нужных полей в JSON.
Распознавание счёта на оплату из PDF-файла с помощью Vision OCR API
Пример документа для распознаванияРаспознавание документа из PDF-файла может быть реализовано в методах OCR API:
- TextRecognition.recognize — для одностраничных PDF-файлов
- TextRecognitionAsync.recognize — для многостраничных PDF-файлов
1️⃣ Подготовьте PDF-файл для распознавания или используйте файл из примера выше. Размер файла не должен превышать 10 МБ, в одном файле должно быть не более 200 страниц.2️⃣ Кодируйте PDF-файл в формат Base64.
**UNIX**
base64 -i input.pdf > output.txt
3️⃣ Создайте файл с телом запроса, например body42.json.
{
"mimeType": "application/pdf",
"languageCodes": ["ru","en"],
"model": "**table**",
"content": "<PDF-файл_в_кодировке_base64>"
}
4️⃣ В свойстве content укажите содержимое файла, полученное при переводе PDF-файла в формат Base64.💡 Модель table поддерживает распознавание только на русском и английском, укажите соответствующие языки в свойстве "languageCodes": ["ru","en"].Пример запроса5️⃣ Отправьте запрос с помощью метода recognize:
export IAM_TOKEN=<ваш IAM-токен>
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${IAM_TOKEN}" \
-H "x-folder-id: <идентификатор_каталога>" \
-H "x-data-logging-enabled: true" \
-d "@body.json" \
https://ocr.api.cloud.yandex.net/ocr/v1/recognizeTextAsync
<IAM-токен> — полученный ранее IAM-токен;<идентификатор_каталога> — полученный ранее идентификатор каталога.Результат:
{
"id": "cfrtr5q0hdhl********",
"description": "OCR async recognition",
"created_at": "2023-10-24T09:12:48Z",
"created_by": "ajeol2afu1js********",
"modified_at": "2023-10-24T09:12:48Z",
"done": false,
"metadata": null
}
6️⃣ Сохраните идентификатор (id) операции распознавания, полученный в ответе.7️⃣ Отправьте запрос на получение результата распознавания с помощью метода getRecognition:
export IAM_TOKEN=<IAM-токен>
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${IAM_TOKEN}" \
-H "x-folder-id: <идентификатор_каталога>" \
-H "x-data-logging-enabled: true" \
https://ocr.api.cloud.yandex.net/ocr/v1/getRecognition?operationId=<идентификатор_операции> \
-o output.json
<IAM-токен> — полученный ранее IAM-токен;<идентификатор_каталога> — полученный ранее идентификатор каталога;<идентификатор_операции> — полученный ранее идентификатор операции распознавания.Результат будет состоять из распознанных блоков текста, строк и слов с указанием их местоположения на странице PDF-файла. Результат распознавания каждой страницы приводится в отдельной секции result.Пример результатаДля дальнейшей работы вам нужно использовать блок fullText из результата:
fullText
Отправка запроса к модели YandexGPT
1️⃣ Создайте файл с телом запроса, например body043.json:
{
"modelUri": "gpt://<идентификатор_каталога>/yandexgpt/latest",
"completionOptions": {
"stream": false,
"temperature": 0.1,
"maxTokens": "2000"
},
"messages": [
{
"role": "system",
"text": **"Извлеки из документа строго следующие данные в формате Json:
- Заказчик
- Адрес заказчика
- Договор
- Дата оплаты
- Сумма к оплате"**
},
{
"role": "user",
"text": "содержимое блока fullText в ответе vision ocr "
}
]
}
modelUri — идентификатор модели, которая будет использоваться для генерации ответа. Параметр содержит идентификатор каталога Yandex Cloud.completionOptions — параметры конфигурации запроса:
stream— включает потоковую передачу частично сгенерированного текста. Принимает значенияtrueилиfalse.temperature— чем выше значение этого параметра, тем креативнее и случайнее будут ответы модели. Принимает значения от0(включительно) до1(включительно). Значение по умолчанию:0.3.maxTokens— устанавливает ограничение на выход модели в токенах. Максимальное число токенов генерации зависит от модели.
📚 Подробнее — в разделе Квоты и лимиты в Yandex Foundation Models.messages — список сообщений, которые задают контекст для модели:
role— роль отправителя сообщения.user— предназначено для отправки пользовательских сообщений к модели.system— позволяет задать контекст запроса и определить поведение модели.assistant— используется для ответов, которые генерирует модель. При работе в режиме чата ответы модели, помеченные рольюassistant, включаются в состав сообщения для сохранения контекста беседы. Не передавайте сообщения пользователя с этой ролью.text— текстовое содержимое сообщения.
2️⃣ Отправьте запрос к модели с помощью команды:
export FOLDER_ID=<идентификатор_каталога>
curl --request POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${IAM_TOKEN}" \
-H "x-folder-id: <идентификатор_каталога> \
-d "@<путь_до_файла_json>" \
"https://llm.api.cloud.yandex.net/foundationModels/v1/completionAsync"
FOLDER_ID — идентификатор каталога, на который у вашего аккаунта есть роль ai``.languageModels.user или выше.IAM_TOKEN — IAM-токен, полученный перед началом работы.В ответе сервис вернёт объект Operation:
{
"id": "d7qi6shlbvo5********",
"description": "Async GPT Completion",
"createdAt": "2023-11-30T18:31:32Z",
"createdBy": "aje2stn6id9k********",
"modifiedAt": "2023-11-30T18:31:33Z",
"done": false,
"metadata": null
}
3️⃣ Сохраните идентификатор (id) операции, полученный в ответе.4️⃣ Отправьте запрос на получение результата операции:
curl -X GET \
-H "Authorization: Bearer ${IAM_TOKEN}" \
https://operation.api.cloud.yandex.net/operations/<ID_операции>
Пример результата:
{
"done": true,
"response": {
"@type": "[type.googleapis.com/yandex.cloud.ai.foundation_models.v1.CompletionResponse](http://type.googleapis.com/yandex.cloud.ai.foundation_models.v1.CompletionResponse)",
"alternatives": [
{
"message": {
"role": "assistant",
"text": **"{\n \"Заказчик\": \"Общество с ограниченной ответственностью \\\"ОБЩЕСТВО\\\"\",\n \"Адрес заказчика\": \"120203, Москва г, Первомайская ул, дом № 16А, помещение 52.03\",\n \"Договор\": \"Договор № 35/16 от 12.03.2023 г.\",\n \"Дата оплаты\": \"до 15.07.2024\",\n \"Сумма к оплате\": \"322 747,73\"\n}"**
},
"status": "ALTERNATIVE_STATUS_FINAL"
}
],
"usage": {
"inputTextTokens": "532",
"completionTokens": "122",
"totalTokens": "654"
},
"modelVersion": "07.03.2024"
},
"id": "d7qfhcimknen7lmtovdv",
"description": "Async GPT Completion",
"createdAt": "2024-06-13T10:02:35Z",
"createdBy": "ajej8ht1aihv9vheadau",
"modifiedAt": "202
В блоке text вы сможете забрать готовый результат, из которого останется удалить только escape-символы:
{
"Заказчик": "Общество с ограниченной ответственностью \"ОБЩЕСТВО\"",
"Адрес заказчика": "120203, Москва г, Первомайская ул, дом № 16А, помещение 52.03",
"Договор": "Договор № 35/16 от 12.03.2023 г.",
"Дата оплаты": "до 15.07.2024",
"Сумма к оплате": "322 747,73"
}
ЛогикаВы успешно освоили работу с двумя сервисами: Vision OCR и YandexGPT! Это отличный результат! В следующем уроке вы познакомитесь с ещё одним полезным инструментом — Translate.❗Не забудьте остановить ресурсы, чтобы избежать лишних трат.
0 комментариев