def load(self, path): """ Load classifier from pickle file :param path: path """ clf = EuclideanClassifier() clf.load(path) self.clf = clf
def fit(self, folder): """ Fit classifier from directory. Directory must have this structure: Person 1: file.jpg .... file.jpg Person 2: file.jpg ... file.jpg ... :param folder: root folder path """ # Initialize classifier clf = EuclideanClassifier() # Load all files files = [] for ext in config.ALLOWED_IMAGE_TYPES: files.extend( glob.glob(os.path.join(folder, "*", ext), recursive=True)) for path in tqdm.tqdm(files): # Load image image = cv2.imread(path) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # Get person name by folder person = os.path.split(os.path.split(path)[0])[1] # Get encoding for encoding, face, box in self.face_encoding(image): # Add to classifier clf.fit([encoding], [person]) self.clf = clf
def fit_from_dataframe(self, df, person_col="person", path_col="path"): """ Fit classifier from dataframe. :param df: Pandas dataframe :param person_col: Dataframe column with person id :param path_col: Dataframe column with image path """ # Initialize classifier clf = EuclideanClassifier() for index, row in tqdm.tqdm(df.iterrows(), total=df.shape[0]): # Load image image = cv2.imread(row[path_col]) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # Get person name by folder person = row[person_col] # Get encoding for encoding, face, box in self.face_encoding(image): # Add to classifier clf.fit([encoding], [person]) self.clf = clf