12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import face_recognition
- from sklearn import svm
- import joblib
- import os
- # Training the SVC classifier
- # The training data would be all the face encodings from all the known images and the labels are their names
- encodings = []
- names = []
- train_list = []
- is_train = False
- if not is_train:
- try:
- clf = joblib.load('saved_model.pkl')
- except:
- clf = None
- if clf is None:
- is_train = True
- if is_train:
- # Training directory
- train_str = os.path.join('data', 'peeps', 'anchor')
- train_dir = os.listdir(os.path.join('data', 'peeps', 'anchor'))
- # Loop through each person in the training directory
- for person in train_dir:
- pix_str = os.path.join(train_str, person)
- pix = os.listdir(os.path.join(train_str, person))
- # Loop through each training image for the current person
- for person_img in pix:
- # Get the face encodings for the face in each image file
- face = face_recognition.load_image_file(pix_str + "/" + person_img)
- face_bounding_boxes = face_recognition.face_locations(face)
- # If training image contains exactly one face
- if len(face_bounding_boxes) == 1:
- face_enc = face_recognition.face_encodings(face)[0]
- # Add face encoding for current image with corresponding label (name) to the training data
- encodings.append(face_enc)
- names.append(person)
- else:
- print(person + "/" + person_img + " was skipped and can't be used for training")
- # Create and train the SVC classifier
- clf = svm.SVC(gamma='scale', probability=True)
- clf.fit(encodings, names)
- joblib.dump(clf, 'saved_model.pkl')
- # Load the test image with unknown faces into a numpy array
- test_image = face_recognition.load_image_file(os.path.join('application_data', 'input_image', 'input_image.jpg'))
- # Find all the faces in the test image using the default HOG-based model
- face_locations = face_recognition.face_locations(test_image)
- no = len(face_locations)
- print("Number of faces detected: ", no)
- # Predict all the faces in the test image using the trained classifier
- print("Found:")
- for i in range(no):
- test_image_enc = face_recognition.face_encodings(test_image)[i]
- name = clf.predict([test_image_enc])
- print(*name)
|