Face Recognition System using DEEPFACE (With Python Codes)


Recognition of the face as an identity is a critical aspect in today’s world. Facial identification and recognition find its use in many real-life contexts, whether your identity card, passport, or any other credential of significant importance. It has become quite a popular tool these days to authenticate the identity of an individual. This technology is also being used in various sectors and industries to prevent ID fraud and identity theft. Your smartphone also has a face recognition feature to unlock it. The recognition incorporated in such tasks demands three things: the ability to comprehend identity from unfamiliar faces, the ability to learn new faces, and the ability to acknowledge familiar faces. Although the concept of facial recognition is not new, technological advancements over the years have led to a massive expansion of this technology. This post will try to explore how facial recognition works and its role in identity verification.

How Facial Recognition works?

The process of facial recognition starts with the human face and identifying its necessary facial features and patterns. A human face comprises a very basic set of features, such as eyes, nose, and mouth. Facial recognition technology learns what a face is and how it looks. This is done by using deep neural network & machine learning algorithms on a set of images with human faces looking at different angles or positions.

The process starts with detecting the human eyes, one of the most accessible features to detect, and then proceeds to detect eyebrows, nose, mouth, etc. Calculating the width of the nose, the distance between the eyes, and the shape & size of the mouth, the model created tries to find insights from the facial region. Multiple algorithm training can be performed to improve the algorithm’s accuracy to detect the faces and their positions. Once the face is detected, the model is then trained further with the help of computer vision algorithms to detect the facial landmark features such as eyebrow corners, eyes gap, the tip of the nose, mouth corners, etc. Each feature is considered as a nodal point, and each face consists of around 80 nodal points. These landmark features are the key to distinguish each face present in the database.

After the facial features are extracted, landmarks, face position, orientation & all key elements are fed into the model; the model generates a unique feature vector for each face in its numeric form. A unique code generated identifies the person among all the others in the dataset. The generated feature vector is then used to search and match from the entire dataset or database of faces present during the face detection process. 

About Deepface 

Deepface is a facial recognition and attributes analysis framework for python created by the artificial intelligence research group at Facebook in 2015. Keras and Tensorflow inspire this library’s core components. It is a hybrid face recognition framework that uses state-of-the-art models for analysis such as VGG-Face, Google Facenet, Facebook Deepface, all wrapped together in one. Deepface’s face identifying accuracy goes up to 97% and has proved to be more successful in detecting faces than the average face recognition frameworks. Facebook uses Deepface to prevent impersonation and identity theft on its platform. 

Getting Started with Facial Recognition Model

We will try to create a face detection and facial feature recognition model using Facebook’s Deepface Framework to identify and distinguish between a set of images. We will also compare the results using two of many in-house models present in the framework and predict the age of the faces present in the images. 

So let’s start!

Creating The Model

We will first install the Deepface Library to help us call our further modules to use. It can be done by running the following command :

!pip install deepface #install the Deepface Library 

We will now import and call our modules from the framework. We will also use OpenCV to help our model with image processing and matplotlib to plot the results.

 #calling the dependencies
 from deepface import DeepFace
 import cv2
 import matplotlib.pyplot as plt 

Importing our images to be used and setting their path in the model, here we will be using three images of the same face to test our facial recognition and one different face image to cross-validate our result.

 #importing the images
 img1_path = '/content/Img1.jpg'
 img2_path = '/content/Img2.jpg'
 img3_path = '/content/Img3.jpg'
 #confirming the path of images
 img1 = cv2.imread(img1_path)
 img2 = cv2.imread(img2_path) 

We will now plot and check if our images have been imported correctly 

   plt.imshow(img1[:, :, ::-1 ]) #setting value as -1 to maintain saturation
   plt.imshow(img2[:, :, ::-1 ]) 

Here are our images

We will now call our first library model for facial analysis called VGG-Face. When we call the model, it imports a set of pre-trained deep learning networks with pre-trained weights.

 #calling VGGFace
 model_name = "VGG-Face"
 model = DeepFace.build_model(model_name) 
Verifying the Results

Creating a function called result to get our results and using the verify function to validate the images

 result = DeepFace.verify(img1_path,img2_path)#validate our images
 DeepFace.verify("Img1.jpg","Img2.jpg")#generating result of comparison 

We will get the following output :

 {'distance': 0.2570606020004992,
  'max_threshold_to_verify': 0.4,
  'model': 'VGG-Face',
  'similarity_metric': 'cosine',
  'verified': True} 

Here, the distance tells us how far apart are the two faces present in images, i.e. the difference between the two. We can also see that it provides us with our image verification result as TRUE telling us that the compared faces present in images are of similar people.

Cross Validating Our Model 

 We will now cross-validate our model and check whether the results generated before are irrational or not. For this, we will use a different face image and verify it with one of our first face images.

 img4_path = '/content/JAN.jpg' #setting path for different image
 img4 = cv2.imread(img4_path)
 #plotting the image
 plt.imshow(img4[:, :, ::-1 ]) 

Comparing  the two images,

 #comparing the faces in images using VGG Face

Here’s our result 

 {'distance': 0.6309288770738648,
  'max_threshold_to_verify': 0.4,
  'model': 'VGG-Face',
  'similarity_metric': 'cosine',
  'verified': False} 

As we can notice, the distance this time is very high, and the verification says FALSE, telling us that the compared faces are of two different people!

Testing using a Different Model 

We will create a separate model by calling a different analysis model named Facenet, comparing our the first two images, and seeing how different a result it provides us with than the VGG Face Model.

 #calling the model
 model_name = 'Facenet'
 #creating a function named resp to store the result
 resp = DeepFace.verify(img1_path = img1_path , img2_path = img2_path, model_name = model_name)
 resp #generating our result 

Here’s the output for Facenet :

 {'distance': 0.42664666323609834,
  'max_threshold_to_verify': 0.4,
  'model': 'Facenet',
  'similarity_metric': 'cosine',
  'verified': True} 

We can see by comparing the faces present in the first two images, although Facenet tells us that they are similar, the distance seems to be a bit high. Hence, telling us that the VGG Face model gives a more accurate representation of results than Facenet.

We can also match and rank the similarity of faces using a different image of the same person.

 #storing match and ranks by creating a dataframe
 df = DeepFace.find(img_path = '/content/Other.jpg', db_path ='/content/') 
 Finding representations:   0%|          | 0/4 [00:00<?, ?it/s]
 Finding representations:  25%|██▌       | 1/4 [00:10<00:31, 10.58s/it]
 Finding representations:  50%|█████     | 2/4 [00:22<00:21, 10.90s/it]
 Finding representations:  75%|███████▌  | 3/4 [00:31<00:10, 10.56s/it]
 Finding representations: 100%|██████████| 4/4 [00:41<00:00, 10.33s/it] 

df.head() #show top matches

Result :

Facial Feature Analysis using Deepface 

Using Deepface, we can also analyze the facial features. One can analyze the age, race, emotion and gender using Deepface’s functions.

 #creating an object to analyze facial features
 obj = DeepFace.analyze(img_path = "Img2.jpg", actions = ['age', 'gender', 'race', 'emotion'])
 print(obj["age"]," years old ",obj["dominant_race"]," ",obj["dominant_emotion"]," ", obj["gender"])
 Finding actions:   0%|          | 0/4 [00:00<?, ?it/s]
 Action: age:   0%|          | 0/4 [00:00<?, ?it/s]    
 Action: age:  25%|██▌       | 1/4 [00:07<00:22,  7.60s/it]
 Action: gender:  25%|██▌       | 1/4 [00:07<00:22,  7.60s/it]
 Action: gender:  50%|█████     | 2/4 [00:08<00:11,  5.57s/it]
 Action: race:  50%|█████     | 2/4 [00:08<00:11,  5.57s/it]  
 Action: race:  75%|███████▌  | 3/4 [00:08<00:04,  4.04s/it]
 Action: emotion:  75%|███████▌  | 3/4 [00:08<00:04,  4.04s/it]
 Action: emotion: 100%|██████████| 4/4 [00:13<00:00,  3.48s/it] 

Analyzing this image it tell us the following :

32  years old  white   neutral   Woman

Analyzing the next face, tell us the following :

28  years old  white   happy   Woman


This article has now implemented and learned how to create a Face Recognition & Facial Feature Detection model to analyze faces from a set of images. You can choose other models present in Deepface such as “OpenFace”, “DeepID”, “ArcFace”, “Dlib ” and check their recognition accuracy as well. The full Colab file for the following can be accessed from here.

Happy Learning!


Download our Mobile App

Victor Dey
Victor is an aspiring Data Scientist & is a Master of Science in Data Science & Big Data Analytics. He is a Researcher, a Data Science Influencer and also an Ex-University Football Player. A keen learner of new developments in Data Science and Artificial Intelligence, he is committed to growing the Data Science community.

Subscribe to our newsletter

Join our editors every weekday evening as they steer you through the most significant news of the day.
Your newsletter subscriptions are subject to AIM Privacy Policy and Terms and Conditions.

Our Recent Stories

Our Upcoming Events

3 Ways to Join our Community

Telegram group

Discover special offers, top stories, upcoming events, and more.

Discord Server

Stay Connected with a larger ecosystem of data science and ML Professionals

Subscribe to our Daily newsletter

Get our daily awesome stories & videos in your inbox

Can OpenAI Save SoftBank? 

After a tumultuous investment spree with significant losses, will SoftBank’s plans to invest in OpenAI and other AI companies provide the boost it needs?

Oracle’s Grand Multicloud Gamble

“Cloud Should be Open,” says Larry at Oracle CloudWorld 2023, Las Vegas, recollecting his discussions with Microsoft chief Satya Nadella last week. 

How Generative AI is Revolutionising Data Science Tools

How Generative AI is Revolutionising Data Science Tools

Einblick Prompt enables users to create complete data workflows using natural language, accelerating various stages of data science and analytics. Einblick has effectively combined the capabilities of a Jupyter notebook with the user-friendliness of ChatGPT.