Практика.

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:

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.❗Не забудьте остановить ресурсы, чтобы избежать лишних трат.

Ссылка : https://practicum.yandex.ru/learn/yc-ml-services/courses/7617ab7d-f316-4d9a-9939-c7158759a3e9/sprints/932316/topics/df8ac0ff-0fdf-4dee-8391-e20c78d01ed3/lessons/c1bf5899-0d42-4928-a859-b6a7e7aee9b9/

Рубрики: Uncategorized

0 комментариев

Добавить комментарий

Заполнитель аватара

Ваш адрес email не будет опубликован.