Skip to content

amac-lfc/frsystem

Repository files navigation

Face Recognition Project

An out of the box face recogniton python package designed for experiments with real-time face mask detection.

Table of Contents

  1. Getting Started
  2. Folders Description
  3. Usage
  4. Resources
  5. Acknowledgements

Getting Started

Installation

Make sure your present working directory is the root of the project and run the commands below. This will create a virtual environment for the project and install all required packages using environment.yml file.

$ conda env create

$ conda activate

Folders Description

frsystem

Contains a package designed as a system for experimenting with face recognition.

frsapp

mask_no_mask_classifier.ipynb a jupyter notebook that covers experiments with transfer learning to determine the best model in terms of face mask detection

mask_recognizer.py a program that uses frsystem and the best model (Xception) obtained from the notebook to classify a face mask on webcam.

face_recognizer.py a program that uses frsystem to classify known faces on webcam.

mask_face_recognizer.py a program that uses frsystem and the face mask model to detect known faces without a mask on webcam.

Usage Example

Step 1: Add known faces to database

Adding known faces to the database that the system will recognize is possible through the following two methods:

Manual

  1. Webcam - adding a known face through the webcam. When webcam window pops up, hit ENTER to take a picture of your face. Hit ESC to quit.

  2. File - adding a known face from a .jpg file

Example with manual

from frsystem.frs import FaceRecognitionSystem

EMBEDDING_MODEL = "facenet"
WEIGHTS = "util/facenet_keras.h5"
DB = "data/db.pkl"
EMBEDDINGS = "data/embeddings.pkl"
    
frs = FaceRecognitionSystem(embedding_model=EMBEDDING_MODEL,
                            weights=WEIGHTS,
                            db_file=DB, 
                            embeddings_file=EMBEDDINGS)

frs.addFaceToDatabase("Elon Musk", method="camera") # default method is "file"

Folder Loop

The following directory structure is required to process images through a folder loop. For accurate face recognition add at least 5 images per person.

jpg/
    Elon Musk/
      - face1.jpg # image names can be anything
      - face2.jpg
      - face3.jpg
      - face4.jpg
      - face5.jpg
    Johnny Ive/
      - face1.jpg
	  ...
      - face5.jpg

Example with folder loop

from frsystem.frs import FaceRecognitionSystem

EMBEDDING_MODEL = "facenet"
WEIGHTS = "util/facenet_keras.h5"
DB = "data/db.pkl"
EMBEDDINGS = "data/embeddings.pkl"
BASE = "jpg/"

frs = FaceRecognitionSystem(embedding_model=EMBEDDING_MODEL,
                            weights=WEIGHTS,
                            db_file=DB, 
                            embeddings_file=EMBEDDINGS)
                            
frs.addFacesUsingLoop(BASE)

Step 2: Recognize known faces

After running the command below, the webcam window will pop up and display frames with detected face identities. If the person in the camera was not added to the database, it will say "Unknown".

$ python3 frsapp/face_recognizer.py

Face Recognizer Example

Step 3: Recognize face masks

Running the following command will display a webcam window with detected face masks ("Mask"/"No Mask").

$ python3 frsapp/mask_recognizer.py

Face Recognizer Example

Step 4: Recognize face masks or known faces

Running the following command will display a webcam window with detected face masks. If a face mask is not present on the face, it will detect person's name if known, otherwise "Unknown" label will be displayed.

$ python3 frsapp/mask_face_recognizer.py

Mask Face Recognizer Example

Resources

DataCamp

Introduction to Python for Data Sceince

Manipulating Data Frames with pandas

Data Types for Data Science in Python

Intermediate Python

Image Processing with Keras

Introduction to Deep Learning with Keras

Advanced Deep Learning with Keras

Readings

Modern Face Recognition with Deep Learning

Illustrated: 10 CNN Architectures

A Comprehensive Hands-on Guide to Transfer Learning with Real-World Applications in Deep Learning

Tutorials

Face Detection with Open CV

ImageNet: VGGNet, ResNet, Inception, and Xception with Keras

How to Configure Image Data Augmentation in Keras

Face Mask Detector with OpenCV, Keras/TensorFlow, and Deep Learning

Acknowledgements

This project is a part of James Rocco Research Scholarship provided by Lake Forest College and was carried out under the supervision of Prof. Arthur Bousquet PhD.