Как начать работать с Vision OCR
Этот раздел описывает, как распознать текст на изображении или в файле с помощью Vision OCR OCR API.
Перед началом работы
Чтобы воспользоваться примерами, установите cURL
- На странице Биллинг
убедитесь, что платежный аккаунт находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его. - Получите IAM-токен, необходимый для аутентификации.
- Получите идентификатор любого каталога, на который у вашего аккаунта есть роль
ai.vision.user
или выше. - Полученный идентификатор передавайте в заголовке
x-folder-id
.
Распознайте текст
Вы можете использовать любую модель для распознавания из списка. Для примера, воспользуемся моделью page
, которая позволяет распознавать любое количество текста на изображении:
-
Подготовьте файл изображения, соответствующий требованиям:
- Поддерживаемые форматы файлов: JPEG, PNG, PDF. MIME-тип
файла указывайте в свойствеmime_type
. По умолчаниюimage
. - Максимальный размер файла: 10 МБ.
- Размер изображения не должен превышать 20 мегапикселей (длина × ширина).
Примечание
Нужен пример изображения? Скачайте изображение дорожного знака, предупреждающего о пингвинах
. - Поддерживаемые форматы файлов: JPEG, PNG, PDF. MIME-тип
-
Кодируйте файл с изображением в формат Base64:
UNIXWindowsPowerShellPythonNode.jsJavaGobase64 -i input.jpg > output.txt
C:> Base64.exe -e input.jpg > output.txt
[Convert]::ToBase64String([IO.File]::ReadAllBytes("./input.jpg")) > output.txt
# Импортируйте библиотеку для кодирования в Base64 import base64 # Создайте функцию, которая кодирует файл и возвращает результат. def encode_file(file_path): with open(file_path, "rb") as fid: file_content = fid.read() return base64.b64encode(file_content).decode("utf-8")
// Считайте содержимое файла в память. var fs = require('fs'); var file = fs.readFileSync('/path/to/file'); // Получите содержимое файла в формате Base64. var encoded = Buffer.from(file).toString('base64');
// Импортируйте библиотеку для кодирования в Base64. import org.apache.commons.codec.binary.Base64; // Получите содержимое файла в формате Base64. byte[] fileData = Base64.encodeBase64(yourFile.getBytes());
import ( "bufio" "encoding/base64" "io/ioutil" "os" ) // Откройте файл f, _ := os.Open("/path/to/file") // Прочитайте содержимое файла. reader := bufio.NewReader(f) content, _ := ioutil.ReadAll(reader) // Получите содержимое файла в формате Base64. base64.StdEncoding.EncodeToString(content)
-
Создайте файл с телом запроса, например
body.json
.body.json:
{ "mimeType": "JPEG", "languageCodes": ["*"], "model": "page", "content": "<изображение_в_кодировке_base64>" }
В свойстве
content
укажите содержимое файла, полученное при переводе изображения в формат Base64.Чтобы сервис автоматически определил язык текста, укажите в конфигурации свойство
"languageCodes": ["*"]
. -
UNIXPython
export IAM_TOKEN=<IAM-токен> curl \ --request POST \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --header "x-folder-id: <идентификатор_каталога>" \ --header "x-data-logging-enabled: true" \ --data "@body.json" \ https://ocr.api.cloud.yandex.net/ocr/v1/recognizeText \ --output output.json
Где:
<IAM-токен>
— полученный ранее IAM-токен.<идентификатор_каталога>
— полученный ранее идентификатор каталога.
data = {"mimeType": <mime_type>, "languageCodes": ["*"], "content": content} url = "https://ocr.api.cloud.yandex.net/ocr/v1/recognizeText" headers= {"Content-Type": "application/json", "Authorization": "Bearer {:s}".format(<IAM-токен>), "x-folder-id": "<идентификатор_каталога>", "x-data-logging-enabled": "true"} w = requests.post(url=url, headers=headers, data=json.dumps(data))
Результат будет состоять из распознанных блоков текста, строк и слов с указанием их местоположения на изображении:
{ "result": { "text_annotation": { "width": "1920", "height": "1280", "blocks": [{ "bounding_box": { "vertices": [{ "x": "460", "y": "777" }, { "x": "460", "y": "906" }, { "x": "810", "y": "906" }, { "x": "810", "y": "777" }] }, "lines": [{ "bounding_box": { "vertices": [{ "x": "460", "y": "777" }, { "x": "460", "y": "820" }, { "x": "802", "y": "820" }, { "x": "802", "y": "777" }] }, "alternatives": [{ "text": "PENGUINS", "words": [{ "bounding_box": { "vertices": [{ "x": "460", "y": "768" }, { "x": "460", "y": "830" }, { "x": "802", "y": "830" }, { "x": "802", "y": "768" }] }, "text": "PENGUINS", "entity_index": "-1" }] }] }, { "bounding_box": { "vertices": [{ "x": "489", "y": "861" }, { "x": "489", "y": "906" }, { "x": "810", "y": "906" }, { "x": "810", "y": "861" }] }, "alternatives": [{ "text": "CROSSING", "words": [{ "bounding_box": { "vertices": [{ "x": "489", "y": "852" }, { "x": "489", "y": "916" }, { "x": "810", "y": "916" }, { "x": "810", "y": "852" }] }, "text": "CROSSING", "entity_index": "-1" }] }] }], "languages": [{ "language_code": "en" }] }, { "bounding_box": { "vertices": [{ "x": "547", "y": "989" }, { "x": "547", "y": "1046" }, { "x": "748", "y": "1046" }, { "x": "748", "y": "989" }] }, "lines": [{ "bounding_box": { "vertices": [{ "x": "547", "y": "989" }, { "x": "547", "y": "1046" }, { "x": "748", "y": "1046" }, { "x": "748", "y": "989" }] }, "alternatives": [{ "text": "SLOW", "words": [{ "bounding_box": { "vertices": [{ "x": "547", "y": "983" }, { "x": "547", "y": "1054" }, { "x": "748", "y": "1054" }, { "x": "748", "y": "983" }] }, "text": "SLOW", "entity_index": "-1" }] }] }], "languages": [{ "language_code": "en" }] }], "entities": [] }, "page": "0" } }
-
Чтобы получить все распознанные на изображении слова, найдите все значения со свойством
text
.
Примечание
Если полученные координаты не соответствуют отображаемому положению элементов, настройте в вашем средстве просмотра изображений поддержку метаданных exif
, либо при передаче в сервис удаляйте из секции exif
изображения атрибут Orientation
.