> 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

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

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

{% 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. Выберите **On-Demand** (фиксированная ставка) или **Spot** (цена ставки)
4. Настройте свой заказ:
   * Выберите Docker-образ
   * Установите порты (TCP для SSH, HTTP для веб-интерфейсов)
   * При необходимости добавьте переменные окружения
   * Введите команду запуска
5. Выберите способ оплаты: **CLORE**, **BTC**, или **USDT/USDC**
6. Создайте заказ и дождитесь развертывания

### Получите доступ к своему серверу

* Найдите данные для подключения в **Мои заказы**
* Веб-интерфейсы: используйте URL HTTP-порта
* SSH: `ssh -p <port> 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 8 ГБ | RTX 4080 16GB | RTX 4090 24GB |
| VRAM      | 8 ГБ          | 16GB          | 24 ГБ         |
| CPU       | 4 ядра        | 8 ядер        | 16 ядер       |
| ОЗУ       | 16GB          | 32GB          | 64GB          |
| Хранилище | 30GB SSD      | 50GB NVMe     | 100GB NVMe    |
| Интернет  | 100 Мбит/с    | 500 Мбит/с    | 1 Гбит/с      |

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

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

```
pytorch/pytorch:2.11.0-cuda12.8-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"Обработка {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="Привет! Добро пожаловать на нашу презентацию.",
    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 40 ГБ | \~$0.17          | \~$4.00        | \~$0.70          |
| A100 80 ГБ | \~$0.25          | \~$6.00        | \~$1.00          |

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

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

* Используйте **Spot** рынок для прерываемых задач — примерно треть серверов оценивает spot-цены ниже on-demand (медиана \~13% скидки), остальные совпадают с ними
* Платите **CLORE** токенами
* Сравните цены у разных провайдеров

## Дальнейшие шаги

* [SadTalker](/guides/guides_v2-ru/govoryashie-golovy/sadtalker.md) - Альтернативный говорящий головой аватар
* [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, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
