> For the complete documentation index, see [llms.txt](https://docs.clore.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clore.ai/guides/guides_v2-ru/govoryashie-golovy/liveportrait.md).

# LivePortrait

Создавайте реалистичные анимированные портреты из одиночных изображений.

{% hint style="success" %}
Все примеры можно запустить на GPU-серверах, арендуемых через [CLORE.AI Маркетплейс](https://clore.ai/marketplace).
{% endhint %}

{% hint style="info" %}
Все примеры в этом руководстве можно запустить на GPU-серверах, арендуемых через [CLORE.AI Маркетплейс](https://clore.ai/marketplace) маркетплейс.
{% endhint %}

## Аренда на CLORE.AI

1. Посетите [CLORE.AI Маркетплейс](https://clore.ai/marketplace)
2. Фильтруйте по типу GPU, объёму VRAM и цене
3. Выберите **По запросу** (фиксированная ставка) или **Спот** (цена заявки)
4. Настройте заказ:
   * Выберите Docker-образ
   * Установите порты (TCP для SSH, HTTP для веб-интерфейсов)
   * При необходимости добавьте переменные окружения
   * Введите команду запуска
5. Выберите способ оплаты: **CLORE**, **BTC**, или **USDT/USDC**
6. Создайте заказ и дождитесь развертывания

### Доступ к вашему серверу

* Найдите данные для подключения в **Мои заказы**
* Веб-интерфейсы: используйте URL HTTP-порта
* SSH: `ssh -p <порт> root@<proxy-address>`

## Что такое LivePortrait?

LivePortrait от Kuaishou позволяет:

* Анимировать любой портрет с помощью управляющего видео
* Преобразование одной фотографии в анимированное видео
* Передача выражения и позы
* Инференс, способный работать в реальном времени

## Ресурсы

* **GitHub:** [KwaiVGI/LivePortrait](https://github.com/KwaiVGI/LivePortrait)
* **Статья:** [Статья LivePortrait](https://arxiv.org/abs/2407.03168)
* **HuggingFace:** [KwaiVGI/LivePortrait](https://huggingface.co/KwaiVGI/LivePortrait)
* **Демо:** [HuggingFace Space](https://huggingface.co/spaces/KwaiVGI/LivePortrait)

## Рекомендованное оборудование

| Компонент | Минимум      | Рекомендуется | Оптимально    |
| --------- | ------------ | ------------- | ------------- |
| GPU       | RTX 3070 8GB | RTX 4080 16GB | RTX 4090 24GB |
| VRAM      | 8GB          | 16GB          | 24 ГБ         |
| CPU       | 4 ядра       | 8 ядер        | 16 ядер       |
| ОЗУ       | 16GB         | 32GB          | 64GB          |
| Хранилище | 30GB SSD     | 50GB NVMe     | 100GB NVMe    |
| Интернет  | 100 Мбит/с   | 500 Мбит/с    | 1 Гбит/с      |

## Быстрое развертывание на CLORE.AI

**Docker-образ:**

```
pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel
```

**Порты:**

```
22/tcp
7860/http
```

**Команда:**

```bash
cd /workspace && \
git clone https://github.com/KwaiVGI/LivePortrait.git && \
cd LivePortrait && \
pip install -r requirements.txt && \
python app.py
```

## Доступ к вашему сервису

После развертывания найдите ваш `http_pub` URL в **Мои заказы**:

1. Перейдите на **Мои заказы** страницу
2. Нажмите на ваш заказ
3. Найдите `http_pub` URL (например, `abc123.clorecloud.net`)

Используйте `https://YOUR_HTTP_PUB_URL` вместо `localhost` в примерах ниже.

## Установка

```bash
git clone https://github.com/KwaiVGI/LivePortrait.git
cd LivePortrait
pip install -r requirements.txt

# Загрузите предварительно обученные модели
huggingface-cli download KwaiVGI/LivePortrait --local-dir pretrained_weights
```

## Что вы можете создать

### Виртуальные аватары

* AI-инфлюенсеры и виртуальные ведущие
* Аватары для обслуживания клиентов
* Образовательные ведущие

### Создание контента

* Контент для социальных сетей
* Маркетинговые материалы
* Концепции музыкальных видео

### Развлечения

* Анимировать исторические фотографии
* Анимация персонажей
* Интерактивные развлечения

### Профессиональное использование

* Аватары для видеоконференций
* Ассистенты для презентаций
* Тренировочные симуляции

## Базовое использование

### Командная строка

```bash
python inference.py \
    --source_image path/to/portrait.jpg \
    --driving_video path/to/driving.mp4 \
    --output_path output.mp4
```

### Python API

```python
from liveportrait import LivePortraitPipeline

# Инициализация пайплайна
pipeline = LivePortraitPipeline(
    device="cuda",
    model_path="./pretrained_weights"
)

# Анимировать портрет
result = pipeline.animate(
    source_image="portrait.jpg",
    driving_video="driving.mp4"
)

result.save("animated_portrait.mp4")
```

## Портрет с управлением выражением

```python
from liveportrait import LivePortraitPipeline
import cv2

pipeline = LivePortraitPipeline(device="cuda")

# Управлять конкретными выражениями
expressions = {
    "smile": 0.8,
    "eyebrow_raise": 0.3,
    "head_pitch": -5,  # градусы
    "head_yaw": 10
}

result = pipeline.animate_with_expression(
    source_image="portrait.jpg",
    expressions=expressions,
    num_frames=60,
    fps=30
)

result.save("expression_controlled.mp4")
```

## Пакетная обработка

```python
import os
from liveportrait import LivePortraitPipeline

pipeline = LivePortraitPipeline(device="cuda")

# Анимировать несколько портретов с одним управляющим видео
portraits = [
    "portrait1.jpg",
    "portrait2.jpg",
    "portrait3.jpg"
]

driving = "speech_driving.mp4"
output_dir = "./animated"
os.makedirs(output_dir, exist_ok=True)

for i, portrait in enumerate(portraits):
    print(f"Processing {i+1}/{len(portraits)}: {portrait}")

    result = pipeline.animate(
        source_image=portrait,
        driving_video=driving
    )

    result.save(f"{output_dir}/animated_{i:03d}.mp4")
```

## Интерфейс Gradio

```python
import gradio as gr
from liveportrait import LivePortraitPipeline
import tempfile

pipeline = LivePortraitPipeline(device="cuda")

def animate(source_image, driving_video):
    with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as f:
        result = pipeline.animate(
            source_image=source_image,
            driving_video=driving_video
        )
        result.save(f.name)
        return f.name

demo = gr.Interface(
    fn=animate,
    inputs=[
        gr.Image(type="filepath", label="Изображение портрета"),
        gr.Video(label="Управляющее видео")
    ],
    outputs=gr.Video(label="Анимированный портрет"),
    title="LivePortrait - Анимируйте любой портрет",
    description="Загрузите портрет и управляющее видео, чтобы создать анимированное видео. Запуск на GPU-серверах CLORE.AI."
)

demo.launch(server_name="0.0.0.0", server_port=7860)
```

## Анимация в реальном времени через веб-камеру

```python
import cv2
from liveportrait import LivePortraitPipeline

pipeline = LivePortraitPipeline(device="cuda")

# Загрузить исходный портрет
source = cv2.imread("portrait.jpg")
pipeline.set_source(source)

# Открыть веб-камеру
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # Анимировать с текущим кадром как управляющим
    animated = pipeline.animate_frame(frame)

    cv2.imshow("LivePortrait", animated)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
```

## Интеграция с TTS

Создавайте говорящие аватары с преобразованием текста в речь:

```python
from liveportrait import LivePortraitPipeline
from TTS.api import TTS

# Сгенерировать речь
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2")
tts.tts_to_file(
    text="Hello! Welcome to our presentation.",
    file_path="speech.wav",
    speaker_wav="reference_voice.wav",
    language="en"
)

# Сгенерировать управляющее видео для синхронизации губ из аудио

# (С использованием отдельного инструмента для синхронизации губ или заранее подготовленного управляющего видео)

# Анимировать портрет
pipeline = LivePortraitPipeline(device="cuda")
result = pipeline.animate(
    source_image="presenter.jpg",
    driving_video="lip_sync_driving.mp4"
)
result.save("talking_avatar.mp4")
```

## Производительность

| Разрешение | GPU      | FPS | Задержка |
| ---------- | -------- | --- | -------- |
| 256x256    | RTX 3070 | 30  | 33 мс    |
| 256x256    | RTX 4090 | 60+ | 16 мс    |
| 512x512    | RTX 4090 | 30  | 33 мс    |
| 512x512    | A100     | 45  | 22 мс    |

## Распространённые проблемы и решения

### Лицо не обнаружено

**Проблема:** "В исходном изображении не обнаружено лицо"

**Решения:**

* Убедитесь, что лицо четко видно и обращено вперед
* Используйте хорошее освещение на исходном изображении
* Обрежьте изображение, чтобы сосредоточиться на лице
* Минимальный размер лица: 128x128 пикселей

### Движение не соответствует

**Проблема:** Анимация не повторяет управляющее видео

**Решения:**

* Используйте управляющие видео с четкими движениями лица
* Убедитесь, что в управляющем видео аналогичная ориентация лица
* Попробуйте другие управляющие видео

### Проблемы с качеством

**Проблема:** Выход выглядит размытым или искаженным

**Решения:**

```python

# Используйте настройки более высокого качества
result = pipeline.animate(
    source_image=source,
    driving_video=driving,
    output_size=512,  # Более высокое разрешение
    enhance_face=True  # Включить улучшение лица
)
```

### Задержка в реальном времени

**Проблема:** Анимация с веб-камеры лагает

**Решения:**

* Используйте меньшее выходное разрешение (256x256)
* Включите оптимизацию TensorRT
* Используйте RTX 4090 или лучше для реального времени

```python
pipeline = LivePortraitPipeline(
    device="cuda",
    use_tensorrt=True  # Включить TensorRT
)
```

### Проблемы синхронизации аудио

**Проблема:** Движения губ не совпадают с аудио

**Решения:**

* Используйте генерацию управляющего видео из аудио
* Отрегулируйте время видео в постобработке
* Используйте Wav2Lip для лучшей синхронизации губ

## Устранение неполадок

### Лицо не обнаружено

* Убедитесь, что лицо четко видно на исходном изображении
* Используйте фотографии, где лицо направлено вперед
* Проверьте разрешение изображения (рекомендуется 512+)

### Анимация выглядит неестественно

* Исходное изображение и управляющее видео должны иметь похожие углы лица
* Избегайте экстремальных выражений в управляющем видео
* Используйте более короткие управляющие клипы

### Выходное видео повреждено

* Установите ffmpeg: `apt install ffmpeg`
* Проверьте совместимость формата вывода
* Убедитесь, что на диске достаточно места

### Ошибка CUDA

* Установите совместимую версию PyTorch
* Проверьте, что версия CUDA соответствует требованиям

## Оценка стоимости

Типичные ставки на маркетплейсе CLORE.AI (по состоянию на 2024):

| GPU       | Почасовая ставка | Дневная ставка | Сессия 4 часа |
| --------- | ---------------- | -------------- | ------------- |
| RTX 3060  | \~$0.03          | \~$0.70        | \~$0.12       |
| RTX 3090  | \~$0.06          | \~$1.50        | \~$0.25       |
| RTX 4090  | \~$0.10          | \~$2.30        | \~$0.40       |
| A100 40GB | \~$0.17          | \~$4.00        | \~$0.70       |
| A100 80GB | \~$0.25          | \~$6.00        | \~$1.00       |

*Цены варьируются в зависимости от провайдера и спроса. Проверьте* [*CLORE.AI Маркетплейс*](https://clore.ai/marketplace) *для текущих тарифов.*

**Экономьте деньги:**

* Используйте **Спот** market для гибких нагрузок (часто на 30–50% дешевле)
* Платите с помощью **CLORE** токенов
* Сравнивайте цены у разных провайдеров

## Следующие шаги

* [SadTalker](/guides/guides_v2-ru/govoryashie-golovy/sadtalker.md) - Альтернативный talking head
* [Wav2Lip](/guides/guides_v2-ru/govoryashie-golovy/wav2lip.md) - Лучшая синхронизация губ
* [XTTS](/guides/guides_v2-ru/audio-i-golos/xtts-coqui.md) - Генерация голоса


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-ru/govoryashie-golovy/liveportrait.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
