Building an Automatic Facial Recognition Attendance System with Python

Building an Automatic Facial Recognition Attendance System with Python

By Pratyush Mishra

·

4 min read

Facial recognition technology has seen rapid advancements over the years, and it’s no surprise that it’s being adopted in various sectors, including security, banking, and education. One exciting application of this technology is an Automatic Facial Recognition Attendance System, which can streamline attendance tracking and make it contactless and efficient.

In this tutorial, we’ll build an attendance system using Python, OpenCV, and face_recognition libraries. This system will use a webcam to detect and recognize faces in real-time, logging attendance into a CSV file for easy tracking.

Prerequisites

Before we get started, make sure you have a basic understanding of Python programming and have Python 3.7 or higher installed. You’ll also need a webcam (built-in or external) for real-time facial recognition.

Why Facial Recognition Attendance?

Traditional attendance systems require manual input, which can be time-consuming and error-prone. A Facial Recognition Attendance System offers:

  • Contactless tracking: No need for badges or fingerprints.

  • Speed and accuracy: Faces are recognized and attendance is logged instantly.

  • Automation: Attendance records are saved automatically.

Step-by-Step Guide

Let’s walk through the process of building this system.

Step 1: Setting Up Your Python Environment

First, we need to install the necessary libraries. Open a terminal or command prompt and run:

pip install opencv-python face-recognition numpy pandas
  • OpenCV: For video capture and image processing.

  • face_recognition: To detect and recognize faces.

  • numpy: For handling arrays and mathematical operations.

  • pandas: For managing attendance data in a structured format.

Step 2: Loading Known Faces

We need to load and encode images of known individuals. These face encodings will be compared against faces captured by the webcam.

Here’s how we load known faces:

import face_recognition

known_face_encodings = []
known_face_names = []

# Load and encode Person 1
person1_image = face_recognition.load_image_file("person1.jpg")
person1_encoding = face_recognition.face_encodings(person1_image)[0]
known_face_encodings.append(person1_encoding)
known_face_names.append("Person 1")

# Repeat for additional faces

You can load as many faces as needed. Save each face image in the project folder (e.g., person1.jpg, person2.jpg, etc.).

Step 3: Real-Time Face Recognition

We’ll use OpenCV to access the webcam feed, detect faces in each frame, and match them with our known encodings.

import cv2
import face_recognition
import numpy as np

def run_attendance_system():
    video_capture = cv2.VideoCapture(0)

    while True:
        ret, frame = video_capture.read()
        small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
        rgb_small_frame = small_frame[:, :, ::-1]

        face_locations = face_recognition.face_locations(rgb_small_frame)
        face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations)

        for face_encoding, face_location in zip(face_encodings, face_locations):
            matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
            face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)

            best_match_index = np.argmin(face_distances)
            if matches[best_match_index]:
                name = known_face_names[best_match_index]
                # Mark attendance here

        # Show the video feed with recognized faces
        cv2.imshow('Attendance System', frame)

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

    video_capture.release()
    cv2.destroyAllWindows()

This code captures video from the webcam, detects faces, compares them with known encodings, and displays the recognized faces in the video feed.

Step 4: Marking Attendance

We’ll log the attendance by saving the recognized person’s name and the current time into a CSV file. Let’s integrate that into our system:

import pandas as pd
from datetime import datetime

# Initialize an empty DataFrame to store attendance
attendance_df = pd.DataFrame(columns=["Name", "Time"])

# Function to log attendance
def mark_attendance(name):
    now = datetime.now()
    current_time = now.strftime("%H:%M:%S")

    if name not in attendance_df["Name"].values:
        attendance_df.loc[len(attendance_df)] = [name, current_time]
        print(f"Attendance marked for {name} at {current_time}")

# Save the attendance to a CSV file
attendance_df.to_csv("attendance.csv", index=False)

The mark_attendance() function ensures that the name is logged only once, and the time is recorded when the face is first detected. When you exit the program, the attendance is saved to attendance.csv.

Step 5: Running the System

To start the system, simply run the Python script:

python attendance_system.py

The webcam will open, detect faces, and log attendance into the CSV file. Press 'q' to quit and close the system.

Future Enhancements

Here are a few ideas to extend this project further:

  • GUI Interface: Add a graphical user interface for managing known faces and viewing attendance records.

  • Email Notifications: Send an email or SMS when attendance is marked.

  • Database Integration: Store attendance in a database instead of CSV files for large-scale implementations.

  • Multi-Camera Support: Capture faces from multiple cameras for larger areas like classrooms or offices.

Final Thoughts

Building a Facial Recognition Attendance System is a great project to dive deeper into computer vision and machine learning using Python. It’s practical, efficient, and can be easily extended to various real-world use cases.

If you enjoyed this tutorial or have any questions, feel free to drop a comment below. Don’t forget to check out the GitHub repository for the complete source code.

Happy coding! 😊