|
50 | 50 | InstanceSegmentationTiler, |
51 | 51 | SemanticSegmentationTiler, |
52 | 52 | ) |
| 53 | +from model_api.visualizer import Visualizer |
53 | 54 |
|
54 | 55 | # Mapping of model type strings to actual classes for security |
55 | 56 | MODEL_TYPE_MAPPING = { |
@@ -111,6 +112,11 @@ def data(pytestconfig): |
111 | 112 | return pytestconfig.getoption("data") |
112 | 113 |
|
113 | 114 |
|
| 115 | +@pytest.fixture(scope="session") |
| 116 | +def results_dir(pytestconfig): |
| 117 | + return pytestconfig.getoption("results_dir") |
| 118 | + |
| 119 | + |
114 | 120 | @pytest.fixture(scope="session") |
115 | 121 | def device(pytestconfig): |
116 | 122 | return pytestconfig.getoption("device") |
@@ -139,7 +145,7 @@ def pytest_generate_tests(metafunc): |
139 | 145 | metafunc.parametrize("model_data", config_data) |
140 | 146 |
|
141 | 147 |
|
142 | | -def test_image_models(data, device, dump, result, model_data): # noqa: C901 |
| 148 | +def test_image_models(data, device, dump, result, model_data, results_dir): # noqa: C901 |
143 | 149 | name = model_data["name"] |
144 | 150 | if name.endswith((".xml", ".onnx")): |
145 | 151 | name = f"{data}/{name}" |
@@ -235,6 +241,9 @@ def test_image_models(data, device, dump, result, model_data): # noqa: C901 |
235 | 241 | ) |
236 | 242 | else: |
237 | 243 | outputs = model(image) |
| 244 | + |
| 245 | + store_outputs(name, image, device, outputs, results_dir) |
| 246 | + |
238 | 247 | if isinstance(outputs, ClassificationResult) or type(outputs) is DetectionResult: |
239 | 248 | assert len(test_data["reference"]) == 1 |
240 | 249 | output_str = str(outputs) |
@@ -295,3 +304,23 @@ def test_image_models(data, device, dump, result, model_data): # noqa: C901 |
295 | 304 |
|
296 | 305 | if dump: |
297 | 306 | result[-1]["test_data"] = inference_results |
| 307 | + |
| 308 | + |
| 309 | +def store_outputs(name, image, device, result, results_dir: str) -> None: |
| 310 | + if not results_dir: |
| 311 | + return |
| 312 | + |
| 313 | + Path(results_dir).mkdir(exist_ok=True, parents=True) |
| 314 | + |
| 315 | + iteration = 1 |
| 316 | + while True: |
| 317 | + path = Path(results_dir) / f"{Path(name).stem}_{iteration}_{device}.png" |
| 318 | + if not path.exists(): |
| 319 | + break |
| 320 | + iteration += 1 |
| 321 | + |
| 322 | + visualizer = Visualizer() |
| 323 | + try: |
| 324 | + visualizer.save(image, result, path) |
| 325 | + except (TypeError, ValueError) as e: |
| 326 | + print(f"Cannot save the output visualization for {name}. Error: {e}") |
0 commit comments