import cv2 import os import numpy as np def specify_resolution(image_list, score_list, mask_list, resolution: tuple=(400,400)): resize_image = [] resize_score = [] resize_mask = [] # print(resolution) for image, score, mask in zip(image_list, score_list, mask_list): image = cv2.resize(image, (resolution[0], resolution[1]), interpolation=cv2.INTER_CUBIC) score = cv2.resize(score, (resolution[0], resolution[1]), interpolation=cv2.INTER_CUBIC) mask = cv2.resize(mask, (resolution[0], resolution[1]), interpolation=cv2.INTER_NEAREST) resize_image += [image] resize_score += [score] resize_mask += [mask] return resize_image, resize_score, resize_mask def normalize(scores): max_value = np.max(scores) min_value = np.min(scores) norml_scores = (scores - min_value) / (max_value - min_value) return norml_scores def save_single_result(classification_score, segmentation_score, root_dir, shot_name, experiment_indx, subset_name, defect_type, name, use_defect_type): if use_defect_type: # mvtec2d mvtec3d save_dir = os.path.join(root_dir, shot_name, experiment_indx, subset_name, defect_type) else: # visa save_dir = os.path.join(root_dir, shot_name, experiment_indx, subset_name) os.makedirs(save_dir, exist_ok=True) classification_dir = os.path.join(save_dir, 'classification') segmentation_dir = os.path.join(save_dir, 'segmentation') os.makedirs(classification_dir, exist_ok=True) os.makedirs(segmentation_dir, exist_ok=True) classification_path = os.path.join(classification_dir, f'{name}.txt') segmentation_path = os.path.join(segmentation_dir, f'{name}.npz') with open(classification_path, "w") as f: f.write(f'{classification_score:.5f}') segmentation_score = np.round(segmentation_score * 255).astype(np.uint8) np.savez_compressed(segmentation_path, img=segmentation_score) def save_results(classification_score_list, segmentation_score_list, root_dir, shot_name, experiment_indx, name_list, use_defect_type): for classification_score, segmentation_score, full_name in zip(classification_score_list, segmentation_score_list, name_list): subset_name, defect_type, name = full_name.split('-') save_single_result(classification_score, segmentation_score, root_dir, shot_name, experiment_indx, subset_name, defect_type, name, use_defect_type)