diff --git a/SimpleCV/Features/FaceRecognizer.py b/SimpleCV/Features/FaceRecognizer.py index 6c4606c26..bd896e53f 100644 --- a/SimpleCV/Features/FaceRecognizer.py +++ b/SimpleCV/Features/FaceRecognizer.py @@ -4,7 +4,7 @@ class FaceRecognizer(): - def __init__(self): + def __init__(self, algo="fisher"): """ Create a Face Recognizer Class using Fisher Face Recognizer. Uses OpenCV's FaceRecognizer class. Currently supports Fisher Faces. @@ -19,6 +19,7 @@ def __init__(self): self.labels_set = [] self.int_labels = [] self.labels_dict_rev = {} + self.algo = algo # Not yet supported # self.eigenValues = None # self.eigenVectors = None @@ -26,7 +27,13 @@ def __init__(self): try: import cv2 - self.model = cv2.createFisherFaceRecognizer() + if self.algo == "fisher": + self.model = cv2.createFisherFaceRecognizer() + elif self.algo == "lbph": + self.model = cv2.createLBPHFaceRecognizer() + else: + raise ImportError + except ImportError, AttributeError: self.supported = False warnings.warn("Fisher Recognizer is supported by OpenCV >= 2.4.4") diff --git a/SimpleCV/tests/tests.py b/SimpleCV/tests/tests.py index b90455238..47fcba170 100644 --- a/SimpleCV/tests/tests.py +++ b/SimpleCV/tests/tests.py @@ -3776,7 +3776,7 @@ def test_motionBlur(): else: assert False -def test_faceRecognize(): +def test_fisherfaceRecognize(): try: import cv2 if hasattr(cv2, "createFisherFaceRecognizer"): @@ -3832,6 +3832,62 @@ def test_faceRecognize(): except ImportError: pass +def test_lbphfaceRecognize(): + try: + import cv2 + if hasattr(cv2, "createLBPHFaceRecognizer"): + f = FaceRecognizer(algo="lbph") + images1 = ["../sampleimages/ff1.jpg", + "../sampleimages/ff2.jpg", + "../sampleimages/ff3.jpg", + "../sampleimages/ff4.jpg", + "../sampleimages/ff5.jpg"] + + images2 = ["../sampleimages/fm1.jpg", + "../sampleimages/fm2.jpg", + "../sampleimages/fm3.jpg", + "../sampleimages/fm4.jpg", + "../sampleimages/fm5.jpg"] + + images3 = ["../sampleimages/fi1.jpg", + "../sampleimages/fi2.jpg", + "../sampleimages/fi3.jpg", + "../sampleimages/fi4.jpg"] + + imgset1 = [] + imgset2 = [] + imgset3 = [] + + for img in images1: + imgset1.append(Image(img)) + label1 = ["female"]*len(imgset1) + + for img in images2: + imgset2.append(Image(img)) + label2 = ["male"]*len(imgset2) + + imgset = imgset1 + imgset2 + labels = label1 + label2 + imgset[4] = imgset[4].resize(400,400) + f.train(imgset, labels) + + for img in images3: + imgset3.append(Image(img)) + imgset[2].resize(300, 300) + label = [] + for img in imgset3: + name, confidence = f.predict(img) + label.append(name) + + if label == ["female", "male", "female", "male"]: + pass + else: + assert False + else: + pass + except ImportError: + pass + def test_channelMixer(): i = Image('lenna') r = i.channelMixer()