Bird
Raised Fist0
Computer Visionml~5 mins

DNN-based face detection in Computer Vision

Choose your learning style10 modes available
Introduction

We use deep neural networks (DNN) to find faces in pictures because they can learn to spot faces very well, even if faces look different or are in tricky positions.

When you want to unlock your phone by recognizing your face.
When a camera needs to focus automatically on people's faces.
When you want to count how many people are in a photo or video.
When you want to blur faces in photos to protect privacy.
When you want to add fun filters that stick to your face in apps.
Syntax
Computer Vision
model = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)
blob = cv2.dnn.blobFromImage(image, scalefactor, size, mean)
model.setInput(blob)
detections = model.forward()

This example uses OpenCV's DNN module with a Caffe model for face detection.

The 'blobFromImage' prepares the image for the model by resizing and normalizing it.

Examples
Load the face detection model files.
Computer Vision
model = cv2.dnn.readNetFromCaffe('deploy.prototxt', 'res10_300x300_ssd_iter_140000.caffemodel')
Create a blob from the input image with size 300x300 and mean subtraction for normalization.
Computer Vision
blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300), (104.0, 177.0, 123.0))
Run the model on the prepared image to get face detections.
Computer Vision
model.setInput(blob)
detections = model.forward()
Sample Model

This program loads a DNN face detector, reads an image, detects faces with confidence above 0.5, and prints their locations.

Computer Vision
import cv2

# Load the pre-trained face detection model from OpenCV's DNN module
prototxt_path = 'deploy.prototxt'
model_path = 'res10_300x300_ssd_iter_140000.caffemodel'
model = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)

# Read an image from file
image = cv2.imread('face.jpg')
(h, w) = image.shape[:2]

# Prepare the image for the model
blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300), (104.0, 177.0, 123.0))
model.setInput(blob)

# Run forward pass to get detections
detections = model.forward()

# Loop over detections and print confidence and bounding box
for i in range(detections.shape[2]):
    confidence = detections[0, 0, i, 2]
    if confidence > 0.5:
        box = detections[0, 0, i, 3:7] * [w, h, w, h]
        (startX, startY, endX, endY) = box.astype('int')
        print(f'Face {i+1}: Confidence={confidence:.2f}, Box=({startX}, {startY}), ({endX}, {endY})')
OutputSuccess
Important Notes

Make sure the model files ('deploy.prototxt' and '.caffemodel') are downloaded and in the working folder.

The confidence threshold (0.5 here) can be adjusted to detect more or fewer faces.

DNN-based detection works well even if faces are turned or partly covered.

Summary

DNN-based face detection uses a trained neural network to find faces in images.

It is useful for many real-life tasks like unlocking phones or adding filters.

OpenCV's DNN module makes it easy to load models and detect faces with just a few lines of code.

Practice

(1/5)
1. What is the main purpose of using a DNN-based face detection model?
easy
A. To increase the size of an image
B. To find faces in images automatically
C. To compress images for storage
D. To change the color of an image

Solution

  1. Step 1: Understand the goal of face detection

    Face detection means finding where faces are in pictures or videos.
  2. Step 2: Recognize what DNN-based models do

    DNN models learn patterns to automatically locate faces without manual rules.
  3. Final Answer:

    To find faces in images automatically -> Option B
  4. Quick Check:

    Face detection = find faces [OK]
Hint: Face detection means locating faces in images [OK]
Common Mistakes:
  • Confusing detection with image editing
  • Thinking it changes image colors
  • Mixing detection with compression
2. Which OpenCV function is used to load a pre-trained DNN face detection model?
easy
A. cv2.dnn.readNet()
B. cv2.imread()
C. cv2.resize()
D. cv2.cvtColor()

Solution

  1. Step 1: Identify the function for loading DNN models

    OpenCV's DNN module uses cv2.dnn.readNet() to load models from files.
  2. Step 2: Differentiate from other functions

    cv2.imread() loads images, cv2.resize() changes size, cv2.cvtColor() changes color space.
  3. Final Answer:

    cv2.dnn.readNet() -> Option A
  4. Quick Check:

    Load DNN model = cv2.dnn.readNet() [OK]
Hint: Use cv2.dnn.readNet() to load DNN models [OK]
Common Mistakes:
  • Using cv2.imread() to load models
  • Confusing image functions with model loading
  • Trying to resize models with cv2.resize()
3. Given this code snippet, what will be the output type of detections?
net = cv2.dnn.readNet('model.caffemodel', 'deploy.prototxt')
blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300), (104, 177, 123))
net.setInput(blob)
detections = net.forward()
medium
A. A list of bounding box coordinates
B. A single integer count of faces
C. A string describing detected faces
D. A NumPy array with detection data

Solution

  1. Step 1: Understand net.forward() output

    net.forward() returns a NumPy array containing detection results with scores and box info.
  2. Step 2: Differentiate output types

    It is not a list, integer, or string but a multi-dimensional array with detection details.
  3. Final Answer:

    A NumPy array with detection data -> Option D
  4. Quick Check:

    net.forward() output = NumPy array [OK]
Hint: net.forward() returns a NumPy array of detections [OK]
Common Mistakes:
  • Thinking output is a list or count
  • Expecting a string description
  • Confusing output with input image
4. You run this code but get no faces detected. What is the likely error?
blob = cv2.dnn.blobFromImage(image, 1.0, (224, 224), (104, 177, 123))
net.setInput(blob)
detections = net.forward()
What should you fix?
medium
A. Change input size to (300, 300) to match model requirements
B. Remove mean subtraction values from blobFromImage
C. Use cv2.imread() instead of blobFromImage
D. Call net.forward() before setInput()

Solution

  1. Step 1: Check model input size requirements

    Many DNN face detectors expect input size (300, 300). Using (224, 224) causes mismatch and no detection.
  2. Step 2: Correct the input size in blobFromImage

    Changing to (300, 300) matches model and enables detection.
  3. Final Answer:

    Change input size to (300, 300) to match model requirements -> Option A
  4. Quick Check:

    Input size must match model = (300, 300) [OK]
Hint: Match blob size to model input size [OK]
Common Mistakes:
  • Using wrong input size for the model
  • Calling net.forward() before setInput()
  • Removing mean subtraction incorrectly
5. You want to improve face detection accuracy on images with multiple faces at different sizes. Which approach helps most?
hard
A. Reduce the input image size to speed up detection
B. Increase the learning rate during training
C. Use image pyramid to detect faces at multiple scales
D. Remove mean subtraction from preprocessing

Solution

  1. Step 1: Understand multi-scale detection challenge

    Faces appear at different sizes; detecting all requires checking multiple scales.
  2. Step 2: Use image pyramid technique

    Image pyramid resizes image multiple times to detect faces at various sizes, improving accuracy.
  3. Final Answer:

    Use image pyramid to detect faces at multiple scales -> Option C
  4. Quick Check:

    Multi-scale detection = image pyramid [OK]
Hint: Use image pyramid for faces at different sizes [OK]
Common Mistakes:
  • Thinking higher learning rate fixes scale issues
  • Reducing image size loses small faces
  • Skipping mean subtraction harms accuracy
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard