SSD目标检测算法的python调用接口改写与封装,视频检测一步到位,只专注于便捷与高效。
版权声明:本文为博主原创文章,未经博主允许不得转载。
前因
之前都是使用C++进行调用SSD,最近因项目需要,整个工程都转用Python语言进行开发,因此尝试使用Python语言调用SSD。
在正常编译完caffe-ssd后,在工程的/example目录下,有官方给出的使用python调用ssd的例子。
需要下载安装Jupyter notebook才可正常阅读ipynb文件,点击安装Jupyter
使用Jupyter打开ssd_detect.ipynb,
在这个例子中,图片显示与绘框操作使用的是matplot库,图片格式通道转换使用的是caffe中的transformer类。经过测试,transformer类的转换速度较慢,会影响SSD的对连续帧的检测速度,而opencv对于图片的处理比较简易且高效,因此可将所有对图片的操作转为opencv。
cv2.imread()接口读图像,读进来是BGR格式,数据范围在0~255
caffe.io.load_image()读进来是RGB格式,数据范围在0~1(float)
在测试网络的时候,是先给net.blobs[‘data’].data[…]赋值,加载数据,然后进行net forward操作,最终输出结果。
caffe输入图片格式要求为H×W×K,BGR格式,数据范围0~255
后果
了解完来龙去脉后,使用opencv函数将原来程序中的图片操作全部代替,并且将网络的初始化与网络的测试分别进行封装,写成一个类,方便后续其他程序调用。
附上代码:
接下来可以进行简单测试