class PredictableModelWrapper(object): def __init__(self, model): self.model = model self.numeric_dataset = NumericDataSet() def compute(self): X,y = self.numeric_dataset.get() self.model.compute(X,y) def set_data(self, numeric_dataset): self.numeric_dataset = numeric_dataset def predict(self, image): prediction_result = self.model.predict(image) # Only take label right now: num_label = prediction_result[0] str_label = self.numeric_dataset.resolve_by_num(num_label) return str_label def update(self, name, image): self.numeric_dataset.add(name, image) class_label = self.numeric_dataset.resolve_by_str(name) extracted_feature = self.feature.extract(image) self.classifier.update(extracted_feature, class_label) def __repr__(self): return "PredictableModelWrapper (Inner Model=%s)" % (str(self.model))
def read_from_file(image_paths, identifier): numeric_dataset = NumericDataSet() if not isinstance(image_paths, list): image_paths = [image_paths] for path in image_paths: read_image(path, identifier, numeric_dataset) return numeric_dataset
def read_from_csv(filename): numeric_dataset = NumericDataSet() with open(filename, 'rb') as csvfile: reader = csv.reader(csvfile, delimiter=';', quotechar='#') for row in reader: identifier = row[0] path = row[1] read_images(path, identifier, numeric_dataset) return numeric_dataset
def read_from_folder(folder_path): numeric_dataset = NumericDataSet() if os.path.isdir(folder_path): for subdir, dirs, files in os.walk(folder_path): for file in files: file_path = os.path.abspath("%s/%s"% (subdir, file)) sub_dir_parts = os.path.abspath(subdir).split("\\") identifier = subdir if sub_dir_parts: identifier = sub_dir_parts[-1] read_image(file_path, identifier, numeric_dataset) return numeric_dataset
def __init__(self, model): self.model = model self.numeric_dataset = NumericDataSet()
import numpy as np # import matplotlib colormaps import matplotlib.cm as cm # import for logging import logging, sys # set up a handler for logging handler = logging.StreamHandler(sys.stdout) formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # add handler to facerec modules logger = logging.getLogger("facerec") logger.addHandler(handler) logger.setLevel(logging.DEBUG) # load a dataset (e.g. AT&T Facedatabase) dataSet = NumericDataSet("/home/philipp/facerec/data/yalefaces_recognition") # define Fisherfaces as feature extraction method feature = Fisherfaces() # define a 1-NN classifier with Euclidean Distance classifier = NearestNeighbor(dist_metric=EuclideanDistance(), k=1) # define the model as the combination model = PredictableModel(feature=feature, classifier=classifier) # show fisherfaces model.compute(dataSet.data, dataSet.labels) # turn the first (at most) 16 eigenvectors into grayscale # images (note: eigenvectors are stored by column!) E = [] for i in xrange(min(model.feature.eigenvectors.shape[1], 16)): e = model.feature.eigenvectors[:, i].reshape(dataSet.data[0].shape) E.append(minmax_normalize(e, 0, 255, dtype=np.uint8)) # plot them and store the plot to "python_fisherfaces_fisherfaces.pdf"