Сгенерировать изображение с помощью YandexART
С помощью нейросети YandexART вы можете генерировать изображения в асинхронном режиме. В ответ на асинхронный запрос модель вернет объект Operation, содержащий идентификатор операции, по которому можно отследить ее выполнение и получить результат после того, как генерация завершится. Генерация результата в асинхронном режиме может занимать от пары минут до нескольких часов.
Перед началом работы
Чтобы воспользоваться примерами:
Для работы из консоли управления подготовительные действия не требуются.
Также назначьте сервисному аккаунту роль ai.languageModels.user — в примере дополнительно используется модель YandexGPT Pro для генерации промпта для YandexART.
-
Получите и сохраните API-ключ сервисного аккаунта.
В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.
-
С помощью менеджера пакетов pip
установите библиотеку ML SDK:pip install yandex-cloud-ml-sdk
-
Получите данные для аутентификации в API, как описано на странице Аутентификация в API Yandex AI Studio.
Чтобы использовать API YandexART, назначьте роль
ai.imageGeneration.userпользователю или сервисному аккаунту, от имени которого вы будете аутентифицироваться. -
Установите утилиты:
Сгенерируйте изображение
Примечание
Чтобы повышать качество генерируемых ответов, YandexART логирует промпты пользователей. Не передавайте в запросах чувствительную информацию и персональные данные.
-
В консоли управления
выберите каталог, на который у вашего аккаунта есть рольai.playground.userили выше. -
На панели слева нажмите
Все сервисы и выберите AI Studio или найдите его с помощью строки поиска на дашборде. -
На открывшейся панели выберите
AI Playground.
-
Выберите тип генерации — Генерация изображений.
-
В блоке Настройки укажите параметры генерации:
- Зерно — число, на основе которого будет генерироваться изображение. Вы можете сами указать число или задать случайное значение. При одинаковых промпте и зерне результаты генераций будут одинаковыми.
- Соотношение сторон — выберите желаемое соотношение сторон изображения.
-
Напишите запрос в поле ввода снизу и нажмите
или Enter. Вы также можете воспользоваться примерами запроса, предлагаемыми сверху. Старайтесь использовать яркие образы, описывайте детали, указывайте стили, если хотите получить изображение определенного вида.Созданные диалоги сохраняются на панели Эксперименты справа. Нажмите
возле нужного диалога, чтобы переименовать или удалить его. -
В блоке Использование модели нажмите
Посмотреть код, чтобы получить код запроса к модели через ML SDK для Python.
В данный код входят четыре независимые друг от друга примера, иллюстрирующие различные варианты использования интерфейса SDK:
- Пример 1: простой запрос, состоящий из одного текстового описания.
- Пример 2: запрос, состоящий из двух текстовых описаний, с сохранением результата в файл
./image.jpeg. - Пример 3: запрос, состоящий из двух текстовых описаний с указанием веса.
- Пример 4: сочетание запроса к модели YandexGPT Pro (для генерации расширенного промпта) и запроса к модели YandexART (для генерации изображения по этому промпту).
Код в примере не возвращает объект Operation, а дожидается выполнения моделями запросов и сохраняет результат в переменную result.
-
Создайте файл
generate-image.pyи добавьте в него следующий код:#!/usr/bin/env python3 from __future__ import annotations import pathlib from yandex_cloud_ml_sdk import YCloudML message1 = "a red cat" message2 = "Miyazaki style" def main(): sdk = YCloudML( folder_id="<идентификатор_каталога>", auth="<API-ключ>", ) model = sdk.models.image_generation("yandex-art") # configuring model for all of future runs model = model.configure(width_ratio=1, height_ratio=2, seed=50) # Sample 1: simple run operation = model.run_deferred(message1) result = operation.wait() print(result) # Sample 2: run with several messages, saving the result to file path = pathlib.Path("./image.jpeg") try: operation = model.run_deferred([message1, message2]) result = operation.wait() path.write_bytes(result.image_bytes) finally: path.unlink(missing_ok=True) # Sample 3: run with several messages specifying weight operation = model.run_deferred([{"text": message1, "weight": 5}, message2]) result = operation.wait() print(result) # Sample 4: example of combining YandexGPT and YandexART models gpt = sdk.models.completions("yandexgpt") messages = gpt.run( [ "you need to create a prompt for a yandexart model", "of " + message1 + "in" + message2, ] ) print(messages) operation = model.run_deferred(messages) result = operation.wait() print(result) if __name__ == "__main__": main()Где:
Примечание
В качестве входных данных для запроса Yandex Cloud ML SDK может принимать строку, словарь, объект класса
TextMessageили массив, содержащий любое сочетание указанных типов данных. Подробнее см. в разделе Использование Yandex Cloud ML SDK.message1— основная часть запроса на генерацию изображения.message2— уточняющая часть запроса на генерацию изображения.
-
<идентификатор_каталога>— идентификатор каталога, в котором создан сервисный аккаунт. -
<API-ключ>— API-ключ сервисного аккаунта, полученный ранее и необходимый для аутентификации в API.В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.
Подробнее о том, как обращаться к модели генерации изображений, см. в разделе Обращение к моделям.
-
Выполните созданный файл:
python3 generate-image.pyРезультат:
ImageGenerationModelResult(model_version='', image_bytes=<889288 bytes>) ImageGenerationModelResult(model_version='', image_bytes=<1062632 bytes>) GPTModelResult(alternatives=(Alternative(role='assistant', text='Вот пример того, как может выглядеть запрос для модели YandexART:\n\n«Создай изображение красной кошки в стиле аниме Хаяо Миядзаки. Фон должен быть выполнен в мягких пастельных тонах с добавлением деталей, которые подчёркивают атмосферу волшебства и уюта».\n\n*Обратите внимание, что это лишь пример запроса, и вы можете адаптировать его под свои нужды.*', status=<AlternativeStatus.FINAL: 3>),), usage=Usage(input_text_tokens=31, completion_tokens=76, total_tokens=107), model_version='07.03.2024') ImageGenerationModelResult(model_version='', image_bytes=<1180073 bytes>)
Пример ниже разработан для выполнения в операционных системах MacOS и Linux. Чтобы выполнить его в системе Windows, ознакомьтесь с особенностями работы с Bash в Microsoft Windows.
-
Создайте файл с телом запроса (например,
prompt.json):{ "modelUri": "art://<идентификатор_каталога>/yandex-art/latest", "generationOptions": { "seed": "1863", "aspectRatio": { "widthRatio": "2", "heightRatio": "1" } }, "messages": [ { "text": "узор из цветных пастельных суккулентов разных сортов, hd full wallpaper, четкий фокус, множество сложных деталей, глубина кадра, вид сверху" } ] }Где:
modelUri— идентификатор модели YandexART, содержащий идентификатор каталога Yandex Cloud.seed— зерно генерации.text— текстовое описание изображения, на основе которого будет происходить генерация.aspectRatio— (опционально) соотношение сторон генерируемого изображения:widthRatio— ширина (по умолчанию 1).heightRatio— высота (по умолчанию 1).
-
Отправьте запрос нейросети с помощью метода ImageGenerationAsync.generate, выполнив команду:
curl \ --request POST \ --header "Authorization: Bearer <значение_IAM-токена>" \ --data "@prompt.json" \ "https://llm.api.cloud.yandex.net/foundationModels/v1/imageGenerationAsync"Где:
<значение_IAM-токена>— IAM-токен вашего аккаунта.prompt.json— файл в формате JSON, содержащий параметры запроса.
В ответе сервис вернет объект Operation:
{"id":"fbveu1sntj**********","description":"","createdAt":null,"createdBy":"","modifiedAt":null,"done":false,"metadata":null}Сохраните идентификатор (
id) операции, полученный в ответе. -
Генерация изображения может занять от нескольких секунд до нескольких часов. Подождите некоторое время и отправьте запрос по адресу:
https://llm.api.cloud.yandex.net:443/operations/<идентификатор_операции>, чтобы получить результат генерации. Если изображение готово, результат вернется в кодировке Base64 и будет записан в файлimage.jpeg.curl --request GET --header "Authorization: Bearer <значение_IAM-токена>" https://llm.api.cloud.yandex.net:443/operations/<идентификатор_операции> | jq -r '.response | .image' | base64 -d > image.jpegГде:
<значение_IAM-токена>— IAM-токен, полученный перед началом работы.<идентификатор_операции>— значение поляid, полученное в ответе на запрос генерации.
См. также
- Обзор AI-моделей сервиса Yandex AI Studio
- Примеры работы с ML SDK на GitHub