[docs]@classmethoddefbuild_cmdline_parser(cls,**kwargs):parser=super().build_cmdline_parser(**kwargs)parser.add_argument("--tasks",type=cls._split_tasks_string,help="MVTec task filter, comma-separated list of {%s} ""(default: all)"%", ".join(t.namefortinMvtecTask),)returnparser
def__init__(self,extractor,save_dir,tasks=None,**kwargs,):super().__init__(extractor,save_dir,**kwargs)asserttasksisNoneorisinstance(tasks,(MvtecTask,list,set))iftasksisNone:tasks=set(MvtecTask)elifisinstance(tasks,MvtecTask):tasks={tasks}else:tasks=set(parse_str_enum_value(t,MvtecTask)fortintasks)self._tasks=tasksdef_apply_impl(self):ifself._extractor.media_type()andnotissubclass(self._extractor.media_type(),Image):raiseMediaTypeError("Media type is not an image")os.makedirs(self._save_dir,exist_ok=True)forsubset_name,subsetinself._extractor.subsets().items():ifMvtecTask.segmentationinself._tasksorMvtecTask.detectioninself._tasks:os.makedirs(osp.join(self._save_dir,MvtecPath.MASK_DIR),exist_ok=True)foriteminsubset:labels=[]foranninitem.annotations:ifann.typein[AnnotationType.label,AnnotationType.mask,AnnotationType.bbox]:labels.append(self.get_label(ann.label))ifself._save_media:self._save_image(item,subdir=subset_name)bboxes=[aforainitem.annotationsifa.type==AnnotationType.bbox]ifbboxesandMvtecTask.detectioninself._tasks:mask_path=osp.join(MvtecPath.MASK_DIR,item.id+MvtecPath.MASK_POSTFIX+MvtecPath.MASK_EXT)mask=np.zeros((*item.media.size,),dtype=np.uint8)forbboxinbboxes:x,y,h,w=bbox.get_bbox()mask=cv2.rectangle(mask,np.array((x,y),dtype=np.int32),np.array((x+w,y+h),dtype=np.int32),(1),-1,)ifnotosp.exists(osp.join(self._save_dir,osp.dirname(mask_path))):os.mkdir(osp.join(self._save_dir,osp.dirname(mask_path)))cv2.imwrite(osp.join(self._save_dir,mask_path),mask*255)masks=[aforainitem.annotationsifa.type==AnnotationType.mask]ifmasksandMvtecTask.segmentationinself._tasks:mask_path=osp.join(MvtecPath.MASK_DIR,item.id+MvtecPath.MASK_POSTFIX+MvtecPath.MASK_EXT)ifnotosp.exists(osp.join(self._save_dir,osp.dirname(mask_path))):os.mkdir(osp.join(self._save_dir,osp.dirname(mask_path)))cv2.imwrite(osp.join(self._save_dir,mask_path),masks[0].image.astype(np.uint8)*255)