基于SSD的实时图像or视频目标检测
这一期我们基于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方法来实现调用摄像头并实现实时视频的目标检测;
代码解析:
- 通过 cv2.VideoCapture 获取摄像头输入,其中camera_index参数默认为0,是指默认为前置摄像头,USB摄像头一般为1或2;
- visualization 是balance大佬写的,直接调用即可,传入视频的每一帧图像,返回预测的回归框和物体类别;
三、效果展示:
可以检测共20个分类(家里没有飞机,就不展示了哈哈哈)
到这里就结束啦,如果对你有帮助的话,记得点赞收藏加关注哦~