|
import sys |
|
from pathlib import Path |
|
from textwrap import dedent |
|
|
|
from packaging import version |
|
|
|
import launch |
|
from launch import is_installed, run, run_pip |
|
|
|
try: |
|
skip_install = launch.args.skip_install |
|
except Exception: |
|
skip_install = False |
|
|
|
python = sys.executable |
|
|
|
def check_ddetailer() -> bool: |
|
try: |
|
from modules.paths import extensions_dir |
|
|
|
extensions_path = Path(extensions_dir) |
|
except ImportError: |
|
from modules.paths import data_path |
|
|
|
extensions_path = Path(data_path, "extensions") |
|
|
|
ddetailer_exists = any(p.is_dir() and p.name.startswith("ddetailer") for p in extensions_path.iterdir()) |
|
return not ddetailer_exists |
|
|
|
|
|
def check_install() -> bool: |
|
try: |
|
import mmcv |
|
import mmdet |
|
from mmdet.evaluation import get_classes |
|
except Exception: |
|
return False |
|
|
|
if not hasattr(mmcv, "__version__") or not hasattr(mmdet, "__version__"): |
|
return False |
|
|
|
v1 = version.parse(mmcv.__version__) >= version.parse("2.0.0") |
|
v2 = version.parse(mmdet.__version__) >= version.parse("3.0.0") |
|
return v1 and v2 |
|
|
|
|
|
def install(): |
|
if not is_installed("pycocotools"): |
|
run(f"{python} -m pip install pycocotools", live=True) |
|
|
|
if not is_installed("mim"): |
|
run_pip("install openmim", desc="openmim") |
|
|
|
if not check_install(): |
|
print("Uninstalling mmcv mmdet... (if installed)") |
|
run(f'"{python}" -m pip uninstall -y mmcv mmcv-full mmdet mmengine', live=True) |
|
print("Installing mmcv mmdet...") |
|
run(f'"{python}" -m mim install -U mmcv>=2.0.0 mmdet>=3.0.0', live=True) |
|
|
|
|
|
if not check_ddetailer(): |
|
message = """ |
|
[-] dddetailer: Please remove the following: |
|
1. the original ddetailer extension - "stable-diffusion-webui/extensions/ddetailer" folder. |
|
2. original model files - "stable-diffusion-webui/models/mmdet" folder. |
|
""" |
|
message = dedent(message) |
|
raise RuntimeError(message) |
|
|
|
if not skip_install: |
|
install() |
|
|