Spaces:
Runtime error
Runtime error
File size: 3,898 Bytes
c19ca42 |
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 |
import pytest
import requests
from typing import List
from .template import (
APITestTemplate,
realistic_girl_face_img,
save_base64,
get_dest_dir,
disable_in_cq,
console_log_context,
)
def get_modules() -> List[str]:
return requests.get(APITestTemplate.BASE_URL + "controlnet/module_list").json()[
"module_list"
]
def detect_template(payload, output_name: str, status: int = 200):
url = APITestTemplate.BASE_URL + "controlnet/detect"
resp = requests.post(url, json=payload)
assert resp.status_code == status
if status != 200:
return
resp_json = resp.json()
assert "images" in resp_json
assert len(resp_json["images"]) == len(payload["controlnet_input_images"])
if not APITestTemplate.is_cq_run:
for i, img in enumerate(resp_json["images"]):
if img == "Detect result is not image":
continue
dest = get_dest_dir() / f"{output_name}_{i}.png"
save_base64(img, dest)
return resp_json
# Need to allow detect of CLIP preprocessor result.
# https://github.com/Mikubill/sd-webui-controlnet/pull/2590
# FAILED extensions/sd-webui-controlnet/tests/web_api/detect_test.py::test_detect_all_modules[clip_vision] - PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x000001589ADD1210>
# FAILED extensions/sd-webui-controlnet/tests/web_api/detect_test.py::test_detect_all_modules[revision_clipvision] - PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x000001589AFB00E0>
# FAILED extensions/sd-webui-controlnet/tests/web_api/detect_test.py::test_detect_all_modules[revision_ignore_prompt] - PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x000001589AF3C9A0>
# TODO: file issue on these failures.
# FAILED extensions/sd-webui-controlnet/tests/web_api/detect_test.py::test_detect_all_modules[depth_zoe] - assert 500 == 200
# FAILED extensions/sd-webui-controlnet/tests/web_api/detect_test.py::test_detect_all_modules[inpaint_only+lama] - assert 500 == 200
@disable_in_cq
@pytest.mark.parametrize("module", get_modules())
def test_detect_all_modules(module: str):
payload = dict(
controlnet_input_images=[realistic_girl_face_img],
controlnet_module=module,
)
detect_template(payload, f"detect_{module}")
def test_detect_simple():
detect_template(
dict(
controlnet_input_images=[realistic_girl_face_img],
controlnet_module="canny", # Canny does not require model download.
),
"simple_detect",
)
def test_detect_multiple_inputs():
detect_template(
dict(
controlnet_input_images=[realistic_girl_face_img, realistic_girl_face_img],
controlnet_module="canny", # Canny does not require model download.
),
"multiple_inputs_detect",
)
def test_detect_with_invalid_module():
detect_template({"controlnet_module": "INVALID"}, "invalid module", 422)
def test_detect_with_no_input_images():
detect_template({"controlnet_input_images": []}, "no input images", 422)
def test_detect_default_param():
with console_log_context() as log_context:
detect_template(
dict(
controlnet_input_images=[realistic_girl_face_img],
controlnet_module="canny", # Canny does not require model download.
controlnet_threshold_a=-1,
controlnet_threshold_b=-1,
controlnet_processor_res=-1,
),
"default_param",
)
assert log_context.is_in_console_logs([
"[canny.processor_res] Invalid value(-1), using default value 512.",
"[canny.threshold_a] Invalid value(-1.0), using default value 100.",
"[canny.threshold_b] Invalid value(-1.0), using default value 200.",
])
|