main.py import numpy as np import cv2 import dlib import pickle import os # ✅ Open video capture video = cv2.VideoCapture(0) # ✅ Initialize Dlib's HOG-based face detector detector = dlib.get_frontal_face_detector() faces_data = [] i = 0 name = input("Enter Your Name Here: ") # ✅ Set higher resolution video.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) video.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) while True: ret, frame = video.read() if not ret: break gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = detector(gray) for face in faces: x, y, w, h = face.left(), face.top(), face.width(), face.height() crop_img = frame[y:y + h, x:x + w, :] resized_img = cv2.resize(crop_img, (50, 50)) if len(faces_data) < 100 and i % 10 == 0: faces_data.append(resized_img) i += 1 cv2.putText(frame, str(len(faces_data)), (50, 50), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (50, 50, 255), 1) cv2.rectangle(frame, (x, y), (x + w, y + h), (50, 50, 255), 2) cv2.imshow("Frame - Dlib HOG", frame) k = cv2.waitKey(1) if k == ord('q') or len(faces_data) == 100: # ✅ Stop when 100 images are captured break # ✅ Release video video.release() cv2.destroyAllWindows() # ✅ Save Data in "Data" Folder if not os.path.exists('Data'): os.makedirs('Data') names_file = 'Data/names.pkl' faces_file = 'Data/faces_data.pkl' # ✅ Save Names if os.path.exists(names_file): with open(names_file, 'rb') as f: names = pickle.load(f) names.extend([name] * len(faces_data)) else: names = [name] * len(faces_data) with open(names_file, 'wb') as f: pickle.dump(names, f) # ✅ Save Faces faces_data = np.asarray(faces_data) if os.path.exists(faces_file): with open(faces_file, 'rb') as f: existing_faces = pickle.load(f) combined_faces = np.concatenate((existing_faces, faces_data), axis=0) else: combined_faces = faces_data with open(faces_file, 'wb') as f: pickle.dump(combined_faces, f) print("✅ Data saved successfully in 'Data/' folder.") test.py from sklearn.neighbors import KNeighborsClassifier import numpy as np import cv2 import dlib import pickle import os names_file = 'Data/names.pkl' faces_file = 'Data/faces_data.pkl' # ✅ Open video capture video = cv2.VideoCapture(0) # ✅ Initialize Dlib's HOG-based face detector detector = dlib.get_frontal_face_detector() # Load data with open(names_file, 'rb') as f: LABELS = pickle.load(f) with open(faces_file, 'rb') as f: FACES = pickle.load(f) print(f"Shape of FACES: {FACES.shape}") print(f"Shape of LABELS: {len(LABELS)}") # ✅ Set higher resolution video.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) video.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) # Train KNN model Knn = KNeighborsClassifier(n_neighbors=5) Knn.fit(FACES, LABELS) while True: ret, frame = video.read() if not ret: break gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = detector(gray) for face in faces: x, y, w, h = face.left(), face.top(), face.width(), face.height() crop_img = frame[y:y + h, x:x + w] resized_img = cv2.resize(crop_img, (50, 50)).flatten().reshape(1, -1) output = Knn.predict(resized_img) cv2.putText(frame, str(output[0]), (x, y - 15), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 2) cv2.rectangle(frame, (x, y), (x + w, y + h), (50, 50, 255), 2) cv2.imshow("Frame - Dlib HOG", frame) k = cv2.waitKey(1) if k == ord('q'): break # ✅ Release video video.release() cv2.destroyAllWindows() The problem is that when I run it takes input Enter Here Name: and then it opens the camera and read the face of person and save it on the pkl file (faces_data.pkl and names.pkl) as given. The test.py file is created for testing but it Sometimes shows the error when i run individually the test.py "RuntimeError: Unsupported image type, must be 8bit gray or RGB image." And I already converted it into gray gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) Complete Error: Shape of FACES: (100, 7500) Shape of LABELS: 102 Traceback (most recent call last): File "E:\UMT\Semester 5\DL & NN\Project\Youtube_Face_reconition system\test.py", line 32, in <module> Knn.fit(FACES, LABELS) File "C:\Users\DELL\AppData\Local\Programs\Python\Python311\Lib\site-packages\sklearn\base.py", line 1389, in wrapper return fit_method(estimator, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\DELL\AppData\Local\Programs\Python\Python311\Lib\site-packages\sklearn\neighbors\_classification.py", line 239, in fit return self._fit(X, y) ^^^^^^^^^^^^^^^ File "C:\Users\DELL\AppData\Local\Programs\Python\Python311\Lib\site-packages\sklearn\neighbors\_base.py", line 478, in _fit X, y = validate_data( ^^^^^^^^^^^^^^ File "C:\Users\DELL\AppData\Local\Programs\Python\Python311\Lib\site-packages\sklearn\utils\validation.py", line 2961, in validate_data X, y = check_X_y(X, y, **check_params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\DELL\AppData\Local\Programs\Python\Python311\Lib\site-packages\sklearn\utils\validation.py", line 1389, in check_X_y check_consistent_length(X, y) File "C:\Users\DELL\AppData\Local\Programs\Python\Python311\Lib\site-packages\sklearn\utils\validation.py", line 475, in check_consistent_length raise ValueError( ValueError: Found input variables with inconsistent numbers of samples: [100, 102] Instead it should tell me the name of person. Continue reading...