def load_extractor(self): """ Set on the fly extraction """ logger.warning("No Alignments file found. Extracting on the fly.") logger.warning("NB: This will use the inferior dlib-hog for extraction " "and dlib pose predictor for landmarks. It is recommended " "to perfom Extract first for superior results") for task in ("load", "detect", "align"): queue_manager.add_queue(task, maxsize=0) detector = PluginLoader.get_detector("dlib_hog")(loglevel=self.args.loglevel) aligner = PluginLoader.get_aligner("dlib")(loglevel=self.args.loglevel) d_kwargs = {"in_queue": queue_manager.get_queue("load"), "out_queue": queue_manager.get_queue("detect")} a_kwargs = {"in_queue": queue_manager.get_queue("detect"), "out_queue": queue_manager.get_queue("align")} d_process = SpawnProcess(detector.run, **d_kwargs) d_event = d_process.event d_process.start() a_process = SpawnProcess(aligner.run, **a_kwargs) a_event = a_process.event a_process.start() d_event.wait(10) if not d_event.is_set(): raise ValueError("Error inititalizing Detector") a_event.wait(10) if not a_event.is_set(): raise ValueError("Error inititalizing Aligner") self.extract_faces = True
def _load_detector(detector, rotation, min_size, configfile): """ Set global arguments and load detector plugin """ detector_name = detector.replace("-", "_").lower() logger.debug("Loading Detector: '%s'", detector_name) detector = PluginLoader.get_detector(detector_name)( rotation=rotation, min_size=min_size, configfile=configfile) return detector
def init_extractor(self, loglevel, amd): """ Initialize Aligner """ logger.debug("Initialize Extractor") out_queue = queue_manager.get_queue("out") d_kwargs = { "in_queue": queue_manager.get_queue("in"), "out_queue": queue_manager.get_queue("align") } a_kwargs = { "in_queue": queue_manager.get_queue("align"), "out_queue": out_queue } detector = PluginLoader.get_detector("manual")(loglevel=loglevel) detect_process = SpawnProcess(detector.run, **d_kwargs) d_event = detect_process.event detect_process.start() plugins = ["fan_amd"] if amd else ["fan"] plugins.append("cv2_dnn") for plugin in plugins: aligner = PluginLoader.get_aligner(plugin)(loglevel=loglevel, normalize_method="hist") align_process = SpawnProcess(aligner.run, **a_kwargs) a_event = align_process.event align_process.start() # Wait for Aligner to initialize # The first ever load of the model for FAN has reportedly taken # up to 3-4 minutes, hence high timeout. a_event.wait(300) if not a_event.is_set(): if plugin.startswith("fan"): align_process.join() logger.error("Error initializing FAN. Trying CV2-DNN") continue else: raise ValueError("Error inititalizing Aligner") if plugin == "cv2_dnn": break try: err = None err = out_queue.get(True, 1) except QueueEmpty: pass if not err: break align_process.join() logger.error("Error initializing FAN. Trying CV2-DNN") d_event.wait(10) if not d_event.is_set(): raise ValueError("Error inititalizing Detector") self.extractor["detect"] = detector self.extractor["align"] = aligner logger.debug("Initialized Extractor")
def load_detector(detector, loglevel, rotation, min_size): """ Set global arguments and load detector plugin """ detector_name = detector.replace("-", "_").lower() logger.debug("Loading Detector: '%s'", detector_name) detector = PluginLoader.get_detector(detector_name)(loglevel=loglevel, rotation=rotation, min_size=min_size) return detector
def _load_detect(detector, rotation, min_size, configfile): """ Set global arguments and load detector plugin """ if detector is None or detector.lower() == "none": logger.debug("No detector selected. Returning None") return None detector_name = detector.replace("-", "_").lower() logger.debug("Loading Detector: '%s'", detector_name) detector = PluginLoader.get_detector(detector_name)( rotation=rotation, min_size=min_size, configfile=configfile) return detector
def init_extractor(self, loglevel): """ Initialize FAN """ out_queue = queue_manager.get_queue("out") d_kwargs = { "in_queue": queue_manager.get_queue("in"), "out_queue": queue_manager.get_queue("align") } a_kwargs = { "in_queue": queue_manager.get_queue("align"), "out_queue": out_queue } detector = PluginLoader.get_detector("manual")(loglevel=loglevel) detect_process = SpawnProcess(detector.run, **d_kwargs) d_event = detect_process.event detect_process.start() for plugin in ("fan", "dlib"): aligner = PluginLoader.get_aligner(plugin)(loglevel=loglevel) align_process = SpawnProcess(aligner.run, **a_kwargs) a_event = align_process.event align_process.start() # Wait for Aligner to take init # The first ever load of the model for FAN has reportedly taken # up to 3-4 minutes, hence high timeout. a_event.wait(300) if not a_event.is_set(): if plugin == "fan": align_process.join() logger.error("Error initializing FAN. Trying Dlib") continue else: raise ValueError("Error inititalizing Aligner") if plugin == "dlib": break try: err = None err = out_queue.get(True, 1) except QueueEmpty: pass if not err: break align_process.join() logger.error("Error initializing FAN. Trying Dlib") d_event.wait(10) if not d_event.is_set(): raise ValueError("Error inititalizing Detector") self.extractor["detect"] = detector self.extractor["align"] = aligner
def init_extractor(self, loglevel): """ Initialize FAN """ logger.debug("Initialize Extractor") out_queue = queue_manager.get_queue("out") d_kwargs = {"in_queue": queue_manager.get_queue("in"), "out_queue": queue_manager.get_queue("align")} a_kwargs = {"in_queue": queue_manager.get_queue("align"), "out_queue": out_queue} detector = PluginLoader.get_detector("manual")(loglevel=loglevel) detect_process = SpawnProcess(detector.run, **d_kwargs) d_event = detect_process.event detect_process.start() for plugin in ("fan", "cv2_dnn"): aligner = PluginLoader.get_aligner(plugin)(loglevel=loglevel) align_process = SpawnProcess(aligner.run, **a_kwargs) a_event = align_process.event align_process.start() # Wait for Aligner to initialize # The first ever load of the model for FAN has reportedly taken # up to 3-4 minutes, hence high timeout. a_event.wait(300) if not a_event.is_set(): if plugin == "fan": align_process.join() logger.error("Error initializing FAN. Trying CV2-DNN") continue else: raise ValueError("Error inititalizing Aligner") if plugin == "cv2_dnn": break try: err = None err = out_queue.get(True, 1) except QueueEmpty: pass if not err: break align_process.join() logger.error("Error initializing FAN. Trying CV2-DNN") d_event.wait(10) if not d_event.is_set(): raise ValueError("Error inititalizing Detector") self.extractor["detect"] = detector self.extractor["align"] = aligner logger.debug("Initialized Extractor")
def load_detector(self): """ Set global arguments and load detector plugin """ detector_name = self.args.detector.replace("-", "_").lower() logger.debug("Loading Detector: '%s'", detector_name) # Rotation rotation = None if hasattr(self.args, "rotate_images"): rotation = self.args.rotate_images detector = PluginLoader.get_detector(detector_name)( loglevel=self.args.loglevel, rotation=rotation) return detector
def load_detector(self): """ Set global arguments and load detector plugin """ detector_name = self.args.detector.replace("-", "_").lower() # Rotation rotation = None if hasattr(self.args, "rotate_images"): rotation = self.args.rotate_images detector = PluginLoader.get_detector(detector_name)( verbose=self.args.verbose, rotation=rotation) return detector
def load_detector(self): """ Set global arguments and load detector plugin """ if not self.converter_args: detector_name = self.args.detector.replace("-", "_").lower() else: detector_name = self.converter_args["detector"] logger.debug("Loading Detector: '%s'", detector_name) # Rotation rotation = self.args.rotate_images if hasattr( self.args, "rotate_images") else None # Min acceptable face size: min_size = self.args.min_size if hasattr(self.args, "min_size") else 0 detector = PluginLoader.get_detector(detector_name)( loglevel=self.loglevel, rotation=rotation, min_size=min_size) return detector