【深度学习】基于SSD的实时视频目标检测


这一期我们基于SSD图像目标检测,做一个实时的视频目标检测;

一、前期准备:

这里需要看一下我的上一篇博客哦,里面讲了如何搭建一个基于SSD的目标检测器(处理图像),包括依赖库的安装、源码的下载和写一个demo_test.py来实现图像中的目标检测——传送门:
【手把手教学】只需三步搭建自己的目标检测器(基于SSD算法)

如果已经完成了这一步,效果应该是这样的:
在这里插入图片描述此时已经能够处理图片了;

二、视频目标检测的实现:

我们创建一个detector.py程序;
在这里插入图片描述

代码:

# detector.py
import cv2
from demo_test import process_image
from notebooks import visualization


class Detertor(object):

    def __init__(self, camera_index=0):

        self.camera_index = camera_index

    def Catch_Video(self, window_name='Detertor'):

        cv2.namedWindow(window_name)

        cap = cv2.VideoCapture(self.camera_index)

        while cap.isOpened():

            catch, frame = cap.read()  # 读取每一帧图片

            if not catch:

                raise Exception('Check if the camera if on.')

                break

            rclasses, rscores, rbboxes = process_image(frame)  # 这里传入图片

            labeled_img = visualization.bboxes_draw_on_img(
                frame, rclasses, rscores, rbboxes, visualization.colors_plasma)

            cv2.imshow(window_name, labeled_img)

            c = cv2.waitKey(10)
            if c & 0xFF == ord('q'):
                # 按q退出
                break

            if cv2.getWindowProperty(window_name, cv2.WND_PROP_AUTOSIZE) < 1:
                # 点x退出
                break                
        # 释放摄像头

        cap.release()

        cv2.destroyAllWindows()

if __name__ == "__main__":    
    detect = Detertor()    
    detect.Catch_Video()

这里定义了一个Detertor类,通过Catch_Video方法来实现调用摄像头并实现实时视频的目标检测;

代码解析:

  1. 通过 cv2.VideoCapture 获取摄像头输入,其中camera_index参数默认为0,是指默认为前置摄像头,USB摄像头一般为1或2;
  2. visualization 是balance大佬写的,直接调用即可,传入视频的每一帧图像,返回预测的回归框和物体类别;

三、效果展示:

在这里插入图片描述

可以检测共20个分类(家里没有飞机,就不展示了哈哈哈)
在这里插入图片描述

到这里就结束啦,如果对你有帮助的话,记得点赞收藏加关注哦~
在这里插入图片描述

发布了58 篇原创文章 · 获赞 117 · 访问量 6806

猜你喜欢

转载自blog.csdn.net/weixin_44936889/article/details/103764447
今日推荐