Face Recognition in Computer Vision with Implementation | Computer Vision

Written by- AionlinecourseComputer Vision Tutorials

Face recognition is a powerful computer vision technology that identifies and verifies individuals based on their facial features. This technology is becoming more popular day by day. In this tutorial, we will describe types of face recognition, building a face Identification system, real-time face recognition, and future directions. So, let's dive deep into it. Face recognition is a powerful computer vision technology that identifies and verifies individuals based on their facial features. This technology is becoming more popular day by day. In this tutorial, we will describe types of face recognition, building a face Identification system, real-time face recognition, and future directions. So, let's dive deep into it.

Face recognition entails the automated identification and authentication of individuals based on their unique facial features. Face recognition is used in several fields, such as security, biometrics, and human-computer interaction. We will describe some of them below: 


Security

Access Control: Face recognition is used for access control. It enhances security by replacing traditional methods like keys or access cards, providing convenient and secure access to secure areas.

Surveillance: Face recognition is widely used in the surveillance sector.  Vital for law enforcement and businesses, it identifies and tracks individuals in crowded places, bolstering public safety and security.

Criminal Identification: Law enforcement agencies employ it to match suspects with criminal databases, aiding in offender identification and apprehension.


Biometrics:

Identity Verification: In our daily life, We use it for unlocking our smartphones, accessing bank accounts, and verifying identities during online transactions.

Passport and Visa Verification: Enhances border security by verifying passport and visa applicants' authenticity, thwarting identity fraud.

Healthcare: Ensuring patient identification, safeguarding medical records, and ensuring treatment accuracy using face recognition technology.

The significance of face recognition in real-world strategies is deep, as it not only bolsters security and privacy but also simplifies numerous daily interactions, ultimately shaping the future of technology and human interaction.


Types of Face Recognition

There are mainly two types of face recognition: face verification and face identification.

Face Verification: Facial verification is the process of determining whether someone is who they declare themselves to be. Facial verification is typically used for personal applications, such as unlocking a smartphone or apps, boarding an airplane, authorizing purchases, and other pay.

Face Identification: Facial identification, on the other hand, uses one-to-many matching technology and is more prevalent for use by law enforcement, retailers, schools, casinos, and other large crowd events or centers where there is a need for surveillance for safety reasons. Facial identification software compares an unknown face taken from a photo, video, or surveillance camera to known faces in a database. A "match" or "no match" determination is made, depending on if the facial signature 1 of the individual matches one of the images stored in the database. 

Implementation: You will get the full project code on Google Colab. Let's start.

import imutils
import numpy as np
import cv2
from google.colab.patches import cv2_imshow
from IPython.display import display, Javascript
from google.colab.output import eval_js
from base64 import b64decode

Start web camera

def take_photo(filename='photo.jpg', quality=0.8):
    # Initialize the webcam
    cap = cv2.VideoCapture(0)
    if not cap.isOpened():
        raise Exception("Could not access the webcam. Make sure it's connected and not being used by another application.")
    try:
        # Capture a photo
        ret, frame = cap.read()
        if not ret:
            raise Exception("Failed to capture a photo from the webcam.")
        # Release the webcam
        cap.release()
        # Resize the captured frame if needed
        if quality != 1.0:
            width = int(frame.shape[1] * quality)
            height = int(frame.shape[0] * quality)
            frame = cv2.resize(frame, (width, height))
        # Save the frame as a JPEG image
        cv2.imwrite(filename, frame)
        return filename
    except Exception as e:
        print(f"Error: {str(e)}")
        return None
# Example usage:
# take_photo('captured_photo.jpg', quality=0.8)


Click 'Capture' to make photo using your webcam.

image_file = take_photo()

Read, resize, and display the image.

#image = cv2.imread(image_file, cv2.IMREAD_UNCHANGED)
image = cv2.imread(image_file)
# resize it to have a maximum width of 400 pixels
image = imutils.resize(image, width=400)
(h, w) = image.shape[:2]
print(w,h)
cv2_imshow(image)


Download the pre-trained face detection model, consisting of two files:

  • The network definition (deploy.prototxt)
  • The learned weights (res10_300x300_ssd_iter_140000.caffemodel)
!wget -N https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxt
!wget -N https://raw.githubusercontent.com/opencv/opencv_3rdparty/dnn_samples_face_detector_20170830/res10_300x300_ssd_iter_140000.caffemodel


Load the pre-trained face detection network model from the disk.

print("[INFO] loading model...")
prototxt = 'deploy.prototxt'
model = 'res10_300x300_ssd_iter_140000.caffemodel'
net = cv2.dnn.readNetFromCaffe(prototxt, model)


Use the function to construct an input blob by resizing the image to a fixed 300x300 pixels and then normalizing it.

# resize it to have a maximum width of 400 pixels
image = imutils.resize(image, width=400)
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0))

print("[INFO] computing object detections...")
net.setInput(blob)
detections = net.forward()

Loop over the detections and draw boxes around the detected faces.

for i in range(0, detections.shape[2]):
# extract the confidence (i.e., probability) associated with the prediction
confidence = detections[0, 0, i, 2]
# filter out weak detections by ensuring the `confidence` is
# greater than the minimum confidence threshold
if confidence > 0.5:
# compute the (x, y)-coordinates of the bounding box for the object
box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
(startX, startY, endX, endY) = box.astype("int")
# draw the bounding box of the face along with the associated probability
text = "{:.2f}%".format(confidence * 100)
y = startY - 10 if startY - 10 > 10 else startY + 10
cv2.rectangle(image, (startX, startY), (endX, endY), (0, 0, 255), 2)
cv2.putText(image, text, (startX, y),
cv2.FONT_HERSHEY_SIMPLEX, 0.45, (0, 0, 255), 2)


Show the resulting image.

cv2_imshow(image)

Challenges and Considerations

Illumination Variation: Illumination variation is one of the primary technical challenges in face recognition. This makes it challenging for face recognition systems to identify individuals in different lighting environments.

Pose Changes:  Pose change is a significant challenge in face recognition. When the face is captured, it can be rotated and turned away from the camera, making face recognition more complex. 

Occlusions: Occlusions occur when other objects disrupt them, such as a hand, glass, or other object. 

 

Ethical Considerations

Face recognition raises privacy concerns. This can be used for mass surveillance, tracking individuals without their consent, and infringing on personal privacy rights. Face recognition can be used in the wrong way by law enforcement agencies.


Real-Time Face Recognition

Real-time face recognition is a technology that identifies or verifies individuals in a video stream or live camera feed in real time. It finds applications in security, access control, surveillance, and many other fields.

Future Directions and Advancements

In computer vision, face recognition is a trending topic. in Recent advancements in face recognition include privacy-preserving techniques, emotion recognition, age estimation, and 3D face recognition. These developments encourage further exploration in these areas.

Practical Applications

Real-time face recognition has practical applications in security, access control, surveillance, retail, healthcare, automotive, and entertainment industries, promising improved efficiency and security in various domains.

Face recognition is a wide area of machine vision, It cannot possibly be covered in a single tutorial. In this tutorial, we try to cover basic face recognition, types of face recognition, and an implementation part. For more learning, you can follow this.