Attendance register - using face detection - complete project and source code
Creating an attendance system using face detection involves several steps, including setting up the environment, capturing and processing images, recognizing faces, and storing attendance records. Here’s a complete project outline and the source code for an attendance system using face detection with Python.
### Project Outline
1. **Install Necessary Libraries**:
- OpenCV: For image processing and face detection.
- dlib: For face recognition.
- face_recognition: A simple face recognition library.
- pandas: For handling attendance records.
- NumPy: For numerical operations.
2. **Dataset Preparation**:
- Collect images of individuals whose attendance you want to track.
- Organize the images in a directory with each sub-directory named after the person.
3. **Face Encoding**:
- Encode faces from the images and store these encodings.
4. **Face Detection and Recognition**:
- Capture live video stream from a webcam.
- Detect faces in the video frames.
- Compare the detected faces with the stored encodings to recognize individuals.
5. **Attendance Logging**:
- Log the attendance of recognized individuals in a CSV file.
### Source Code
Below is the source code for the face detection attendance system:
```python
import cv2
import numpy as np
import face_recognition
import os
from datetime import datetime
import pandas as pd
# Step 1: Load images and create encodings
path = 'images' # Directory containing images
images = []
classNames = []
myList = os.listdir(path)
for cl in myList:
curImg = cv2.imread(f'{path}/{cl}')
images.append(curImg)
classNames.append(os.path.splitext(cl)[0])
def findEncodings(images):
encodeList = []
for img in images:
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
encode = face_recognition.face_encodings(img)[0]
encodeList.append(encode)
return encodeList
encodeListKnown = findEncodings(images)
# Step 2: Initialize video capture
cap = cv2.VideoCapture(0)
# Step 3: Mark attendance
def markAttendance(name):
df = pd.read_csv('Attendance.csv')
now = datetime.now()
dtString = now.strftime('%H:%M:%S')
dateString = now.strftime('%d/%m/%Y')
if name not in df['Name'].values:
df = df.append({'Name': name, 'Date': dateString, 'Time': dtString}, ignore_index=True)
df.to_csv('Attendance.csv', index=False)
else:
# If name exists, update the time for today
df.loc[df['Name'] == name, 'Time'] = dtString
df.to_csv('Attendance.csv', index=False)
while True:
success, img = cap.read()
imgS = cv2.resize(img, (0, 0), None, 0.25, 0.25)
imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)
facesCurFrame = face_recognition.face_locations(imgS)
encodesCurFrame = face_recognition.face_encodings(imgS, facesCurFrame)
for encodeFace, faceLoc in zip(encodesCurFrame, facesCurFrame):
matches = face_recognition.compare_faces(encodeListKnown, encodeFace)
faceDis = face_recognition.face_distance(encodeListKnown, encodeFace)
matchIndex = np.argmin(faceDis)
if matches[matchIndex]:
name = classNames[matchIndex].upper()
y1, x2, y2, x1 = faceLoc
y1, x2, y2, x1 = y1*4, x2*4, y2*4, x1*4
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.rectangle(img, (x1, y2 - 35), (x2, y2), (0, 255, 0), cv2.FILLED)
cv2.putText(img, name, (x1 + 6, y2 - 6), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
markAttendance(name)
cv2.imshow('Webcam', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
### Instructions to Run the Project
1. **Install Required Libraries**:
```bash
pip install opencv-python numpy face_recognition pandas
```
2. **Prepare Dataset**:
- Create a folder named `images`.
- Add subfolders for each individual with their respective images.
3. **Create an Attendance File**:
- Create a CSV file named `Attendance.csv` with columns: `Name`, `Date`, `Time`.
4. **Run the Code**:
- Save the code in a Python file, e.g., `attendance.py`.
- Run the script using `python attendance.py`.
5. **Using the System**:
- The system will use the webcam to capture faces and mark attendance for recognized individuals in the CSV file.
This project can be further enhanced by adding features like email notifications, a graphical user interface, or integrating with a database for better record management.
No Comments have been Posted.