Step-by-Step Guide to Real-Time Face Detection using SSD and Kivy with OpenCV and Python Tutorial

Posted by


In this tutorial, we will be covering real-time face detection using Single Shot Multibox Detector (SSD) with Kivy, an open-source Python library for developing multi-touch applications. We will also be using OpenCV, a powerful computer vision library, to process the video feed and detect faces.

Before we start, make sure you have the necessary dependencies installed. You can install OpenCV and Kivy using pip:

pip install opencv-python
pip install kivy

Next, download the SSD model from the OpenCV GitHub repository. We will be using the pre-trained Caffe model for face detection. You can download it from the following link:

https://github.com/opencv/opencv/tree/master/samples/dnn/face_detector

Once you have downloaded the model files, create a new Python script and import the necessary libraries:

import cv2
import numpy as np
from kivy.app import App
from kivy.uix.image import Image
from kivy.uix.boxlayout import BoxLayout
from kivy.graphics.texture import Texture

Next, load the SSD model using OpenCV’s DNN module:

modelFile = "deploy.prototxt"
weightsFile = "res10_300x300_ssd_iter_140000.caffemodel"
net = cv2.dnn.readNetFromCaffe(modelFile, weightsFile)

Now, let’s create a Kivy app with a camera feed and a box layout to display the detected faces in real-time:

class FaceDetectionApp(App):
    def build(self):
        self.layout = BoxLayout(orientation='vertical')
        self.cam = cv2.VideoCapture(0)
        self.img = Image()
        self.layout.add_widget(self.img)
        return self.layout

Next, let’s define a function to process the video feed and detect faces using the SSD model:

def process_frame(self, frame):
    blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0))
    net.setInput(blob)
    detections = net.forward()

    (h, w) = frame.shape[:2]

    for i in range(0, detections.shape[2]):
        confidence = detections[0, 0, i, 2]
        if confidence < 0.5:
            continue

        box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
        (startX, startY, endX, endY) = box.astype("int")

        cv2.rectangle(frame, (startX, startY), (endX, endY), (0, 255, 0), 2)

    texture = Texture.create(size=(frame.shape[1], frame.shape[0]))
    texture.blit_buffer(frame.tobytes(order='C'), colorfmt='bgr', bufferfmt='ubyte')
    texture.flip_vertical()
    self.img.texture = texture

Finally, let’s run the Kivy app and start processing the video feed:

if __name__ == '__main__':
    FaceDetectionApp().run()

That’s it! You now have a real-time face detection application using SSD with Kivy and OpenCV. Feel free to customize the code and experiment with different models for detecting other objects as well. Happy coding!

0 0 votes
Article Rating

Leave a Reply

1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@pallavimenon4229
7 days ago

Awesome 👏 🎉

1
0
Would love your thoughts, please comment.x
()
x