admin管理员组

文章数量:1293367

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.

本文标签: pythonIn Recognition System testpy is not workingStack Overflow