> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xhuoapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Интеграция и использование Face Swap API

> Face Transformation 集成指南 - XHuoAPI

Основная функция Face Swap API заключается в том, чтобы заменить лицо на целевом изображении лицом на исходном изображении, вводя одно исходное и одно целевое изображение.

В этом документе подробно описывается интеграция Face Swap API, чтобы помочь вам легко интегрировать и в полной мере использовать мощные функции этого API. С помощью Face Swap API вы можете легко заменить лицо на целевом изображении лицом на исходном изображении.

## Процесс подачи заявки

Чтобы использовать Face Swap API, сначала необходимо перейти на страницу заявки [Face Swap API](https://api.xhuoapi.ai/documents/d10df07a-66a6-4c37-b114-3a003fc9bd55) и подать соответствующую заявку. После перехода на страницу нажмите кнопку «Acquire», как показано на изображении:

![Страница заявки](https://cdn.xhuoapi.ai/rci31i.png)

Если вы еще не вошли в систему или не зарегистрированы, вы будете автоматически перенаправлены на [страницу входа](https://api.xhuoapi.ai), где вам будет предложено зарегистрироваться и войти в систему. После входа или регистрации вы будете автоматически возвращены на текущую страницу.

При первой подаче заявки предоставляется бесплатный лимит, который позволяет бесплатно использовать этот API.

## Примеры запросов

Мы используем два изображения в качестве примера, чтобы продемонстрировать, как использовать этот API. Предположим, что исходное изображение выглядит следующим образом:

<p>
  <img src="https://cdn.xhuoapi.ai/n1lmd8.png" width="500" className="m-auto" />
</p>

Целевое изображение:

<p>
  <img src="https://cdn.xhuoapi.ai/3np95r.png" width="500" className="m-auto" />
</p>

Далее мы покажем, как заменить лицо на целевом изображении лицом на исходном изображении.

### Установка заголовков запроса и тела запроса

**Request Headers** включает:

* `accept`: указывает на прием ответа в формате JSON, здесь указывается `application/json`.
* `authorization`: ключ для вызова API, который можно выбрать из выпадающего списка после подачи заявки.

**Request Body** включает:

* `source_image_url`: ссылка на загруженное исходное изображение.
* `target_image_url`: ссылка на загруженное целевое изображение.
* `timeout`: необязательный, время ожидания обработки (в секундах), по истечении которого будет возвращен ответ.

Настройка выглядит следующим образом:

<p>
  <img src="https://cdn.xhuoapi.ai/g7tnn1.png" width="500" className="m-auto" />
</p>

### Пример кода

Можно заметить, что на правой стороне страницы автоматически сгенерирован код на различных языках, как показано на изображении:

<p>
  <img src="https://cdn.xhuoapi.ai/t8gsls.png" width="500" className="m-auto" />
</p>

Некоторые примеры кода:

#### CURL

```bash theme={null}
curl -X POST 'https://api.xhuoapi.ai/v1/face/swap' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "source_image_url": "https://cdn.xhuoapi.ai/n1lmd8.png",
  "target_image_url": "https://cdn.xhuoapi.ai/3np95r.png"
}'
```

#### Python

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/face/swap"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "source_image_url": "https://cdn.xhuoapi.ai/n1lmd8.png",
    "target_image_url": "https://cdn.xhuoapi.ai/3np95r.png"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

### Пример ответа

После успешного запроса API вернет информацию о результате замены лиц. Например:

```json theme={null}
{
  "image_url": "https://platform.cdn.xhuoapi.ai/face/4b13bdeb-1b19-4ea5-bddf-c2da14ba72e3.png",
  "image_width": 2008,
  "image_height": 1942,
  "image_size": 4006213,
  "task_id": "4b13bdeb-1b19-4ea5-bddf-c2da14ba72e3"
}
```

Можно увидеть, что в результате есть поле `image_url`, которое содержит ссылку на изображение с замененным лицом, а также другая информация, как показано на изображении:

* `image_url`: ссылка на сгенерированное изображение.
* `image_width`: ширина сгенерированного изображения.
* `image_height`: высота сгенерированного изображения.
* `image_size`: размер сгенерированного изображения.
* `task_id`: ID текущей задачи генерации.

Результат сгенерированного изображения:

<p>
  <img src="https://cdn.xhuoapi.ai/soa3lk.png" width="500" className="m-auto" />
</p>

Явно видно, что это изображение успешно заменило лицо на целевом изображении лицом на исходном изображении.

## Асинхронный обратный вызов

Поскольку время генерации Face Swap относительно долгое, примерно 1-2 минуты, если API долго не отвечает, HTTP-запрос будет поддерживать соединение, что приведет к дополнительным затратам системных ресурсов. Поэтому этот API также поддерживает асинхронные обратные вызовы.

Общий процесс таков: когда клиент инициирует запрос, дополнительно указывается поле `callback_url`. После того как клиент инициирует запрос API, API немедленно возвращает результат, содержащий поле `task_id`, представляющее текущий ID задачи. Когда задача завершена, результат генерации Face Swap будет отправлен на указанный клиентом `callback_url` в формате POST JSON, который также включает поле `task_id`, что позволяет связать результаты задачи по ID.

Давайте рассмотрим, как это работает на примере.

Во-первых, обратный вызов Webhook — это служба, которая может принимать HTTP-запросы, разработчик должен заменить ее на URL своего HTTP-сервера. Для удобства демонстрации мы используем публичный сайт примера Webhook [https://webhook.site/](https://webhook.site/), открыв который, вы получите URL Webhook, как показано на изображении:

![](https://cdn.xhuoapi.ai/r8wyb7.png)

Скопируйте этот URL, и вы сможете использовать его в качестве Webhook. Пример здесь: [https://webhook.site/3b76eba5-4573-432a-b607-3000b87afc06](https://webhook.site/3b76eba5-4573-432a-b607-3000b87afc06).

Далее мы можем установить поле `callback_url` на указанный URL Webhook и заполнить соответствующие параметры, как показано на изображении:

<p>
  <img src="https://cdn.xhuoapi.ai/xx08i2.png" width="500" className="m-auto" />
</p>

Нажмите «Запустить», и вы сразу получите результат, как показано ниже:

```json theme={null}
{
  "task_id": "9cba9d36-3b14-43c9-85b6-86f6dfc3b096"
}
```

Через некоторое время мы можем наблюдать результат генерации Face Swap на [https://webhook.site/3b76eba5-4573-432a-b607-3000b87afc06](https://webhook.site/3b76eba5-4573-432a-b607-3000b87afc06), как показано на изображении:

![](https://cdn.xhuoapi.ai/col42s.png)

Содержимое следующее:

```json theme={null}
{
  "success": true,
  "task_id": "9cba9d36-3b14-43c9-85b6-86f6dfc3b096",
  "image_url": "https://platform.cdn.xhuoapi.ai/face/9cba9d36-3b14-43c9-85b6-86f6dfc3b096.png",
  "image_width": 2008,
  "image_height": 1942,
  "image_size": 4006481
}
```

Можно увидеть, что в результате есть поле `task_id`, остальные поля аналогичны вышеупомянутым, и с помощью этого поля можно связать задачи.

## Обработка ошибок

При вызове API, если возникает ошибка, API вернет соответствующий код ошибки и информацию. Например:

* `400 token_mismatched`：Неверный запрос, возможно, из-за отсутствующих или недействительных параметров.
* `400 api_not_implemented`：Неверный запрос, возможно, из-за отсутствующих или недействительных параметров.
* `401 invalid_token`：Неавторизован, недействительный или отсутствующий токен авторизации.
* `429 too_many_requests`：Слишком много запросов, вы превысили лимит частоты.
* `500 api_error`：Внутренняя ошибка сервера, что-то пошло не так на сервере.

### Пример ошибки ответа

```
{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "fetch failed"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}
```

## Заключение

С помощью этого документа вы узнали, как использовать Face Swap API для замены лиц на целевом изображении лицом из исходного изображения. Надеемся, что этот документ поможет вам лучше интегрировать и использовать данный API. Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь обращаться в нашу техническую поддержку.
