import cv2 as cv
import numpy as np
faces = ['geogre clooney', 'leonardo dicaprio', 'margot robbie', 'nawazuddin siddique', 'priyanka chopra']
DIR = "Z:/Projects.py/faces"
haar_cascade = cv.CascadeClassifier("haar_face.xml")
features = []
labels = []
print(faces)
# Obtain all the images
def create_train():
for person in faces:
path = os.path.join(DIR, person)
label = faces.index(person)
for img in os.listdir(path):
img_path = os.path.join(path, img)
img_array = cv.imread(img_path)
gray = cv.cvtColor(img_array, cv.COLOR_BGR2GRAY)
faces_rect = haar_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=4)
for (x,y,w,h) in faces_rect:
faces_roi = gray[y:y+h, x:x+w]
features.append(faces_roi)
labels.append(label)
create_train()
# Printing the number of images (features) and thier labesls (eg. 0 for leo, 1 for george)
print("-------------------------TRAINING DONE---------------------------")
# Converting list to numpy list
features = np.array(features, dtype="object")
labels = np.array(labels)
face_recognizer = cv.face.LBPHFaceRecognizer_create()
# Train the face recognizer with features and labels list
face_recognizer.train(features, labels)
# Saving the numpy lists and face recognizer
face_recognizer.save("face_trained.yml")
np.save("features.npy", features)
np.save("labels.npy", labels)