Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 122 additions & 0 deletions UI/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# Synthetics Generator UI

Интерактивный интерфейс для подбора параметров раскраски 3D-генератора синтетических EM-изображений.

## Установка зависимостей

```bash
pip install PySide6 matplotlib scikit-image opencv-python
```

## Запуск

```bash
# из корня проекта:
python UI/main_ui.py
```

## Структура окна

```
┌─ Toolbar ────────────────────────────────────────────────────────────────────┐
│ Synthetics Generator [Конфиг: setting.json Открыть] [☀/🌙] │
├─ Левая панель (380px) ──────┬─── Центральная панель ───┬─ Правая панель (380px) ─┤
│ │ │ │
│ [Параметры] [Настройки] │ [Визуализация] [Журнал] │ Гистограммы │
│ ───────────────────────── │ ────────────────────── │ ──────────────────── │
│ ┌─ Фон ─────────────────┐ │ ┌────────────────────┐ │ Слотов: [5] [+] │
│ │ Color Mean ────● 42 │ │ │ │ │ ┌────────────────┐ │
│ │ Sigma Blur ──● 1.2 │ │ │ сгенерированное │ │ │ #1 (новейший)│ │
│ └───────────────────────┘ │ │ изображение │ │ └────────────────┘ │
│ ┌─ Аксон ───────────────┐ │ │ │ │ ┌────────────────┐ │
│ │ ... │ │ └────────────────────┘ │ │ #2 │ │
│ └───────────────────────┘ │ Слой: [──●──] 0/1 │ └────────────────┘ │
│ │ Вид: [Оригинал ▼] │ ... │
│ [Сгенерировать основу ] │ │ │
│ [Перерисовать ] │ │ │
│ [Сохранить ▾ ] │ │ │
└─────────────────────────────┴──────────────────────────┴────────────────────────┘
```

## Левая панель

| Вкладка | Содержимое |
|---------|-----------|
| **Параметры** | Ползунки для всех ключей из JSON-конфига, сгруппированные по органеллам. Каждый ползунок имеет поле ввода для точного значения. |
| **Настройки** | Режим генерации (1 слой / датасет), количество органелл, размер изображения, папка и индекс датасета. |

### Кнопки (вертикально, снизу левой панели)

| Кнопка | Действие |
|--------|---------|
| **Сгенерировать основу** | Заглушка для ветки `generator_3d`. В ветке `main` выполняет полную генерацию слоя. |
| **Перерисовать** | Генерирует 1 слой (режим «Один слой») или полный датасет (режим «Датасет»). |
| **Сохранить ▾** | Раскрывает меню: «тот же файл» или «сохранить как…». |

## Центральная панель

| Вкладка | Содержимое |
|---------|-----------|
| **Визуализация** | Последнее сгенерированное изображение. Переключатель «Вид» позволяет показать любой из 7 слоёв: Оригинал, PSD, Аксон, Мембраны, Митохондрии, Границы мито, Везикулы. |
| **Журнал генерации** | Текстовый лог прогресса. Автоматически открывается при запуске генерации и возвращается к визуализации по завершении. |

## Правая панель — Гистограммы

- Кнопка **+** добавляет гистограмму текущего изображения в начало списка.
- Поле **Слотов** задаёт максимальное количество хранимых гистограмм (кольцевой буфер, по умолчанию 5).
- Список прокручивается; самая новая гистограмма всегда сверху.
- Требует `matplotlib`.

## Панель инструментов

| Элемент | Действие |
|---------|---------|
| **Открыть** | Загрузить другой JSON-конфиг; ползунки пересоздаются автоматически. |
| **☀ / 🌙** | Переключение светлой / тёмной темы. |

## Добавление новых параметров

Добавьте ключ в JSON-файл и откройте его через «Открыть» — ползунок появится автоматически.
Диапазоны определяются по суффиксу имени ключа:

| Суффикс | Диапазон |
|---------|---------|
| `_color_mean` | 0 – 255 |
| `_color_std` | 0 – 60 |
| `_sigma` | 0.05 – 6.0 |
| `_radius` | 1 – 15 |
| `_noise_w` | 1 – 15 |

---

## FAQ

**Q: Приложение не запускается — ошибка `No module named 'PySide6'`**
A: Установите зависимости: `pip install PySide6 matplotlib scikit-image opencv-python`

**Q: Параметры не появляются (левая панель пуста)**
A: Убедитесь, что запуск выполняется из корня проекта (`python UI/main_ui.py`), а файл `setting.json` существует рядом. Если открываете другой конфиг — убедитесь, что в нём есть числовые ключи.

**Q: Кнопка «Перерисовать» не реагирует**
A: Скорее всего, генерация ещё выполняется (кнопка отключена). Дождитесь завершения или проверьте вкладку «Журнал генерации» на предмет ошибок.

**Q: Ошибка `ModuleNotFoundError: No module named 'skimage'`**
A: `pip install scikit-image`

**Q: Ошибка `ModuleNotFoundError: No module named 'cv2'`**
A: `pip install opencv-python`

**Q: Гистограмма не строится**
A: Нужен matplotlib (`pip install matplotlib`) и хотя бы одно сгенерированное изображение.

**Q: Что такое «Сгенерировать основу»?**
A: Кнопка-заглушка для будущей функции ветки `generator_3d`, которая будет создавать медленную 3D-структуру до раскраски. В текущей ветке `main` она запускает обычную генерацию и логирует пояснение.

**Q: Как добавить свои параметры?**
A: Добавьте числовой ключ в `setting.json` или в `EPFL.json` и откройте файл через кнопку «Открыть» в тулбаре. Строковые ключи (`"comment1": "..."`) игнорируются автоматически.

**Q: Изображение не обновляется после «Перерисовать»**
A: Это может быть кэш Qt. Попробуйте нажать ещё раз — URL изображения содержит счётчик, который принудительно сбрасывает кэш при каждой генерации.

**Q: Можно ли запустить на Linux / macOS?**
A: Да, PySide6 кроссплатформенен. Убедитесь, что установлен `python3-pyside6` или эквивалент для вашей системы.
Loading