OpenVINO + OpenCV實現(xiàn)車輛檢測與道路分割
轉(zhuǎn)載:OpenCV學堂
模型介紹
OpenVINO支持道路分割與車輛檢測,預訓練模型分別為:
- road-segmentation-adas-0001- vehicle-detection-adas-0002
其中道路分割模型的輸出四個分類,格式如下:
BG, road, curb, mark, 輸出格式[NCHW]=[1x4x512x896]車輛檢測模型基于SSD MobileNetv1實現(xiàn),輸出格式為:
NCHW = [1x1xNx7],其中N表示檢測到boxes數(shù)目代碼演示
01
道路分割模型加載與推理
首先加載道路分割模型,代碼如下:
1#?道路分割
2net?=?ie.read_network(model=model_xml,?weights=model_bin)
3input_blob?=?next(iter(net.input_info))
4out_blob?=?next(iter(net.outputs))
5
6n,?c,?h,?w?=?net.input_info[input_blob].input_data.shape
7print(n,?c,?h,?w)
8
9cap?=?cv.VideoCapture("D:/images/video/project_video.mp4")
10exec_net?=?ie.load_network(network=net,?device_name="CPU")推理與解析
1#?推理道路分割2image?=?cv.resize(frame,?(w,?h))
3image?=?image.transpose(2,?0,?1)
4res?=?exec_net.infer(inputs={input_blob:?[image]})
5
6#?解析道路分割結(jié)果
7res?=?res[out_blob]
8res?=?np.squeeze(res,?0)
9res?=?res.transpose(1,?2,?0)
10res?=?np.argmax(res,?2)
11print(res.shape)
12hh,?ww?=?res.shape
13mask?=?np.zeros((hh,?ww,?3),?dtype=np.uint8)
14mask[np.where(res?>?0)]?=?(0,?255,?255)
15mask[np.where(res?>?1)]?=?(255,?0,?255)
16mask?=?cv.resize(mask,?(frame.shape[1],?frame.shape[0]))
17result?=?cv.addWeighted(frame,?0.5,?mask,?0.5,?0)
02
車輛檢測模型加載與推理解析
加載車輛檢測模型,推理與解析SSD輸出結(jié)果的代碼如下:
1#?車輛檢測
2vnet?=?ie.read_network(model=vehicel_xml,?weights=vehicel_bin)
3vehicle_input_blob?=?next(iter(vnet.input_info))
4vehicle_out_blob?=?next(iter(vnet.outputs))
5
6vn,?vc,?vh,?vw?=?vnet.input_info[vehicle_input_blob].input_data.shape
7print(n,?c,?h,?w)
8vehicle_exec_net?=?ie.load_network(network=vnet,?device_name="CPU")
9
10#?車輛檢測
11inf_start?=?time.time()
12image?=?cv.resize(frame,?(vw,?vh))
13image?=?image.transpose(2,?0,?1)
14vec_res?=?vehicle_exec_net.infer(inputs={vehicle_input_blob:[image]})
15
16#?解析車輛檢測結(jié)果
17ih,?iw,?ic?=?frame.shape
18vec_res?=?vec_res[vehicle_out_blob]
19for?obj?in?vec_res[0][0]:
20????if?obj[2]?>?0.5:
21????????xmin?=?int(obj[3]?*?iw)
22????????ymin?=?int(obj[4]?*?ih)
23????????xmax?=?int(obj[5]?*?iw)
24????????ymax?=?int(obj[6]?*?ih)
25????????cv.rectangle(frame,?(xmin,?ymin),?(xmax,?ymax),?(0,?0,?255),?2,?8)
26????????cv.putText(frame,?str(obj[2]),?(xmin,?ymin),?cv.FONT_HERSHEY_PLAIN,?1.0,?(0,?0,?255),?1)運行結(jié)果如下:

視頻文件
評論
圖片
表情
