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)
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)
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)