Разбор API Yes Ai для нейросети по переодеванию одежды ACC

В сервисе Yes Ai отктрыт API к нейросети ACC, которая занимается переодеванием одежды прямо на фотографиях. ACC (Artificial Intelligence Change Clothes) отлично распознаёт, что именно надето на человеке, и без труда меняет его гардероб в нужный образ. Всё, что требуется для работы: загрузить фото человека, на котором видно его одежду, и второе изображение с желаемым луком. Нейросеть сама подберёт и наложит новый наряд, сделав замену максимально реалистичной.

Разбор API Yes Ai для нейросети по переодеванию одежды ACC

Я рекомендую попробовать эту функцию через Telegram-бота @yes_ai_bot перед использованием API на практике. Это отличный способ быстро оценить возможности инструмента без лишних сложностей и настроек.

Для кого полезен сервис переодевания одежды на фото:

  • Стилисты смогут виртуально примерять разные образы без живых фотосессий.
  • Владельцы магазинов и продавцы вещей на маркетплейсах вроде OZON, Wildberries легко покажут покупателям, как будет выглядеть вещь на человеке.
  • Менеджеры по созданию товарных карточек получат качественные изображения без затрат на студийную съемку.
  • Любой человек захочет опробовать онлайн-примерочную из дома — это даже интересно!

Чтобы начать работать с Yes Ai API, потребуется авторизационный токен — процесс его получения расписан по шагам в инструкции.

Актуальные тарифы всегда можно узнать, отправив команду /prices в бот @yes_ai_bot (см. раздел «Замена одежды ACC»).

Как отправить задачу на переодевание одежды через API

POST https://api.yesai.su/v2/stablediffusion/changeclothes
headers: { Content-Type: application/json, Authorization: Bearer }

Вот пример запроса:

curl -X POST https://api.yesai.su/v2/stablediffusion/changeclothes -H "Authorization: Bearer <token>" -H "Content-Type: application/json" -d '{ "type": 55, "photo_url": "https://yesai.su/tests/person1.jpeg", "image_url": "https://yesai.su/tests/clothes1.jpeg" }'

Параметры задачи:

type = 55 (обязательный параметр: 55 — замена верхней одежды, 56 — замена нижней, 57 — полная замена)
photo_url = '' (обязательно вставьте ссылку на фото персонажа)
image_url = '' (обязательно укажите ссылку на изображение новой одежды)

Пример удачного ответа от сервиса после отправки задания:

['success' => true, 'message' => 'OK', 'results' => ['generation_data' => [ ... ]]], 200

Разберём, как устроен этот отклик эндпойнта, если вы отправляете задачу на смену одежды:

{ "success": true, // данные успешно получены "message": "OK", "results": { "generation_data": { "id": 24, // номер родительского задания, по которому можно получить результаты генераций "user_id": 31234567, // id пользователя в системе Yes Ai, который подал задание "tariff_id": 30, // id тарифного плана пользователя, который подал задание "type": 55, // метод замены одежды, где 55 - замена одежды выше пояса "styles": [], // для этого типа заданий стили не применяются "settings": { "dress_type": "upper_body" // текстовое описание метода замены одежды }, "child_ids": [], // список id дочерних заданий "parent_id": 0, "photo_url": "https://yesai.su/tests/person1.jpeg", // прямая ссылка на фотографию человека, на котором нужно заменить одежду "image_url": "https://yesai.su/tests/clothes1.jpeg", // прямая ссылка на фотографию одежды, которую нужно использовать для замены "result_url": "", "result_type": "", "result_data": [], "comment_ru": "", "comment_en": "", "accounting": [], "language": "", "prompt": "", "status": 0, // код статуса выполнения задания "status_description": "in queue", // текстовое описание статуса задания "start_at": 0, "finish_at": 0, "created_at": 1716155819, // unixtime - время подачи задания "updated_at": 1716155819 // unixtime - время последнего обновления статуса задания } } }

Варианты кодов статусов задачи:

  • status: 0 (status_description: "in queue") — Задание стоит в очереди. Ждём своей очереди.
  • status: 1 (status_description: "in progress") — Сейчас задание обрабатывается. Терпения, процесс идёт.
  • status: 2 (status_description: "completed") — Работа успешно завершена. Можно переходить к анализу результата. Дочерние задачи появятся по мере готовности, обычно с интервалом от 10 до 30 секунд.
  • status: 3 (status_description: "rejected with error") — Ошибка, выполнение остановлено. Причину ищем в полях comment_ru и comment_en.
  • status: 4 (status_description: "rejected due to timeout") — Таймаут, задание не выполнено из-за превышения времени ожидания. Пробуем отправить заново.

Ниже дан перечень возможных ошибок системы:

['success' => false, 'message' => 'TYPE_IS_EMPTY'], 400
['success' => false, 'message' => 'TYPE_NOT_VALID'], 400
['success' => false, 'message' => 'PHOTO_URL_IS_EMPTY'], 400
['success' => false, 'message' => 'PHOTO_URL_NOT_VALID'], 400
['success' => false, 'message' => 'IMAGE_URL_IS_EMPTY'], 400
['success' => false, 'message' => 'IMAGE_URL_NOT_VALID'], 400
['success' => false, 'message' => 'PHOTO_FILE_SIZE_NOT_VALID'], 400
['success' => false, 'message' => 'IMAGE_FILE_SIZE_NOT_VALID'], 400
['success' => false, 'message' => 'PHOTO_MIME_TYPE_NOT_VALID'], 400
['success' => false, 'message' => 'IMAGE_MIME_TYPE_NOT_VALID'], 400
['success' => false, 'message' => 'UNAUTHORIZED'], 401
['success' => false, 'message' => 'PHOTO_NOT_FOUND'], 404
['success' => false, 'message' => 'IMAGE_NOT_FOUND'], 404
['success' => false, 'message' => 'USER_HAS_BEEN_BANNED'], 409
['success' => false, 'message' => 'USER_HAS_BEEN_DELETED'], 409
['success' => false, 'message' => 'NOT_ENOUGH_RPOINTS'], 409
['success' => false, 'message' => 'TASK_LIMIT_EXCEEDED'], 409
['success' => false, 'message' => 'TOO_MANY_REQUESTS'], 429
['success' => false, 'message' => 'INTERNAL_SERVER_ERROR'], 500

Как получить результаты замены одежды на человеке в нейросети ACC

Когда вы запускаете процесс смены одежды в ACC, нейросеть автоматически создает три разных изображения с различными вариантами одежды на одном человеке. После отправки задания система присваивает ему уникальный идентификатор. Благодаря этому ID можно отслеживать статус работы и скачивать итоговые картинки.

Каждое дочернее изображение появляется через 10–20 секунд после предыдущего. Поэтому советую именно с такой периодичностью проверять эндпойнт, чтобы не пропустить новые результаты.

GET https://api.yesai.su/v2/stablediffusion/generations/{id}/batch
headers: { Content-Type: application/json, Authorization: Bearer }

Вот пример запроса, который покажет список всех сгенерированных изображений по родительскому ID:

curl -X GET https://api.yesai.su/v2/stablediffusion/generations/{id}/batch -H "Authorization: Bearer <token>" -H "Content-Type: application/json"

Параметры:

{id} = 12345 (обязательно, id родительского задания)

Ниже дан перечень возможных ошибок системы:

['success' => false, 'message' => 'ID_IS_EMPTY'], 400
['success' => false, 'message' => 'ID_NOT_VALID'], 400
['success' => false, 'message' => 'UNAUTHORIZED'], 401
['success' => false, 'message' => 'ID_NOT_FOUND'], 404
['success' => false, 'message' => 'USER_HAS_BEEN_BANNED'], 409
['success' => false, 'message' => 'USER_HAS_BEEN_DELETED'], 409
['success' => false, 'message' => 'TOO_MANY_REQUESTS'], 429
['success' => false, 'message' => 'INTERNAL_SERVER_ERROR'], 500

Пример удачного ответа при получении данных о задании:

['success' => true, 'message' => 'OK', 'results' => ['generations_data' => [ ... ]]], 200

Анализ примера ответа эндпойнта с результатами генерации в JSON

Код разбили на 2 блока, т.к. данная площадка не позволяет уместить все в один блок

{ "success": true, // данные успешно получены "message": "OK", "results": { "generations_data": { "info": { "count": 3, // количество генераций, которые выполнены в момент проверки для родительского задания {id} "max_id": 26, // последний {id} в этой пачке заданий "limit_offset": 0, "limit_count": 20, "sort_field": "id", "sort_order": 1, "id_offset": 2147483647 }, "data": [ { "id": 24, // уникальный ID задания в системе Yes Ai, он же является {id} родительского задания "user_id": 31234567, // ID пользователя, который подал задание "tariff_id": 30, // тарифный план пользователя (0 - Demo, 5 - Micro, 10 - Start, 20 - Standard, 30 - VIP) "type": 55, // тип задания, 55 - замена одежды выше пояса "styles": [], // список стилей, которые были использованы для генерации, для ACC не используется "settings": { "dress_type": "upper_body" // текстовый идентификатор метода замены одежды, upper_body - замена одежды выше пояса }, "child_ids": [25, 26], // список дочерних заданий для родительского задания {id} "parent_id": 0, "photo_url": "https://yesai.su/tests/person1.jpeg", "image_url": "https://yesai.su/tests/clothes1.jpeg", "result_url": "https://yesai.su/files/stablediffusion/generations/31234567_1716155856135763.png", // ссылка для скачивания первой генерации в пачке заданий "result_type": "image", // тип результата выполнения задания, image - изображение "result_data": { "image_width": 1024, // ширина изображения в пикселях "image_height": 1024, // высота изображения в пикселях "image_mime_type": "image/png" // тип изображения }, "comment_ru": "", // комментарий к заданию на русском языке, он заполняется только в том случае, если задание не удалось выполнить "comment_en": "", // комментарий к заданию на английском языке, он заполняется только в том случае, если задание не удалось выполнить "accounting": { "total_cost": 4.25, // итоговая стоимость выполнения задания в условных единицах "spent_points": 0, // количество ⭐️баллов, которые были сняты с баланса за выполнение задания. Для ACC поле всегда будет равно 0, т.к. оплата производится в 🔅монетах "spent_rpoints": 4.25, // количество 🔅монет, которые были сняты с баланса за выполнение задания "spent_repost_points": 0, // количество бонусных баллов за репосты, которое было снято за выполнение задания. Для ACC поле всегда будет равно 0, т.к. оплата производится в 🔅монетах "spent_balance": 0, // количество денег с основного баланса, которое было снято за выполнение задания. Для ACC поле всегда будет равно 0, т.к. оплата производится в 🔅монетах "spent_rbalance": 0, // количество денег с бонусного баланса, которое было снято за выполнение задания. Для ACC поле всегда будет равно 0, т.к. оплата производится в 🔅монетах "remaining_points": 2314, // остаток средств на балансе ⭐️баллов после выполнения задания "remaining_rpoints": 828.6427624, // остаток средств на балансе 🔅монет после выполнения задания "remaining_repost_points": 0, // остаток баллов на балансе репостов после выполнения задания "remaining_balance": 1, // остаток средств на основном балансе после выполнения задания "remaining_rbalance": 5054.625 // остаток средств на бонусном балансе после выполнения задания }, "language": "", "prompt": "", "status": 2, // статус задания, где 2 - успешное завершение "status_description": "completed", // текстовое пояснение к статусу задания, где completed означает успешное завершение "start_at": 1716155820, // unixtime, время начала выполнения задания "finish_at": 1716155857, // unixtime, время завершения выполнения задания "created_at": 1716155819, // unixtime, время подачи задания клиентом "updated_at": 1716155919 // unixtime, время последнего обновления статуса задания }, {
"id": 25, // уникальный {id} дочернего задания в системе Yes Ai "user_id": 31234567, "tariff_id": 30, "type": 55, "styles": [], "settings": { "dress_type": "upper_body" }, "child_ids": [], "parent_id": 0, "photo_url": "https://yesai.su/tests/person1.jpeg", "image_url": "https://yesai.su/tests/clothes1.jpeg", "result_url": "https://yesai.su/files/stablediffusion/generations/31234567_1716155888768671.png", // ссылка для скачивания второй генерации в пачке заданий "result_type": "image", "result_data": { "image_width": 1024, "image_height": 1024, "image_mime_type": "image/png" }, "comment_ru": "", "comment_en": "", "accounting": { "total_cost": 4.25, "spent_points": 0, "spent_rpoints": 4.25, "spent_repost_points": 0, "spent_balance": 0, "spent_rbalance": 0, "remaining_points": 2314, "remaining_rpoints": 824.3927624, "remaining_repost_points": 0, "remaining_balance": 1, "remaining_rbalance": 5054.625 }, "language": "", "prompt": "", "status": 2, "status_description": "completed", "start_at": 1716155889, "finish_at": 1716155889, "created_at": 1716155887, "updated_at": 1716155889 }, { "id": 26, // вложенные данные о втором дочернем задании из пачки, см. пример JSON из дочернего задания с id 25 } ] } } }

Результаты задачи доступны для скачивания в течение часа после её окончания. Не откладывайте — загружайте созданные изображения на свой сервер сразу же.

Если во время работы с API Yes Ai появятся вопросы, напишите в нашу техподдержку в Telegram: @yes_ai_support Мы всегда на связи.

Оригинальная документация находиться на сайте yesai.su

Начать дискуссию