Skip to content

Commit bc04514

Browse files
authored
Option to save test results as images (#413)
1 parent 08b70d7 commit bc04514

2 files changed

Lines changed: 36 additions & 1 deletion

File tree

tests/accuracy/conftest.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ def pytest_addoption(parser):
2828
default=False,
2929
help="whether to dump results into json file",
3030
)
31+
parser.addoption(
32+
"--results-dir",
33+
action="store",
34+
default="",
35+
help="directory to store inference result",
36+
)
3137

3238

3339
def pytest_configure(config):

tests/accuracy/test_accuracy.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
InstanceSegmentationTiler,
5151
SemanticSegmentationTiler,
5252
)
53+
from model_api.visualizer import Visualizer
5354

5455
# Mapping of model type strings to actual classes for security
5556
MODEL_TYPE_MAPPING = {
@@ -111,6 +112,11 @@ def data(pytestconfig):
111112
return pytestconfig.getoption("data")
112113

113114

115+
@pytest.fixture(scope="session")
116+
def results_dir(pytestconfig):
117+
return pytestconfig.getoption("results_dir")
118+
119+
114120
@pytest.fixture(scope="session")
115121
def device(pytestconfig):
116122
return pytestconfig.getoption("device")
@@ -139,7 +145,7 @@ def pytest_generate_tests(metafunc):
139145
metafunc.parametrize("model_data", config_data)
140146

141147

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
143149
name = model_data["name"]
144150
if name.endswith((".xml", ".onnx")):
145151
name = f"{data}/{name}"
@@ -235,6 +241,9 @@ def test_image_models(data, device, dump, result, model_data): # noqa: C901
235241
)
236242
else:
237243
outputs = model(image)
244+
245+
store_outputs(name, image, device, outputs, results_dir)
246+
238247
if isinstance(outputs, ClassificationResult) or type(outputs) is DetectionResult:
239248
assert len(test_data["reference"]) == 1
240249
output_str = str(outputs)
@@ -295,3 +304,23 @@ def test_image_models(data, device, dump, result, model_data): # noqa: C901
295304

296305
if dump:
297306
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

Comments
 (0)