def update_family_model(family_id, people):
    # Updating family model
    clear_directory(settings.FACE_RECOG_TRAIN_TEMP_DIR)

    # Getting Face Models for family
    face_model = FaceModel.objects.filter(family_id=family_id).first()

    if not face_model:
        # No face model, create new one
        process_family(family_id)

    else:
        X = pickle.loads(face_model.fit_data_faces)
        y = pickle.loads(face_model.fit_data_person_ids)

        files = []
        for person in people:
            if person.large_thumbnail:
                file = download_file(settings.FACE_RECOG_TRAIN_TEMP_DIR,
                                     person.large_thumbnail)
                files.append(file)

                process_file(file, X, y, person.id)

        if len(files) > 0:
            face_model.update_knn_classifier(X, y)
Ejemplo n.º 2
0
def update_family_model(family_id, people):

    # Getting Face Models for family
    face_model = FaceModel.objects.filter(family_id=family_id).first()

    if face_model is None:
        # No face model, create new one
        process_family(family_id)

    else:
        X = pickle.loads(face_model.fit_data_faces)
        y = pickle.loads(face_model.fit_data_person_ids)

        index_removed = False

        # Removing people from face models
        for person in people:
            person_id = person['person_id']
            while person_id in y:
                index = y.index(person_id)
                y.pop(index)
                X.pop(index)
                index_removed = True

        if index_removed:
            face_model.update_knn_classifier(X, y)
def update_family_model(family_id, tags):

    clear_directory(settings.FACE_RECOG_TRAIN_TEMP_DIR)

    # Getting Face Models for family
    face_model = FaceModel.objects.filter(family_id=family_id).first()

    if not face_model:
        # No face model, create new one
        process_family(family_id)

    else:
        X = pickle.loads(face_model.fit_data_faces)
        y = pickle.loads(face_model.fit_data_person_ids)

        files = []
        for tag in tags:
            if tag.image.large_thumbnail:
                file = get_file_for_tag(tag, tag.image,
                                        settings.FACE_RECOG_TRAIN_TEMP_DIR)
                files.append(file)

                process_file(file, X, y, tag.person_id)

        if len(files) > 0:
            face_model.update_knn_classifier(X, y)
    def handle(self, *args, **options):

        print('===Rebuilding Facial Models===')

        for family in Family.objects.all():

            print('')
            print('Building: {0}'.format(family.description))
            process_family(family.id)
Ejemplo n.º 5
0
    def test_process_family(self):
        path = settings.MEDIA_ROOT + 'profile_photos/large_test_image1.jpg'
        shutil.copy2(self.test_image, path)

        self.person.set_profile_image_crop_rotate_resize(
            path, 1, 1, 1200, 1700, 0, True)
        self.person.save()

        process_family(self.family.id)

        self.person.remove_local_images()
        self.person.remove_remote_images()

        face_model = FaceModel.objects.get(family_id=self.family.id)

        self.assertTrue(self.person.id in face_model.fit_data_person_ids)
        self.assertIsNotNone(face_model.trained_knn_model)
    def setUp(self):
        '''
        Need to create a family and a gallery
        '''
        self.family = Family()
        self.family.save()

        self.gallery = Gallery.objects.create(title="test_gallery",
                                              family_id=self.family.id)

        clear_directory(settings.FACE_RECOG_TRAIN_TEST_DIR)

        self.test_image = os.path.join(
            settings.BASE_DIR, 'facial_recognition/tests/test_image_woman.jpg')
        self.test_image_destination = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])
        self.test_image_s3_key = ''.join([
            'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])

        directory = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id)
        ])
        if not os.path.exists(directory):
            os.makedirs(directory)

        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)

        self.image = Image(gallery=self.gallery,
                           family=self.family,
                           original_image=''.join([
                               'galleries/',
                               str(self.family.id), '/',
                               str(self.gallery.id), '/test_image.jpg'
                           ]))
        self.image.save()
        self.image.upload_files_to_s3()

        self.person = Person(name='Wallace',
                             gender='M',
                             email='*****@*****.**',
                             family_id=self.family.id,
                             language='en')
        self.person.save()

        self.tag = Tag.objects.create(image_id=self.image.id,
                                      x1=0.279,
                                      y1=0.188,
                                      x2=0.536,
                                      y2=0.381,
                                      person_id=self.person.id,
                                      face_detected=True)

        # Upload new image
        self.test_image2 = os.path.join(
            settings.BASE_DIR,
            'facial_recognition/tests/test_image_woman_and_baby.jpg')
        self.test_image2_image_destination = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image_woman_and_baby.jpg'
        ])

        # Copy to test area
        shutil.copy2(self.test_image2, self.test_image2_image_destination)

        self.image2 = Image(gallery=self.gallery,
                            family=self.family,
                            original_image=''.join([
                                'galleries/',
                                str(self.family.id), '/',
                                str(self.gallery.id),
                                '/test_image_woman_and_baby.jpg'
                            ]))
        self.image2.save()
        self.image2.upload_files_to_s3()

        self.person2 = Person(name='Gromit',
                              gender='M',
                              email='*****@*****.**',
                              family_id=self.family.id,
                              language='en')
        self.person2.save()

        self.tag2 = Tag.objects.create(image_id=self.image2.id,
                                       x1=0.312,
                                       y1=0.239,
                                       x2=0.732,
                                       y2=0.811,
                                       person_id=self.person2.id,
                                       face_detected=True)

        # Create a trained model
        process_family(self.family.id)