Showing posts with label FACE ATTENDENCE SYSTEM MAKING LOGIC. Show all posts
Showing posts with label FACE ATTENDENCE SYSTEM MAKING LOGIC. Show all posts

Thursday, August 10, 2023

FACE ATTENDENCE SYSTEM MAKING LOGIC

FACE RECOGNITION SYSTEM THAT MACHING FACE FROM STORED MULTIPLE PERSON IMAGE WITH MAXIMUM ACCURACY 



Python Code Is Now Here  : (Write and Test It Proper Indentation.)

import cv2

import face_recognition

import os

import numpy as np

# Load the images from the folder

folder_path = '../userPhoto'

image_files = os.listdir(folder_path)


# Initialize arrays to store known face encodings and names

known_encodings = []

known_names = []

known_images = []


# Load the known face images and compute their encodings

for image_file in image_files:

    image_path = os.path.join(folder_path, image_file)

    image = face_recognition.load_image_file(image_path)

    face_locations = face_recognition.face_locations(image)


    if len(face_locations) > 0:

        encoding = face_recognition.face_encodings(image, face_locations)[0]

        known_encodings.append(encoding)

        known_names.append(os.path.splitext(image_file)[0])

        known_images.append(cv2.resize(image, (100, 100)))  # Resize image for thumbnail display


# Initialize the webcam

video_capture = cv2.VideoCapture(0)


while True:

    # Capture frame-by-frame from the webcam

    ret, frame = video_capture.read()


    # Convert the frame to RGB for face recognition

    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)


    # Detect faces in the frame

    face_locations = face_recognition.face_locations(rgb_frame)

    face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)


    # Iterate over detected faces

    for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):

        # Compare the face with known encodings

        distances = face_recognition.face_distance(known_encodings, face_encoding)

        min_distance_index = np.argmin(distances)

        min_distance = distances[min_distance_index]


        if min_distance <= 0.45:  # Adjust the threshold as needed

            name = known_names[min_distance_index]

            accuracy = (1 - min_distance) * 100  # Calculate accuracy percentage

            thumbnail = known_images[min_distance_index]


            # Draw a rectangle around the face

            cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)


            # Display the name and accuracy below the face rectangle

            text = f"{name}: {accuracy:.2f}%"

            cv2.putText(frame, text, (left, bottom + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 1)


            # Display the thumbnail image in the top right corner

            frame[10:110, frame.shape[1] - 110:frame.shape[1] - 10] = thumbnail

        else:

            name = "Unknown"


            # Draw a rectangle around the face

            cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)


            # Display the name below the face rectangle

            cv2.putText(frame, name, (left, bottom + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 1)


    # Display the resulting frame

    cv2.imshow('Face Recognition', frame)


    # Quit the program if 'q' is pressed

    if cv2.waitKey(1) & 0xFF == ord('q'):

        break


# Release the webcam and close windows

video_capture.release()

cv2.destroyAllWindows()