Phase 1: Foundation
- Learn Python basics (variables, loops, functions, file handling)
- Learn about image processing libraries:
OpenCV
,face_recognition
,dlib
- Understand how face detection and recognition differ
- Install required tools
Phase 2: Face Detection & Recognition Basics
- Load and encode images of known people
- Detect and recognize faces from new images
- Recognize faces in real-time using webcam
Phase 3: Organize Your System
- Create folders for known faces
- Add unknown recognition with logging
- Handle multiple faces in a frame
Phase 4: Expansion
- Create a face registration system (GUI or CLI)
- Store attendance logs in CSV
- Add thresholding for better accuracy
- Integrate with external hardware or services
Step-by-Step: Build the Facial Recognition System
Step 0: Install the Required Libraries
bashCopyEditpip install face_recognition opencv-python numpy
Step 1: Load and Encode Known Faces
Create a folder called known/
with labeled images:
known/
├── Alice.jpg
├── Bob.jpg
└── Charlie.png
Python Code:
import face_recognition
import os
known_faces = []
known_names = []
# Loop through images in the known directory
for filename in os.listdir('known'):
if filename.endswith(('.jpg', '.jpeg', '.png')):
path = os.path.join('known', filename)
image = face_recognition.load_image_file(path)
encodings = face_recognition.face_encodings(image)
# Check if a face was found
if encodings:
known_faces.append(encodings[0])
known_names.append(os.path.splitext(filename)[0])
What This Does:
- Loads each image from the
known/
folder. - Converts it into a 128-dimension face encoding (a unique vector).
- Stores both the encoding and the person’s name (based on the filename).
Step 2: Detect and Recognize Faces in Webcam Feed
pythonCopyEditimport cv2
video = cv2.VideoCapture(0)
while True:
ret, frame = video.read()
rgb = frame[:, :, ::-1] # Convert BGR to RGB for face_recognition
face_locations = face_recognition.face_locations(rgb)
face_encodings = face_recognition.face_encodings(rgb, face_locations)
for encoding, location in zip(face_encodings, face_locations):
matches = face_recognition.compare_faces(known_faces, encoding, tolerance=0.6)
name = "Unknown"
face_distances = face_recognition.face_distance(known_faces, encoding)
best_match_index = face_distances.argmin()
if matches[best_match_index]:
name = known_names[best_match_index]
top, right, bottom, left = location
cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
cv2.putText(frame, name, (left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (255, 255, 255), 2)
cv2.imshow("Face Recognition", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video.release()
cv2.destroyAllWindows()
What This Does:
- Reads frames from your webcam.
- Detects all faces in the frame.
- Compares each face to the known face encodings.
- Draws a box and displays the name if matched.
Step 3: Handle Unknown Faces (Optional)
If you want to log unknown faces:
if name == "Unknown":
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
unknown_image = frame[top:bottom, left:right]
cv2.imwrite(f"unknown/face_{timestamp}.jpg", unknown_image)
You could also maintain a log file:
with open("logs.csv", "a") as f:
f.write(f"{timestamp},{name}\n")
Project Structure (Recommended)
bashCopyEditfacial_recognition_project/
│
├── known/ # Known faces
├── unknown/ # Captured unknown faces
├── logs.csv # Attendance or detection logs
├── recognizer.py # Main script
└── register_face.py # Optional: add new faces
Tips for Accuracy and Real-World Use
- Lighting matters – Ensure good lighting for better accuracy.
- Use front-facing images for encoding.
- Add multiple images per person (in subfolders) to improve recognition.
- You can create an embedding dataset and use machine learning classifiers (SVM, KNN) on top of encodings for large-scale systems.
Optional: GUI with Tkinter or PyQt
To let users:
- Register themselves with webcam
- See live feed with face tags
- Press buttons to mark attendance
You can build a small GUI that wraps around the recognizer.
Final Thoughts
Facial recognition systems in Python are not just academic — they’re practical, powerful, and surprisingly achievable with open-source tools. The face_recognition
library provides a high-level, easy-to-use interface, while OpenCV
handles real-time video and image processing.
Summary of Key Steps:
Step | Goal |
---|---|
Encode known faces | Create identity vectors |
Read webcam frame | Real-time image feed |
Detect & encode faces | Find face positions and features |
Match against known | Compare face encoding using distance |
Display results | Draw boxes and show name on screen |
Want to Go Further?
- Train a custom CNN using
dlib
orFaceNet
- Use Raspberry Pi for IoT-based face detection
- Build a REST API to perform recognition on remote images
- Integrate with a database for attendance/entry logs