def __init__(self, image_paths, loaded_images, aligner, verbose=1, eval_local=False): self.image_paths = image_paths self.verbose = verbose self.aligner = aligner self.org_faces = [] self.cropped_faces = [] self.cropped_faces_shape = [] self.cropped_index = [] self.callback_idx = [] for i in range(0, len(loaded_images)): cur_img = loaded_images[i] p = image_paths[i] self.org_faces.append(cur_img) if eval_local: margin = 0 else: margin = 0.7 align_img = align(cur_img, self.aligner, margin=margin) if align_img is None: print("Find 0 face(s)".format(p.split("/")[-1])) continue cur_faces = align_img[0] cur_shapes = [f.shape[:-1] for f in cur_faces] cur_faces_square = [] if verbose: print("Find {} face(s) in {}".format(len(cur_faces), p.split("/")[-1])) if eval_local: cur_faces = cur_faces[:1] for img in cur_faces: if eval_local: base = resize(img, (224, 224)) else: long_size = max([img.shape[1], img.shape[0]]) base = np.zeros((long_size, long_size, 3)) base[0:img.shape[0], 0:img.shape[1], :] = img cur_faces_square.append(base) cur_index = align_img[1] cur_faces_square = [resize(f, (224, 224)) for f in cur_faces_square] self.cropped_faces_shape.extend(cur_shapes) self.cropped_faces.extend(cur_faces_square) self.cropped_index.extend(cur_index) self.callback_idx.extend([i] * len(cur_faces_square)) if len(self.cropped_faces) == 0: return self.cropped_faces = np.array(self.cropped_faces) self.cropped_faces = preprocess(self.cropped_faces, 'imagenet') self.cloaked_cropped_faces = None self.cloaked_faces = np.copy(self.org_faces)
def __init__(self, image_paths, loaded_images, aligner, verbose=1, eval_local=False, preprocessing=True, no_align=False): self.image_paths = image_paths self.verbose = verbose self.no_align = no_align self.aligner = aligner self.org_faces = [] self.cropped_faces = [] self.cropped_faces_shape = [] self.cropped_index = [] self.start_end_ls = [] self.callback_idx = [] self.images_without_face = [] for i in range(0, len(loaded_images)): cur_img = loaded_images[i] p = image_paths[i] self.org_faces.append(cur_img) if not no_align: align_img = align(cur_img, self.aligner) if align_img is None: print("Find 0 face(s) in {}".format(p.split("/")[-1])) self.images_without_face.append(i) continue cur_faces = align_img[0] else: cur_faces = [cur_img] cur_faces = [face for face in cur_faces if face.shape[0] != 0 and face.shape[1] != 0] cur_shapes = [f.shape[:-1] for f in cur_faces] cur_faces_square = [] if verbose and not no_align: print("Find {} face(s) in {}".format(len(cur_faces), p.split("/")[-1])) if eval_local: cur_faces = cur_faces[:1] for img in cur_faces: if eval_local: base = resize(img, (IMG_SIZE, IMG_SIZE)) else: long_size = max([img.shape[1], img.shape[0]]) base = np.ones((long_size, long_size, 3)) * np.mean(img, axis=(0, 1)) start1, end1 = get_ends(long_size, img.shape[0]) start2, end2 = get_ends(long_size, img.shape[1]) base[start1:end1, start2:end2, :] = img cur_start_end = (start1, end1, start2, end2) self.start_end_ls.append(cur_start_end) cur_faces_square.append(base) cur_faces_square = [resize(f, (IMG_SIZE, IMG_SIZE)) for f in cur_faces_square] self.cropped_faces.extend(cur_faces_square) if not self.no_align: cur_index = align_img[1] self.cropped_faces_shape.extend(cur_shapes) self.cropped_index.extend(cur_index[:len(cur_faces_square)]) self.callback_idx.extend([i] * len(cur_faces_square)) if len(self.cropped_faces) == 0: return self.cropped_faces = np.array(self.cropped_faces) if preprocessing: self.cropped_faces = preprocess(self.cropped_faces, PREPROCESS) self.cloaked_cropped_faces = None self.cloaked_faces = np.copy(self.org_faces)
def __init__(self, image_paths, aligner, verbose=1, eval_local=False): model_dir = os.path.join(os.path.expanduser('~'), '.fawkes') if not os.path.exists(os.path.join(model_dir, "mtcnn.p.gz")): os.makedirs(model_dir, exist_ok=True) get_file("mtcnn.p.gz", "http://sandlab.cs.uchicago.edu/fawkes/files/mtcnn.p.gz", cache_dir=model_dir, cache_subdir='') self.verbose = verbose self.aligner = aligner self.org_faces = [] self.cropped_faces = [] self.cropped_faces_shape = [] self.cropped_index = [] self.callback_idx = [] if verbose: print("Identify {} images".format(len(image_paths))) for i, p in enumerate(image_paths): cur_img = load_image(p) if cur_img is None: continue self.org_faces.append(cur_img) if eval_local: margin = 0 else: margin = 0.7 align_img = align(cur_img, self.aligner, margin=margin) if align_img is None: print("Find 0 face(s) in {}".format(p.split("/")[-1])) continue cur_faces = align_img[0] cur_shapes = [f.shape[:-1] for f in cur_faces] cur_faces_square = [] if verbose: print("Find {} face(s) in {}".format(len(cur_faces), p.split("/")[-1])) for img in cur_faces: if eval_local: base = resize(img, (224, 224)) else: long_size = max([img.shape[1], img.shape[0]]) base = np.zeros((long_size, long_size, 3)) base[0:img.shape[0], 0:img.shape[1], :] = img cur_faces_square.append(base) cur_index = align_img[1] cur_faces_square = [ resize(f, (224, 224)) for f in cur_faces_square ] self.cropped_faces_shape.extend(cur_shapes) self.cropped_faces.extend(cur_faces_square) self.cropped_index.extend(cur_index) self.callback_idx.extend([i] * len(cur_faces_square)) if not self.cropped_faces: print("No faces detected") exit(1) self.cropped_faces = np.array(self.cropped_faces) self.cropped_faces = preprocess(self.cropped_faces, 'imagenet') self.cloaked_cropped_faces = None self.cloaked_faces = np.copy(self.org_faces)