Introduce diffusion-inpaint restoration engine in HVideoTool: added support for a new restoration method that regenerates masked regions via an external SwarmUI server, requiring YOLO detections for mask creation. Updated configuration management to include diffusion parameters, enhanced the UI for engine selection, and improved documentation in README and CLAUDE.md to guide users on the new functionality.
This commit is contained in:
@@ -104,9 +104,10 @@
|
||||
отдельно от `frames/`, чтобы результаты не попадали обратно в список кадров). Прогресс,
|
||||
отмена (**«■ Стоп»**) и предпросмотр текущего кадра работают как при детекции.
|
||||
|
||||
Расцензуривание — только через **DeepMosaics** (код **встроен** в приложение, vendored,
|
||||
GPL-3.0; ставить отдельно не нужно — требуются только **веса** и желательно **GPU
|
||||
NVIDIA/CUDA**). Два движка:
|
||||
Доступны два **семейства** движков: **DeepMosaics** (восстанавливает мозаику) и
|
||||
**diffusion-inpaint (SwarmUI)** (перерисовывает область заново). DeepMosaics — по
|
||||
умолчанию; код **встроен** (vendored, GPL-3.0; ставить отдельно не нужно — нужны только
|
||||
**веса** и желательно **GPU NVIDIA/CUDA**). Три движка в списке:
|
||||
|
||||
- **DeepMosaics — картинка** — реальное генеративное удаление мозаики **покадрово**.
|
||||
- **DeepMosaics — видео (BVDNet)** — **временно́й** движок: использует **соседние кадры**
|
||||
@@ -114,8 +115,12 @@ NVIDIA/CUDA**). Два движка:
|
||||
роликах. Из-за рекуррентности обрабатывает **непрерывный диапазон по порядку** — т.е.
|
||||
запускайте его через **«Расцензурить все»** (одиночный «Расцензурить кадр» сведётся к
|
||||
окну из одного кадра). Нужна **видеомодель** `clean_youknow_video.pth`.
|
||||
- **Diffusion-inpaint (SwarmUI)** — **перерисовывает** область цензуры заново диффузионной
|
||||
inpaint-моделью по **маске из YOLO-детекций** и промпту (не восстанавливает оригинал!).
|
||||
Лучше всего для **чёрных плашек / сплошной заливки**, где DeepMosaics бессилен. Покадрово
|
||||
→ на роликах будет **мерцание**. См. «Настройка SwarmUI» ниже.
|
||||
|
||||
На аниме качество ограничено (модели обучены на реальном видео).
|
||||
На аниме качество DeepMosaics ограничено (модели обучены на реальном видео).
|
||||
|
||||
### Настройка DeepMosaics
|
||||
|
||||
@@ -144,6 +149,34 @@ Baidu код `1x0a`):
|
||||
> `numpy 2.x` (проверено). [LADA](https://github.com/ladaapp/lada) (видеомодель,
|
||||
> лучшее качество на реальном видео) пока не подключён.
|
||||
|
||||
### Настройка Diffusion-inpaint (SwarmUI)
|
||||
|
||||
Этот движок перерисовывает область **по маске из детекций YOLO**, поэтому **сначала
|
||||
посчитайте детекцию** («Детектировать все» или «Рассчитать кадр»), а затем запускайте
|
||||
расцензуривание — кадры без детекций остаются без изменений. Диффузионная модель крутится
|
||||
в **отдельном сервере SwarmUI**, приложение лишь шлёт ему по HTTP картинку + маску + промпт
|
||||
(никаких `torch`/`diffusers` в самом приложении на этом пути).
|
||||
|
||||
1. Установите и запустите [SwarmUI](https://github.com/mcmonkeyprojects/SwarmUI), загрузите
|
||||
в нём inpaint-чекпойнт (SD/SDXL). По умолчанию сервер слушает `http://localhost:7801`.
|
||||
2. В приложении: **Файл → Движок восстановления…** → выберите **Diffusion-inpaint
|
||||
(SwarmUI)** и задайте:
|
||||
- **SwarmUI URL** (по умолчанию `http://localhost:7801`);
|
||||
- **Чекпойнт** — имя модели как её знает SwarmUI (пусто = текущая в сервере);
|
||||
- **Промпт / Negative** — что нарисовать в области под цензурой / чего избегать;
|
||||
- **Шаги / CFG / Denoise / Seed** — параметры генерации (`Denoise` 0..1, 1 = полностью
|
||||
перерисовать; `Seed` `-1` = случайный);
|
||||
- **Маска: расширить / размытие** (px) — расширение и мягкость края маски.
|
||||
- Кнопка **«Проверить соединение»** дёргает SwarmUI и сразу показывает ✓ (сервер
|
||||
отвечает) или ✗ с текстом ошибки — удобно убедиться в адресе до расцензуривания.
|
||||
3. Запустите **«Расцензурить кадр»** или **«Расцензурить все»** — движок прогонит только
|
||||
кадры с детекциями.
|
||||
|
||||
> Diffusion **выдумывает** правдоподобное содержимое, а не восстанавливает оригинал. Это
|
||||
> сознательно второй движок (не замена DeepMosaics) под случаи, где под цензурой не
|
||||
> осталось данных (чёрные плашки). Бэкенд абстрактный — позже можно добавить ComfyUI/A1111
|
||||
> как ещё одну реализацию `DiffusionBackend`.
|
||||
|
||||
## Что НЕ делает (осознанно вне области задачи)
|
||||
|
||||
- Не **генерирует** изображения через диффузию (никакого ControlNet/SDXL).
|
||||
@@ -270,11 +303,14 @@ hvideotool/
|
||||
│ ├── types.py # Detection (+ label/категория, .display), CensorType
|
||||
│ ├── cache.py # кэш детекций (ключ = набор моделей + conf/imgsz)
|
||||
│ └── yolo.py # YOLO-детектор (Ultralytics, маски→полигоны, ярлык категории)
|
||||
└── restore/ # только DeepMosaics
|
||||
├── base.py # Restorer (ABC): restore() + restore_sequence() + .temporal
|
||||
├── factory.py # build_restorer -> deepmosaics | deepmosaics_video
|
||||
└── restore/ # DeepMosaics (восстановление) или diffusion-inpaint (перерисовка)
|
||||
├── base.py # Restorer (ABC): restore() + restore_sequence() + .temporal/.needs_detections
|
||||
├── factory.py # build_restorer -> deepmosaics | deepmosaics_video | diffusion
|
||||
├── deepmosaics.py # движки «картинка» (покадрово) и «видео» (BVDNet)
|
||||
└── _deepmosaics/ # встроенный код DeepMosaics (GPL-3.0)
|
||||
├── _deepmosaics/ # встроенный код DeepMosaics (GPL-3.0)
|
||||
├── mask.py # маска из детекций (для diffusion inpaint)
|
||||
├── diffusion.py # DiffusionRestorer + DiffusionBackend (ABC) + InpaintParams
|
||||
└── swarmui.py # бэкенд SwarmUI (HTTP, stdlib urllib — без torch)
|
||||
```
|
||||
|
||||
Детекция синхронная (по клику/по кнопке «Детектировать все»); тяжёлый YOLO на CPU
|
||||
@@ -289,7 +325,7 @@ hvideotool/
|
||||
| GUI | PySide6 (Qt 6) |
|
||||
| Обработка картинок | OpenCV / NumPy |
|
||||
| Детектор | Ultralytics YOLO, мульти-модель (models/yolo/<кат>) |
|
||||
| Расцензуривание | DeepMosaics (встроен) + PyTorch/CUDA |
|
||||
| Расцензуривание | DeepMosaics (встроен) + PyTorch/CUDA, или diffusion-inpaint через SwarmUI (HTTP) |
|
||||
|
||||
## Лицензия
|
||||
|
||||
|
||||
Reference in New Issue
Block a user