Спринт 3/5 → Тема 1/1: Обзор ML-сервисов Yandex Cloud → Урок 7/11

Что представляет :Yandex Vision OCR

В этом уроке вы узнаете, как работать с Vision OCR, какие существуют требования и особенности сервиса, и научитесь выполнять запрос и разбираться в результатах. Но для начала несколько слов про сам сервис.

💡 Сервис компьютерного зрения Yandex Vision OCR позволяет распознавать текст на изображениях и в файлах PDF. Он работает на технологии OCR (Optical Character Recognition) — это оптическое распознавание текста.Vision OCR можно использовать в следующих сценариях:

  • распознавание печатного текста или комбинации рукописного и печатного текста;
  • распознавание таблиц и документов в табличном виде;
  • распознавание регистрационных номеров автомобилей;
  • распознавание документов: водительского удостоверения, паспорта, СТС.

📚 Тарифицируется каждая распознанная картинка или страница PDF-документа. Узнать об этом подробнее можно в документации.Vision OCR работает через API. Вы можете интегрировать функциональность сервиса в своё приложение, написанное на любом языке программирования, или отправлять запросы с помощью утилиты cURL и её аналогов. 💻 Сервис предоставляет API в нотациях REST и gRPC. Вы можете самостоятельно сгенерировать интерфейс API для своего языка программирования на основе спецификации API.

Перед началом работы

Первым шагом необходимо получить данные аккаунта для аутентификации:1️⃣ Получите IAM-токен для аккаунта на Яндексе. 2️⃣ Получите идентификатор каталога, на который у аккаунта есть роль ai.vision.user или выше.3️⃣ При обращении к Vision OCR через API в каждом запросе передавайте полученные параметры:Для Vision OCR API и Classifier API:

  • указывайте IAM-токен в заголовке Authorization в таком формате: Authorization: Bearer <IAM-токен>;
  • идентификатор каталога укажите в теле запроса в параметре folderId.

Начало работы с Vision OCR положено! Но прежде чем перейти к практике, вы узнаете самую основную информацию об этом сервисе, а именно — о режимах работы, моделях распознавания, требованиях к файлам и возможных ошибках при работе.

Режимы работы Vision OCR

Vision OCR может обрабатывать запросы на распознавание изображений в синхронном и асинхронном режиме.В синхронном режиме сервис получит ваш запрос, сразу же обработает его и вернёт результат в ответном сообщении. Такой режим подходит для приложений, которым необходимо поддерживать диалог с пользователем. Однако в синхронном режиме Vision OCR не может обработать большие объёмы информации.❗️

Максимальный размер PDF в синхронном режиме — 200 страниц, максимальное количество запросов — один в секунду. В асинхронном режиме лимит — 10 запросов в секунду. Подробные условия ограничений описаны в документации в разделе Квоты и лимиты.

В асинхронном режиме сервис получит запрос и сразу же вернёт идентификатор операции, по которому вы получите результат распознавания. Распознавание текста займёт больше времени, но позволит обработать большие объёмы информации за один запрос. Асинхронный режим подойдёт, если ваши задачи не требуют срочного ответа.

📚 Выбор режима осуществляется через обращение к соответствующему эндпоинту. Дополнительную информацию можно узнать в документации:

Результатом обращения в асинхронный эндпоинт является ID операции. Статус выполнения этой операции и сам результат можно получить через запрос в эндпоинт.

Создание файла с телом запроса

Для отправки запроса в эндпоинт вам понадобится создать JSON-файл, напримерbody.json:

{
  "mimeType": "JPEG",
  "languageCodes": ["ru","en"],
  "model": "table",
  "content": "<контент_в_кодировке_base64>"
} 
  • mimeType — тип данных, может быть JPEG, PNG или application/pdf;
  • languageCodes — указание языков исходного документа, для автоматического определения языка укажите * или код из списка поддерживаемых языков;
  • model — используемая модель;
  • content — контент для распознавания в кодировке Base64.

📚 Подробнее о конвертации можно прочитать по ссылке.

Модели распознавания

Vision OCR предоставляет несколько моделей для распознавания разных типов текста на изображениях и в файлах PDF. Это может быть печатный текст, многоколоночный печатный текст, таблицы, рукописный текст или шаблонные документы, например паспорт или регистрационный номер автомобиля. Качество распознавания зависит от модели: чем точнее вы выберете модель, тем лучше результат. Модель передаётся в параметрах запроса в поле model.

Модели для распознавания текста

  • page (по умолчанию) подходит для изображений с любым количеством строк текста, свёрстанного в одну колонку;
  • page-column-sort — для распознавания многоколоночного текста;
  • handwritten — для распознавания произвольного сочетания печатного и рукописного текста на русском и английском языках;
  • table — для распознавания таблиц на русском и английском языках.

Модели для распознавания шаблонных документов

  • passport — основной разворот паспорта;
  • driver-license-front — водительское удостоверение, лицевая сторона;
  • driver-license-back — водительское удостоверение, обратная сторона;
  • vehicle-registration-front — свидетельство о регистрации транспортного средства, лицевая сторона;
  • vehicle-registration-back — свидетельство о регистрации транспортного средства, обратная сторона;
  • license-plates — все регистрационные номера автомобилей на изображении.

Определение языковой модели

Для распознавания текста Vision OCR использует языковые модели, обученные на определённом наборе языков. Модель выбирается автоматически на основе списка языков, который вы указываете в запросе.При каждом распознавании текста используется только одна модель. Например, если на изображении текст на китайском и японском, то распознан будет только один из этих языков. Чтобы распознать оба языка, отправьте запрос ещё раз, указав другой язык распознавания.

💡 Для текста на русском и английском лучше всего работает англо-русская модель. Чтобы использовать её, укажите один из этих языков или оба в text_detection_config.

Требования к изображению

Изображение в запросе должно соответствовать следующим требованиям:

  • поддерживаемые форматы файлов — JPEG, PNG, PDF. MIME-тип файла указывайте в свойстве mime_type, по умолчанию image;
  • максимальный размер файла — 20 МБ;
  • размер изображения не должен превышать 20 мегапикселей (длина × ширина).

Результаты распознавания

Сервис выделяет найденный текст на изображении и группирует его по уровням: слова группируются в строки, строки — в блоки, блоки — в страницы.В результате сервис возвращает объект, где для каждого из уровней дополнительно указываются данные:

  • страницы pages[] — размер страницы;
  • блоки текста blocks[] — расположение текста на странице;
  • строки lines[] — расположение и достоверность распознавания;
  • слова words[] — расположение, достоверность, текст и язык, использованный при распознавании.

Чтобы показать расположение текста, сервис возвращает координаты прямоугольника, обрамляющего текст. Координаты — это количество пикселей на изображении. Они считаются от левого верхнего угла и указываются против часовой стрелки:1←4↓ ↑2→3

Пример распознанного изображения с координатами:

Формат ответа

Yandex Vision OCR предоставляет результат распознавания в формате JSON Lines, где каждая строка JSON-файла соответствует одной распознанной странице или изображению.

Ошибки в определении координат

В некоторых случаях сервис возвращает координаты, которые не соответствуют отображению текста в пользовательском обработчике изображений. Это связано с некорректной обработкой метаданных exif.При распознавании сервис учитывает данные о повороте изображения, которые задаются атрибутом Orientation секции exif.

Некоторые средства просмотра изображений могут игнорировать заданные в exif значения поворота. Это приводит к несоответствию полученных результатов отображаемому изображению.Чтобы исправить эту ошибку, нужно выполнить одно из действий:

  • изменить настройки обработчика изображений так, чтобы при просмотре учитывался заданный в секции exif угол поворота;
  • при передаче в сервис удалить из секции exif атрибут Orientation или установить для него значение 0.

Достоверность распознавания

Достоверность распознавания показывает уверенность сервиса в результате. Например, значение "confidence": 0.9412244558 для строки «we like you» означает, что с вероятностью в 94% текст распознан корректно.Сейчас достоверность считается только для строк. В значение confidence для слов и языка подставляется значение для confidence строки.Вы освоили основную теорию для начала работы с сервисом Yandex Vision OCR. Теперь пора переходить к практике. Для этого выполняйте задание по шагам.

💻 Практика. Распознавание текста на изображении с помощью Vision OCR API

❗️Практическая часть курса предполагает использование облачных ресурсов, которые вы оплачиваете самостоятельно. Курс разработан так, чтобы расходы были минимальными, — часть из них покроет стартовый грант.Чтобы избежать лишних трат:— останавливайте ВМ в перерывах между практиками (это не снизит потребление до нуля, но заметно сократит расходы);— настройте бюджет и уведомления в разделе Биллинг;— удаляйте ресурсы после завершения курса;— необязательно выполнять все практики — сосредоточьтесь на релевантных.💡 Если вам нужен пример изображения, скачайте изображение дорожного знака, предупреждающего о пингвинах. Чтобы воспользоваться им, установите cURL.Распознавание текста на изображении реализовано в методе recognize Vision OCR API. 1️⃣ Подготовьте файл изображения, соответствующий требованиям. Напоминаем о них ещё раз:

  • поддерживаемые форматы файлов: JPEG, PNG, PDF. MIME-тип файла в свойстве mime_type, по умолчанию image;
  • размер файла до 20 МБ;
  • размер изображения не более 20 мегапикселей (длина × ширина).

2️⃣ Кодируйте файл с изображением в формат Base64:

base64 -i input.jpg > output.txt 

3️⃣ Создайте файл с телом запроса, например body.json:

body.json:
{
  "mimeType": "JPEG",
  "languageCodes": ["*"],
  "model": "page",
  "content": "<изображение_в_кодировке_base64>"
} 

4️⃣ В свойстве content укажите содержимое файла, полученное при переводе изображения в формат Base64.Чтобы сервис автоматически определил язык текста, укажите в конфигурации свойство "languageCodes": ["*"].5️⃣ Отправьте запрос с помощью метода recognize и сохраните ответ в файл, например output.json:

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/recognizeText \
    -o output.json 
  • <IAM-токен> — полученный ранее IAM-токен;
  • <идентификатор_каталога> — полученный ранее идентификатор каталога.

Результат будет состоять из распознанных блоков текста, строк и слов с указанием их местоположения на изображении:

{
  "result": {
    "text_annotation": {
      "width": "1920",
      "height": "1280",
      "blocks": [{
...
      }],
      "entities": []
    },
    "page": "0"
  }
} 

6️⃣ Чтобы получить все распознанные на изображении слова, найдите все значения со свойством text.💡 Если полученные координаты не соответствуют отображаемому положению элементов, настройте в средстве просмотра изображений поддержку метаданных exif или при передаче в сервис удаляйте из секции exif изображения атрибут Orientation.

Ссылка :https://practicum.yandex.ru/learn/yc-ml-services/courses/7617ab7d-f316-4d9a-9939-c7158759a3e9/sprints/932316/topics/df8ac0ff-0fdf-4dee-8391-e20c78d01ed3/lessons/90e6c231-9470-4d51-944f-93c261b7a666/

Рубрики: Uncategorized

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

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

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

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