openvino开发实战教程-对象检测ssd

对象检测:分类信息+位置信息+置信度
数据集:Paccsl VOC,COCO

SSD对象检测:
输入数据:BCHW
N:图像数目
C:输入图像通道数目
输出图像:1X1XNX7
N:检测到的对象数目
7:image_id,label,conf(置信度),x_min,y_min,x_max,y_max

import cv2
import os, sys
import numpy as np
from matplotlib import image
os.chdir(sys.path[0])

from openvino.inference_engine import IECore
def ssd_detect_demo():
#启动
ie = IECore()
for device in ie.available_devices:
print(device)
#标签
with open('object_detection_classes_coco.txt') as f:
labels = [line.strip() for line in f.readlines()]

#模型结构
model_xml = 'ssdv2_graph.xml'
#模型权重
model_bin = 'ssdv2_graph.bin'

#载入模型
net = ie.read_network(model = model_xml, weights = model_bin)
#输入输出
input_blob = next(iter(net.inputs))
out_blob = next(iter(net.outputs))

n,c,h,w = net.inputs[input_blob].shape
print(n,c,h,w)
#读取图像
src = cv2.imread("tangyuan.jpg")
image = cv2.resize(src,(w,h))
image = image.transpose(2, 0, 1)#将h,w,c转化为c,h,w
#创建可执行网络
exec_net = ie.load_network(network = net,device_name = "CPU")

#推理
res = exec_net.infer(inputs = {input_blob:[image]})
ih,iw,ic = src.shape
res = res[out_blob]
for obj in res[0][0]:
    if obj[2] >0.5:
        index = int(obj[1])-1
        xmin = int(obj[3] * iw)
        ymin = int(obj[4] * ih)
        xmax = int(obj[5] * iw)
        ymax = int(obj[6] * ih)
        print(labels[index])
        cv2.rectangle(src,(xmin,ymin),(xmax,ymax),(0,255,255),2,8)
        cv2.putText(src,labels[index]+str(obj[2]),(xmin,ymin),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,255), 1, 8)
cv2.imshow("SSD",src)
cv2.waitKey(0)

if name == "main":
ssd_detect_demo()

posted @ 2022-02-11 20:20  自信射手  阅读(180)  评论(0)    收藏  举报