def test_detect_face_and_smile_on_picture(self):
     "Test the detection of a smile in a face on a static picture"
     image = cv2.imread(ASSETS_FOLDER + self.TRUMP_PHOTO_SMILE, 0)
     face_cascade_object = cv2.CascadeClassifier(self.CASCADE_FOLDER +
                                                 self.FACE_CASCADE_MODEL)
     smile_cascade_object = cv2.CascadeClassifier(self.CASCADE_FOLDER +
                                                  self.SMILE_CASCADE_MODEL)
     faces = []
     smiles = []
     for i in face_recognition.find_cascade(face_cascade_object,
                                            image,
                                            draw=True,
                                            draw_frame=image):
         faces.append(i)
         ROI = image[i[1]:i[1] + i[3], i[0]:i[0] + i[2]]
         ROI = ROI[len(ROI) // 2:]
         for j in face_recognition.find_cascade(smile_cascade_object,
                                                ROI,
                                                draw=True,
                                                draw_frame=image,
                                                start_x=i[0],
                                                start_y=i[1] + len(ROI)):
             smiles.append(j)
     self.assertGreaterEqual(
         len(faces), 1,
         "ERROR(test_detect_face_and_smile_on_picture): No faces found")
     self.assertGreaterEqual(
         len(smiles), 1,
         "ERROR(test_detect_face_and_smile_on_picture): No smiles found")
    def test_process_images_both(self):  # average = 0.06 seconds
        """process face recognition and the contours of 100 images, and calculate the average processing time"""
        path_to_image_contour = "flower_contour_crop.jpg"
        path_to_image_cascade = "face_trump.jpg"
        # preparation
        SETTINGS = (19, 35, 225, 255, 82, 255)
        cascade_object = cv2.CascadeClassifier(
            CASCADE_FOLDER + FACE_CASCADE_MODEL)
        faces = []

        start = time.time()
        for _ in range(AMOUNT):
            image = cv2.imread(ASSETS_FOLDER + path_to_image_contour)
            contours = face_recognition.find_contour(
                image, 2, pos=True, settings=SETTINGS, return_all_contours=True)
            filtered_contour_list = face_recognition.filter_contour(contours)
            image = cv2.imread(ASSETS_FOLDER + path_to_image_cascade, 0)
            for i in face_recognition.find_cascade(cascade_object, image, draw=True, draw_frame=image):
                faces.append(i)
        end = time.time()

        average_time = PerformanceTest.calculate_average_time(
            start, end, AMOUNT)
        self.assertLessEqual(
            average_time, THRESHOLD, "The average time was %f seconds, but needed to be at least %f seconds" % (average_time, THRESHOLD))
 def test_detect_smile_on_picture(self):
     "Test the detection of a smile on a static picture"
     image = cv2.imread(ASSETS_FOLDER + self.TRUMP_PHOTO_SMILE, 0)
     cascade_object = cv2.CascadeClassifier(self.CASCADE_FOLDER +
                                            self.SMILE_CASCADE_MODEL)
     smiles = []
     for i in face_recognition.find_cascade(cascade_object,
                                            image,
                                            draw=True,
                                            draw_frame=image):
         smiles.append(i)
     self.assertGreaterEqual(
         len(smiles), 1,
         "ERROR(test_detect_smile_on_picture): No Smiles found")
 def test_detect_face_on_picture_false_postives(self):
     "Test the detection of a face on a static picture on false postives"
     image = cv2.imread(ASSETS_FOLDER + self.TRUMP_PHOTO, 0)
     cascade_object = cv2.CascadeClassifier(self.CASCADE_FOLDER +
                                            self.FACE_CASCADE_MODEL)
     faces = []
     for i in face_recognition.find_cascade(cascade_object,
                                            image,
                                            draw=True,
                                            draw_frame=image):
         faces.append(i)
     self.assertGreaterEqual(
         len(faces), 1,
         "ERROR(test_detect_face_on_picture_false_postives): No faces found"
     )
     self.assertEqual(
         len(faces), 1,
         "ERROR(test_detect_face_on_picture_false_postives): To many faces detected"
     )
    def test_process_images_cascade(self):  # average = 0.05 seconds
        """execute face recognition on a 100 images, and calculate the average processing time"""
        path_to_image = "face_trump.jpg"
        # preparation
        cascade_object = cv2.CascadeClassifier(
            CASCADE_FOLDER + FACE_CASCADE_MODEL)
        faces = []

        start = time.time()
        for _ in range(AMOUNT):
            image = cv2.imread(ASSETS_FOLDER + path_to_image, 0)
            for i in face_recognition.find_cascade(cascade_object, image, draw=True, draw_frame=image):
                faces.append(i)
        end = time.time()

        average_time = PerformanceTest.calculate_average_time(
            start, end, AMOUNT)
        self.assertLessEqual(
            average_time, THRESHOLD, "The average time was %f seconds, but needed to be at least %f seconds" % (average_time, THRESHOLD))