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

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

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

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

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

Этот раздел описывает, как распознать текст на изображении или в файле с помощью Vision 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': {'textAnnotation': {'width': '1920', 'height': '1280', 'blocks': [
                    {'boundingBox': {'vertices': [
                                {'x': '460', 'y': '777'
                                },
                                {'x': '460', 'y': '906'
                                },
                                {'x': '810', 'y': '906'
                                },
                                {'x': '810', 'y': '777'
                                }
                            ]
                        }, 'lines': [
                            {'boundingBox': {'vertices': [
                                        {'x': '460', 'y': '777'
                                        },
                                        {'x': '460', 'y': '820'
                                        },
                                        {'x': '802', 'y': '820'
                                        },
                                        {'x': '802', 'y': '777'
                                        }
                                    ]
                                }, 'text': 'PENGUINS', 'words': [
                                    {'boundingBox': {'vertices': [
                                                {'x': '460', 'y': '768'
                                                },
                                                {'x': '460', 'y': '830'
                                                },
                                                {'x': '802', 'y': '830'
                                                },
                                                {'x': '802', 'y': '768'
                                                }
                                            ]
                                        }, 'text': 'PENGUINS', 'entityIndex': '-1', 'textSegments': [
                                            {'startIndex': '0', 'length': '8'
                                            }
                                        ]
                                    }
                                ], 'textSegments': [
                                    {'startIndex': '0', 'length': '8'
                                    }
                                ], 'orientation': 'ANGLE_0'
                            },
                            {'boundingBox': {'vertices': [
                                        {'x': '489', 'y': '861'
                                        },
                                        {'x': '489', 'y': '906'
                                        },
                                        {'x': '810', 'y': '906'
                                        },
                                        {'x': '810', 'y': '861'
                                        }
                                    ]
                                }, 'text': 'CROSSING', 'words': [
                                    {'boundingBox': {'vertices': [
                                                {'x': '489', 'y': '852'
                                                },
                                                {'x': '489', 'y': '916'
                                                },
                                                {'x': '810', 'y': '916'
                                                },
                                                {'x': '810', 'y': '852'
                                                }
                                            ]
                                        }, 'text': 'CROSSING', 'entityIndex': '-1', 'textSegments': [
                                            {'startIndex': '9', 'length': '8'
                                            }
                                        ]
                                    }
                                ], 'textSegments': [
                                    {'startIndex': '9', 'length': '8'
                                    }
                                ], 'orientation': 'ANGLE_0'
                            }
                        ], 'languages': [
                            {'languageCode': 'en'
                            }
                        ], 'textSegments': [
                            {'startIndex': '0', 'length': '17'
                            }
                        ], 'layoutType': 'LAYOUT_TYPE_TEXT'
                    },
                    {'boundingBox': {'vertices': [
                                {'x': '547', 'y': '989'
                                },
                                {'x': '547', 'y': '1046'
                                },
                                {'x': '748', 'y': '1046'
                                },
                                {'x': '748', 'y': '989'
                                }
                            ]
                        }, 'lines': [
                            {'boundingBox': {'vertices': [
                                        {'x': '547', 'y': '989'
                                        },
                                        {'x': '547', 'y': '1046'
                                        },
                                        {'x': '748', 'y': '1046'
                                        },
                                        {'x': '748', 'y': '989'
                                        }
                                    ]
                                }, 'text': 'SLOW', 'words': [
                                    {'boundingBox': {'vertices': [
                                                {'x': '547', 'y': '983'
                                                },
                                                {'x': '547', 'y': '1054'
                                                },
                                                {'x': '748', 'y': '1054'
                                                },
                                                {'x': '748', 'y': '983'
                                                }
                                            ]
                                        }, 'text': 'SLOW', 'entityIndex': '-1', 'textSegments': [
                                            {'startIndex': '18', 'length': '4'
                                            }
                                        ]
                                    }
                                ], 'textSegments': [
                                    {'startIndex': '18', 'length': '4'
                                    }
                                ], 'orientation': 'ANGLE_0'
                            }
                        ], 'languages': [
                            {'languageCode': 'en'
                            }
                        ], 'textSegments': [
                            {'startIndex': '18', 'length': '4'
                            }
                        ], 'layoutType': 'LAYOUT_TYPE_TEXT'
                    }
                ], 'entities': [], 'tables': [], 'fullText': 'PENGUINS\nCROSSING\nSLOW\n', 'rotate': 'ANGLE_0', 'markdown': '', 'pictures': []
            }, 'page': '0'
        }
    }
    
  5. Чтобы получить все распознанные на изображении слова, найдите все значения со свойством text.

Примечание

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

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

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