In this blog, I will explain about real-time face detection and capture using OpenCV on Raspberry Pi.

The pi camera attached with a Raspberry Pi capture frame with 32 FPS and if any face detects in real-time video frame then it will capture and save that frame on Raspberry Pi. I am using a pre-trained Opencv Haar cascade classifier model to detect human faces. Opencv pre-trained face detection model trained on many images and accuracy of the model is also very good. If you want to train your own custom Haar cascade classifier model click here.

Here I am using the Following Hardware components.

  1. Raspberry Pi 4 (4 GB)
  2. 8MP Raspberry Pi Camera Module v2

Install Opencv on Raspberry Pi.

First Update your Raspberry Pi. Type the following command on your Raspberrypi for an update.

sudo apt-get update

Type following command on your Raspberrypi to install all dependencies for OpenCV

sudo apt-get install libhdf5-dev
sudo apt-get install libhdf5-serial-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libjasper-dev
sudo apt-get install libqtgui4
sudo apt-get install libqt4-test

After installing all dependencies Now we can install OpenCV on Raspberry Pi

pip3 install opencv-contrib-python==

After installed Opencv we can check OpenCV successfully installed or not

Type following commands in sequences


Import OpenCV module

import cv2

After Import module if you are not getting any error it means you successfully installed OpenCV

you can check installed OpenCV version Type following  command to check OpenCV version


Type following command for install imutils module for read camera frame

pip3 install imutils

Download Haar cascade classifier model for detect faces.

After Installed all libraries connect your pi camera with your Raspberry Pi
Here my setup


After connecting your camera Run the following code

sudo python3

import cv2
from import VideoStream  
import time

# Haarcascade classifier modle for detect face
face_cascade = cv2.CascadeClassifier('./model/haarcascade_frontalface_default.xml')

# Using Pi Camera
PiCamera = True

# Set initial frame size.
frameSize = (1020, 720)

# Setup video stream
vs = VideoStream(src=0, usePiCamera=PiCamera, resolution=frameSize,framerate=32).start()

# Allow camera to setup.
i = 0

while 1:
    # Read Video steram
    img =
    # Convert frame into grayscale
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # Find faces in frame
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    if len(faces) == 0:
        # render a message on frame with no face detected
        cv2.putText(img, "NO FACE DETECTED", (340, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 4,cv2.LINE_AA)
        # render a message on frame with face detected
        cv2.putText(img, "FACE DETECTED", (340, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 4,cv2.LINE_AA)
        for (x,y,w,h) in faces:
            # Draw rectangle around every detected face
            #roi_gray = gray[y:y+h, x:x+w]
            #roi_color = img[y:y+h, x:x+w]
            # Save the captured image with detected face
            cv2.imwrite(str(i)+'.png', img)
            i = i+1
    # Show result
    k = cv2.waitKey(30) & 0xff
    if k == 27:


Github Repository 

Hope you enjoyed my blog and learned something new 🙂

Post Created 7

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts

Begin typing your search above and press enter to search. Press ESC to cancel.

Back To Top