OpenCV's built in face recognizer is recognizing all wrong faces

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)