想实时检测视频中感兴趣的物体,并通过视频的方式展现出来吗?
如果答案是“想”,那么请往下看
前文讲过,如何使用PaddleDetection训练自己的数据集
那么如何将最后的检测效果以视频的形式展现出来呢?
解决思路:将视频按帧抽取存为图片,输入自己训练好的目标检测模型进行预测,将得到的物体预测框画在图片上,保存图片,最后将图片合成视频。
本文主要参考了博客https://blog.csdn.net/yzl819819/article/details/104743106
以及视频人脸检测项目https://aistudio.baidu.com/aistudio/projectdetail/757390
1.首先导出训练好的模型及训练参数,使用PaddleDetection的export_model.py
# 导出模型
!python PaddleDetection/tools/export_model.py -c PaddleDetection/configs/yolov4/yolov4_cspdarknet_voc.yml -o weights=output/yolov4_cspdarknet_voc/best_model.pdparams
得到三个文件,如图
2.将PaddleDetection中的infer.py封装为一个类inference(),用于预测单张图片
import numpy as np
import time
import cv2
import paddle.fluid as fluid
from PIL import Image
from PIL import ImageDraw
# 画图展示目标物体边界框
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.image import imread
import math
# # 定义画矩形框的程序
# def draw_rectangle(currentAxis,bbox, edgecolor = 'red', facecolor = 'yellow', fill=False, linestyle='-'):
# # currentAxis,坐标轴,通过plt.gca()获取
# # bbox,边界框,包含四个数值的list, [x1, y1, x2, y2]
# # edgecolor,边框线条颜色
# # facecolor,填充颜色
# # fill, 是否填充
# # linestype,边框线型
# # patches.Rectangle需要传入左上角坐标、矩形区域的宽度、高度等参数
# rect=patches.Rectangle((bbox[0], bbox[1]), bbox[2]-bbox[0]+1, bbox[3]-bbox[1]+1, linewidth=2,
# edgecolor=edgecolor,facecolor=facecolor,fill=fill, linestyle=linestyle)
# currentAxis.add_patch(rect)
train_parameters = {
"label_dict": {
0:"HS",1:"DS",2:"B",3:"SMac",4:"TelP",5:"HSN",6:"DSN",7:"Number of TelP",8:"Unclear"},
"use_gpu": True,
"anchors": [[12, 16], [19, 36], [40, 28], [36, 75], [76, 55],[72, 146], [142, 110], [192, 243], [459, 401]],
"a