Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Vision OCR
  • Начало работы
  • Управление доступом
  • Правила тарификации
  • История изменений
  • Вопросы и ответы

В этой статье:

  • Перед началом работы
  • Распознайте текст

Как начать работать с Vision OCR

Статья создана
Yandex Cloud
Улучшена
Обновлена 10 марта 2025 г.
  • Перед началом работы
  • Распознайте текст

Этот раздел описывает, как распознать текст на изображении или в файле с помощью Vision OCR OCR API.

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

Чтобы воспользоваться примерами, установите cURL.

Аккаунт на Яндексе
  1. На странице Yandex Cloud Billing убедитесь, что платежный аккаунт находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.
  2. Получите IAM-токен, необходимый для аутентификации.
  3. Получите идентификатор любого каталога, на который у вашего аккаунта есть роль ai.vision.user или выше.
  4. Полученный идентификатор передавайте в заголовке x-folder-id.

Распознайте текстРаспознайте текст

Вы можете использовать любую модель для распознавания из списка. Для примера, воспользуемся моделью page, которая позволяет распознавать любое количество текста на изображении:

  1. Подготовьте файл изображения, соответствующий требованиям:

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

    Примечание

    Нужен пример изображения? Скачайте изображение дорожного знака, предупреждающего о пингвинах.

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

    UNIX
    Windows
    PowerShell
    Python
    Node.js
    Java
    Go
    base64 -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)
    
  3. Создайте файл с телом запроса, например body.json.

    body.json:

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

    В свойстве content укажите содержимое файла, полученное при переводе изображения в формат Base64.

    Чтобы сервис автоматически определил язык текста, укажите в конфигурации свойство "languageCodes": ["*"].

  4. Отправьте запрос с помощью метода recognize и сохраните ответ в файл, например output.json:

    UNIX
    Python
    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 '{
        "mimeType": "JPEG",
        "languageCodes": ["ru","en"],
        "model": "handwritten",
        "content": "<изображение_в_кодировке_base64>"
      }' \
      https://ocr.api.cloud.yandex.net/ocr/v1/recognizeText \
      --output output.json
    

    Где:

    • <IAM-токен> — полученный ранее IAM-токен.
    • <идентификатор_каталога> — полученный ранее идентификатор каталога.
    data = {"mimeType": <mime_type>,
            "languageCodes": ["ru","en"],
            "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"
      }
    }
    
  5. Чтобы получить все распознанные на изображении слова, найдите все значения со свойством text.

Примечание

Если полученные координаты не соответствуют отображаемому положению элементов, настройте в вашем средстве просмотра изображений поддержку метаданных exif, либо при передаче в сервис удаляйте из секции exif изображения атрибут Orientation.

Была ли статья полезна?

Следующая
Все инструкции
Проект Яндекса
© 2025 ООО «Яндекс.Облако»