def __init__(self, base_work_dir, descriptor): """ Initialize IQR session :param base_work_dir: Base directory to put working files into :type base_work_dir: str :param descriptor: FeatureDescriptor to use for this IQR session :type descriptor: masir.search.FeatureDescriptor.FeatureDescriptor """ self._session_lock = multiprocessing.RLock() self.uuid = uuid.uuid1() self.positive_ids = set() self.negative_ids = set() self.work_dir = osp.join(osp.abspath(osp.expanduser(base_work_dir)), 'iqr', 'session-%s' % str(self.uuid)) if not osp.isdir(self.work_dir): os.makedirs(self.work_dir) #: :type: dict of (str, FeatureDescriptor) self.descriptor = descriptor # noinspection PyTypeChecker self.feature_memory = FeatureMemory.construct_from_files( descriptor.ids_file, descriptor.bg_flags_file, descriptor.feature_data_file, descriptor.kernel_data_file ) # noinspection PyProtectedMember self._original_fm_bgid_set = self.feature_memory._bg_clip_ids # Mapping of a clip ID to the probability of it being associated to # positive adjudications. This is None before any refinement occurs. #: :type: None or dict of (int, float) self.results = None self.svm_train_params = '-q -t 4 -b 1 -w1 50 -c 100' # Ingest where extension images are placed extension_ingest_dir = osp.join(self.work_dir, "extension_ingest") self.extension_ingest = IngestManager( extension_ingest_dir, self.feature_memory.get_ids().max() + 1 )
def reset(self): """ Reset the IQR Search state No positive adjudications, reload original feature data """ with self._session_lock: self.positive_ids.clear() self.negative_ids.clear() # noinspection PyUnresolvedReferences self.feature_memory = FeatureMemory.construct_from_files( self.descriptor.ids_file, self.descriptor.bg_flags_file, self.descriptor.feature_data_file, self.descriptor.kernel_data_file ) self.results = None # clear contents of working directory shutil.rmtree(self.work_dir) os.makedirs(self.work_dir)