You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I try to do facial recognition system that generates and stores face encodings from images, then uses a webcam to detect and match faces in real-time. If a match is found, it displays "Face Detected"; otherwise, "Face Not Found." The processed video stream is sent for display, possibly for attendance or access control purposes..
What I Did
import cv2
import os
import face_recognition
import numpy as np
import cvzone
import pickle
def generate_frame():
# Check if EncodeFile.p exists
if not os.path.exists("EncodeFile.p"):
logging.info("EncodeFile.p not found. Generating encodings...")
images_path = "static/Files/Images/"
image_files = os.listdir(images_path)
known_encodings = []
student_ids = []
for file in image_files:
img_path = os.path.join(images_path, file)
if not (file.lower().endswith(".jpg") or file.lower().endswith(".png")):
logging.warning(f"Skipping unsupported file format: {file}")
continue
try:
img = cv2.imread(img_path)
if img is None:
logging.error(f"Unable to read image {file}. Skipping.")
continue
if img.ndim != 3 or img.shape[2] not in [3, 4]:
logging.warning(f"Skipping {file} due to unsupported channel format.")
continue
if img.shape[2] == 4: # Convert RGBA to RGB
img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)
logging.info(f"Converted {file} from RGBA to RGB.")
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
encodings = face_recognition.face_encodings(img_rgb)
if encodings:
known_encodings.append(encodings[0])
student_id = os.path.splitext(file)[0]
student_ids.append(student_id)
else:
logging.warning(f"No face found in {file}. Skipping this image.")
except Exception as e:
logging.error(f"Error processing file {file}: {e}")
if known_encodings and student_ids:
with open("EncodeFile.p", "wb") as file:
pickle.dump([known_encodings, student_ids], file)
logging.info("EncodeFile.p created successfully!")
else:
logging.warning("No valid encodings generated. EncodeFile.p was not created.")
return # Exit function if no encodings are generated
# Initialize camera
capture = cv2.VideoCapture(0)
if not capture.isOpened():
raise RuntimeError("Could not start the camera.")
# Load resources
img_background = cv2.imread("static/Files/Resources/background.png")
folder_mode_path = "static/Files/Resources/Modes/"
img_mode_list = [cv2.imread(os.path.join(folder_mode_path, path)) for path in os.listdir(folder_mode_path)]
with open("EncodeFile.p", "rb") as file:
encoded_face_known, student_ids = pickle.load(file)
counter = 0
id = -1
while True:
success, img = capture.read()
if not success:
break
img_small = cv2.resize(img, (0, 0), None, 0.25, 0.25)
img_small = cv2.cvtColor(img_small, cv2.COLOR_BGR2RGB)
face_current_frame = face_recognition.face_locations(img_small)
encode_current_frame = face_recognition.face_encodings(img_small, face_current_frame)
img_background[162:162 + 480, 55:55 + 640] = img
if face_current_frame:
for encode_face, face_location in zip(encode_current_frame, face_current_frame):
matches = face_recognition.compare_faces(encoded_face_known, encode_face)
face_distance = face_recognition.face_distance(encoded_face_known, encode_face)
match_index = np.argmin(face_distance)
y1, x2, y2, x1 = [v * 4 for v in face_location]
bbox = 55 + x1, 162 + y1, x2 - x1, y2 - y1
img_background = cvzone.cornerRect(img_background, bbox)
if matches[match_index]:
id = student_ids[match_index]
if counter == 0:
cvzone.putTextRect(img_background, "Face Detected", (65, 200), thickness=2)
counter += 1
else:
cvzone.putTextRect(img_background, "Face Not Found", (65, 200), thickness=2)
counter = 0
# Update attendance logic here...
ret, buffer = cv2.imencode('.jpg', img_background)
if ret:
frame = buffer.tobytes()
yield (b'--frame\r\nContent-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
capture.release()
INFO:root:EncodeFile.p not found. Generating encodings...
ERROR:root:Error processing file 004223.png: Unsupported image type, must be 8bit gray or RGB image.
ERROR:root:Error processing file nimay.jpg: Unsupported image type, must be 8bit gray or RGB image.
WARNING:root:No valid encodings generated. EncodeFile.p was not created.
INFO:werkzeug:127.0.0.1 - - [22/Nov/2024 18:26:18] "GET /video HTTP/1.1" 200 -
The text was updated successfully, but these errors were encountered:
Description
I try to do facial recognition system that generates and stores face encodings from images, then uses a webcam to detect and match faces in real-time. If a match is found, it displays "Face Detected"; otherwise, "Face Not Found." The processed video stream is sent for display, possibly for attendance or access control purposes..
What I Did
The text was updated successfully, but these errors were encountered: