# TripoSR

Генерируйте 3D модели из одиночных изображений менее чем за секунду.

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

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

1. Посетите [CLORE.AI Marketplace](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>`

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

TripoSR от Stability AI и Tripo AI предоставляет:

* Генерация 3D сетки из одного изображения
* Инференс менее чем за секунду
* Высококачественные текстурированные сетки
* Экспорт в OBJ, GLB и другие форматы

## Ресурсы

* **GitHub:** [VAST-AI-Research/TripoSR](https://github.com/VAST-AI-Research/TripoSR)
* **HuggingFace:** [stabilityai/TripoSR](https://huggingface.co/stabilityai/TripoSR)
* **Статья:** [Статья TripoSR](https://arxiv.org/abs/2403.02151)
* **Демо:** [HuggingFace Space](https://huggingface.co/spaces/stabilityai/TripoSR)

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

| Компонент | Минимум       | Рекомендуется | Оптимально    |
| --------- | ------------- | ------------- | ------------- |
| GPU       | RTX 3060 12GB | RTX 4080 16GB | RTX 4090 24GB |
| VRAM      | 8GB           | 12GB          | 16GB          |
| CPU       | 4 ядра        | 8 ядер        | 16 ядер       |
| ОЗУ       | 16GB          | 32GB          | 64GB          |
| Хранилище | 20 ГБ 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/VAST-AI-Research/TripoSR.git && \
cd TripoSR && \
pip install -r requirements.txt && \
python gradio_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/VAST-AI-Research/TripoSR.git
cd TripoSR
pip install -r requirements.txt

# Модели загружаются автоматически при первом запуске
```

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

### Игры и VR

* Преобразование концепт-арта в 3D-ассеты
* Быстрое прототипирование игровых объектов
* Генерация моделей персонажей
* Декоративные элементы окружения

### Электронная коммерция

* 3D-визуализация товаров
* AR-примерки
* Просмотры товара на 360 градусов
* Виртуальные шоурумы

### Архитектура

* Быстрые 3D-модели по эскизам
* Визуализация интерьера
* Прототипы мебели
* Генерация элементов здания

### Образование

* 3D-модели для учебных материалов
* Научная визуализация
* Воссоздание исторических артефактов
* Модели анатомии

### Творческие проекты

* Цифровое искусство и NFT
* Ресурсы для анимации
* Подготовка к 3D-печати
* Создание мемов и аватаров

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

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

```bash
python run.py input_image.png \
    --output-dir output/ \
    --render
```

### Python API

```python
import torch
from PIL import Image
from tsr.system import TSR
from tsr.utils import remove_background, save_video

# Загрузить модель
model = TSR.from_pretrained(
    "stabilityai/TripoSR",
    config_name="config.yaml",
    weight_name="model.ckpt"
)
model.to("cuda")

# Загрузить и предобработать изображение
image = Image.open("input.png")

# Сгенерировать 3D сетку
with torch.no_grad():
    scene_codes = model([image], device="cuda")

# Извлечь сетку
meshes = model.extract_mesh(scene_codes)

# Сохранить сетку
meshes[0].export("output.obj")
```

### С удалением фона

```python
from tsr.system import TSR
from tsr.utils import remove_background
from PIL import Image

model = TSR.from_pretrained("stabilityai/TripoSR")
model.to("cuda")

# Загрузить изображение и убрать фон
image = Image.open("photo.jpg")
image_no_bg = remove_background(image)

# Генерировать 3D
with torch.no_grad():
    scene_codes = model([image_no_bg], device="cuda")

mesh = model.extract_mesh(scene_codes)[0]
mesh.export("model.glb")  # Экспорт в GLB для веба
```

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

```python
import os
from PIL import Image
import torch
from tsr.system import TSR
from tsr.utils import remove_background

model = TSR.from_pretrained("stabilityai/TripoSR")
model.to("cuda")

input_dir = "./images"
output_dir = "./3d_models"
os.makedirs(output_dir, exist_ok=True)

images_to_process = []
filenames = []

for filename in os.listdir(input_dir):
    if not filename.endswith(('.jpg', '.png')):
        continue

    image = Image.open(os.path.join(input_dir, filename))
    image_no_bg = remove_background(image)
    images_to_process.append(image_no_bg)
    filenames.append(filename)

# Обработка пакетами
batch_size = 4
for i in range(0, len(images_to_process), batch_size):
    batch = images_to_process[i:i+batch_size]
    batch_names = filenames[i:i+batch_size]

    with torch.no_grad():
        scene_codes = model(batch, device="cuda")

    meshes = model.extract_mesh(scene_codes)

    for mesh, name in zip(meshes, batch_names):
        output_name = name.rsplit('.', 1)[0] + '.obj'
        mesh.export(os.path.join(output_dir, output_name))
        print(f"Generated: {output_name}")
```

## Форматы экспорта

```python
from tsr.system import TSR
from PIL import Image

model = TSR.from_pretrained("stabilityai/TripoSR")
model.to("cuda")

image = Image.open("input.png")

with torch.no_grad():
    scene_codes = model([image], device="cuda")

mesh = model.extract_mesh(scene_codes)[0]

# Различные форматы экспорта
mesh.export("model.obj")   # Wavefront OBJ
mesh.export("model.glb")   # GLTF бинарный (готов для веба)
mesh.export("model.ply")   # Формат PLY
mesh.export("model.stl")   # STL (3D-печать)
```

## Просмотр превью рендера

```python
from tsr.system import TSR
from tsr.utils import save_video
from PIL import Image
import torch

model = TSR.from_pretrained("stabilityai/TripoSR")
model.to("cuda")

image = Image.open("input.png")

with torch.no_grad():
    scene_codes = model([image], device="cuda")

# Отрендерить видео на 360 градусов
render_images = model.render(
    scene_codes,
    n_views=30,
    return_type="pil"
)

save_video(render_images[0], "preview.mp4", fps=30)
```

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

```python
import gradio as gr
import torch
from PIL import Image
from tsr.system import TSR
from tsr.utils import remove_background
import tempfile

model = TSR.from_pretrained("stabilityai/TripoSR")
model.to("cuda")

def generate_3d(image, remove_bg, output_format):
    if remove_bg:
        image = remove_background(image)

    with torch.no_grad():
        scene_codes = model([image], device="cuda")

    mesh = model.extract_mesh(scene_codes)[0]

    with tempfile.NamedTemporaryFile(suffix=f".{output_format}", delete=False) as f:
        mesh.export(f.name)
        return f.name, image

demo = gr.Interface(
    fn=generate_3d,
    inputs=[
        gr.Image(type="pil", label="Входное изображение"),
        gr.Checkbox(label="Remove Background", value=True),
        gr.Dropdown(choices=["obj", "glb", "ply", "stl"], value="glb", label="Output Format")
    ],
    outputs=[
        gr.File(label="3D Model"),
        gr.Image(label="Processed Input")
    ],
    title="TripoSR - Image to 3D",
    description="Generate 3D models from single images in seconds. Running on CLORE.AI GPU servers."
)

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

## С уточнением сетки

```python
from tsr.system import TSR
from PIL import Image
import torch

model = TSR.from_pretrained("stabilityai/TripoSR")
model.to("cuda")

image = Image.open("input.png")

with torch.no_grad():
    scene_codes = model([image], device="cuda")

# Извлечь с более высоким разрешением
mesh = model.extract_mesh(
    scene_codes,
    resolution=256  # Больше = больше деталей, по умолчанию 128
)[0]

mesh.export("high_detail.obj")
```

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

| Разрешение         | GPU      | Скорость | Качество |
| ------------------ | -------- | -------- | -------- |
| 128 (по умолчанию) | RTX 3090 | 0.5 с    | Хорошо   |
| 128                | RTX 4090 | 0.3 с    | Хорошо   |
| 256                | RTX 4090 | 1.2 с    | Лучше    |
| 256                | A100     | 0.8 с    | Лучше    |

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

### Плохое качество 3D

**Проблема:** Сгенерированная сетка выглядит неправильно или искаженно

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

* Используйте изображения с четким объектом и простым фоном
* Удаляйте фон перед обработкой
* Используйте вид объекта спереди
* Обеспечьте хорошее освещение на исходном изображении

```python

# Всегда удаляйте фон для лучших результатов
from tsr.utils import remove_background

image = Image.open("photo.jpg")
clean_image = remove_background(image)
```

### Удаление фона не удалось

**Проблема:** Удаление фона оставляет артефакты

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

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

```bash
pip install rembg
```

```python
from rembg import remove
from PIL import Image

image = Image.open("photo.jpg")
image_no_bg = remove(image)
image_no_bg.save("clean.png")
```

### Недостаточно памяти

**Проблема:** Недостаточно памяти CUDA при высоком разрешении

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

```python

# Используйте более низкое разрешение
mesh = model.extract_mesh(scene_codes, resolution=128)

# Или очищайте кэш между пакетами
import torch
torch.cuda.empty_cache()
```

### Сетка имеет отверстия

**Проблема:** Сгенерированная сетка имеет отсутствующие части

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

* Используйте извлечение с более высоким разрешением
* Попробуйте другой угол просмотра объекта
* Постобработка сетки в Blender или MeshLab
* Используйте изображения с полной видимостью объекта

### Медленная обработка

**Проблема:** Занимает слишком много времени на одно изображение

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

* Используйте пакетную обработку для нескольких изображений
* Ниже разрешение для прототипирования
* Используйте GPU RTX 4090 или A100

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

### Плохое качество 3D сетки

* Используйте изображения с четкими границами объекта
* Удалите или замаскируйте фон
* Лучше всего подходят виды спереди

### Экспорт не удался

* Проверьте, что выходная директория существует
* Проверьте, поддерживается ли формат сетки
* Убедитесь, что на диске достаточно места

### Текстура отсутствует

* Некоторые форматы экспорта не включают текстуру
* Используйте формат GLB для текстурированного вывода
* Проверьте настройки экспорта материалов

{% hint style="danger" %}
**Недостаточно памяти**
{% endhint %}

* TripoSR эффективен, но требует 6 ГБ+
* Уменьшите разрешение вывода
* Обрабатывайте по одному изображению за раз

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

Типичные ставки на маркетплейсе 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 Marketplace*](https://clore.ai/marketplace) *для текущих тарифов.*

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

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

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

* Stable Diffusion - Генерация входных изображений
* [IC-Light](https://docs.clore.ai/guides/guides_v2-ru/obrabotka-izobrazhenii/iclight) - Пересвет изображений перед 3D
* ComfyUI - Интеграция рабочего процесса
