File size: 8,591 Bytes
52a4f12
 
 
 
 
 
 
 
 
 
 
9e3b333
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9927cb8
9e3b333
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9927cb8
 
9e3b333
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
---
title: Layout Viewer
emoji: 📚
colorFrom: red
colorTo: blue
sdk: docker
pinned: false
---

Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference

# 🏪 ИИ-Мерчандайзер 3D (Text-to-3D Store Layout)

**ИИ-Мерчандайзер 3D** — это интеллектуальный генератор физически корректных 3D-планировок торговых залов, работающий на базе текстовых запросов (Text-to-3D). 

Система позволяет пользователю описать желаемую расстановку простым языком (например: *"Поставь молоко в холодильник, а пиво на стеллаж напротив"*), после чего оркестратор подключает LLM для формирования абстрактного графа, а затем использует физический движок (Space Syntax + Tensor Fields) для точного позиционирования объектов без коллизий.

![Python](https://img.shields.io/badge/python-3.10-blue.svg)
![Gradio](https://img.shields.io/badge/Gradio-UI-orange.svg)
![vLLM](https://img.shields.io/badge/vLLM-Backend-green.svg)
![Trimesh](https://img.shields.io/badge/3D-Trimesh-red.svg)

## ✨ Ключевые возможности

* **🗣️ Text-to-3D**: Превращение естественного языка в готовые трехмерные сцены.
* **🧠 Гибридная генерация (LLM + Физика)**: Языковая модель (Qwen) формирует черновой граф (Draft AABB), а алгоритмы тензорных полей и спирального поиска разрешают коллизии оборудования в непрерывном пространстве.
* **🛒 Умная планограмма**: Автоматический подбор 3D-моделей товаров (SKU) под запрошенные категории и динамический расчет их размещения на полках.
* **🗜️ Оптимизация для Web**: Экспорт готовых сцен в формате `.glb` с применением высокоэффективной Draco-компрессии.
* **📊 Богатые артефакты**: Генерация не только 3D, но и векторных 2D-планов (SVG), а также сырых JSON-данных с точными координатами для интеграции с ERP-системами.
* **🛠️ Отказоустойчивость**: Интеграция `json-repair` для "лечения" синтаксических ошибок в ответах LLM при генерации графов.

---

## 🏗 Как это работает (Пайплайн)

Генерация проходит через 6 автоматизированных шагов (`src/layout_generator/pipeline.py`):

1. **LLM-Оркестрация (`llm/client.py`)**: Запрос отправляется в локальный инстанс vLLM. Модель возвращает JSON-граф, где узлы — это оборудование с товарами, а ребра — пространственные связи (рядом, напротив).
2. **Загрузка ассетов (`assets.py`)**: Быстрый разогрев кэша ОЗУ — загрузка геометрии оборудования и SKU.
3. **Расчет планограммы (`planner.py`)**: Сопоставление абстрактных сущностей от LLM с конкретными 3D-моделями, расчет вместимости полок с учетом габаритов (AABB) каждого товара.
4. **Генерация топологии (`topology.py`)**: Разрешение физических коллизий между стеллажами. Используются черновые координаты LLM и направляющие тензорные поля.
5. **Сборка 3D-сцены (`assembler.py`)**: Финальный рендер объектов в единой сцене, генерация процедурного пола по размерам помещения.
6. **Экспорт и визуализация (`exporter.py`, `visualizer.py`)**: Сжатие `.glb` файла, отрисовка векторных 2D-планов (до и после физики) и сохранение логов.

---

## 🚀 Установка и запуск

### 1. Системные требования
* Python 3.10+
* GPU с поддержкой CUDA (рекомендуется от 16GB VRAM для локального запуска vLLM)

### 2. Установка зависимостей
Выполните клонирование репозитория и установку пакетов:
pip install -r requirements.txt

### 3. Запуск локального сервера vLLM
Сервер поднимается в фоновом режиме. Настройки модели и API задаются не хардкодом, а через конфигурационный файл `configs/main_config.yaml`.
python scripts/launch_llm_server.py

### 4. Запуск веб-интерфейса (Gradio)
Как только сервер LLM готов, запускайте UI:
python scripts/launch_ui.py

Интерфейс будет доступен по адресу: `http://localhost:7860`

*(Примечание: Проект полностью совместим с развертыванием в Hugging Face Spaces через предоставленный `Dockerfile` и `app.py`).*

---

## 📂 Структура проекта

layout-viewer/

├── app.py                      # Точка входа для Hugging Face Spaces

├── Dockerfile                  # Конфигурация окружения для облака

├── configs/                    # Настройки Hydra/OmegaConf

│   ├── main_config.yaml        # Основные настройки проекта и LLM

│   ├── llm_prompt.txt          # Системный промпт для LLM

│   └── asset_config.yaml       # Иерархия 3D-ассетов

├── scripts/                    # Утилиты запуска и дебага

│   ├── launch_llm_server.py    # Поднятие vLLM бэкенда

│   ├── launch_ui.py            # Старт Gradio UI

│   └── check_gpu.py            # Диагностика CUDA окружения

├── src/                        # Исходный код приложения

│   ├── dsynth/                 # Ядро генерации (Space Syntax, Tensor Fields)

│   ├── layout_generator/       # Пайплайн (Planogram, Topology, Assembler)

│   ├── llm/                    # Клиент для связи с vLLM сервером

│   └── ui/                     # Логика и компоненты Gradio

├── data/                       # Исходные данные и экспортированные 3D-модели

├── notebooks/                  # Jupyter тетрадки для экспериментов

├── reports/                    # Директория для отчетов генерации

└── logs/                       # Сгенерированные артефакты (создается автоматически)

---

## 📥 Артефакты генерации

Веб-интерфейс позволяет не только вращать 3D-сцену, но и скачивать результаты работы пайплайна (сохраняются в директории `logs/`):

* 📄 **Draft JSON / Final JSON**: Машиночитаемые координаты мебели до и после физического движка.
* 🗺️ **Draft SVG / Final SVG**: Черновой и финальный векторные 2D-планы (вид сверху).
* 📝 **History JSONL**: Полный лог взаимодействия с LLM (сырой промпт, ответ сети, парсинг) для дебага галлюцинаций.
* 🎮 **GLB**: Финальная скомпрессированная 3D-модель.