模型及相关下载
链接: https://pan.baidu.com/s/1J5XH4SYCn8xYeCoAHc17Hw 密码: g5p4
啰嗦
识别是识别,速度不是很理想。detect 0.7s前后
代码
import cv2 as cv
import time
'''
OpenCV4.1.2新增的cv2.dnn_DetectionModel
最新版本OpenCV4.1.2,针对深度神经网络模块,提供了三个类,通过它们,自动实现输入图像预处理与后处理,直接输出检测结果,支持图像分类、对象检测、图像分割三种常见的视觉常见任务
cv2.dnn_ClassificationModel
cv2.dnn_DetectionModel
cv2.dnn_SegmentationModel
'''
net = cv.dnn_DetectionModel('yolov4.cfg', 'yolov4.weights')
# 输入图像大小 608 会慢不少
net.setInputSize(320, 320)
net.setInputScale(1.0 / 255)
# 指示交换第一个和最后一个通道的标志。
net.setInputSwapRB(True)
frame = cv.imread('golden_retriever.jpg')
with open('coco.names', 'rt') as f:
names = f.read().rstrip('\n').split('\n')
print(names)
startTime = time.time()
'''
detect
Parameters
[in] frame 图像
[out] classIds 结果检测中的类索引。
[out] confidences 一组相应的置信度。
[out] boxes 一组边界框。
[in] confThreshold 用于根据置信度筛选框的阈值。
[in] nmsThreshold 非最大抑制中使用的阈值。
return 分别是classes coco.names分类下标,confidences 分数,boxes 在图像上的位置
'''
classes, confidences, boxes = net.detect(frame, confThreshold=0.1, nmsThreshold=0.4)
endTime = time.time()
print("Time: {}s".format(endTime-startTime))
# .flatten()降维
for classId, confidence, box in zip(classes.flatten(), confidences.flatten(), boxes):
print(classId,confidences,box)
label = '%.2f' % confidence
label = '%s: %s' % (names[classId], label)
# 获取待绘制文本框的大小,以方便放置文本框
labelSize, baseLine = cv.getTextSize(label, cv.FONT_HERSHEY_SIMPLEX, 0.5, 1)
left, top, width, height = box
top = max(top, labelSize[1])
cv.rectangle(frame, box, color=(0, 255, 0), thickness=3)
cv.rectangle(frame, (left, top - labelSize[1]), (left + labelSize[0], top + baseLine), (255, 255, 255), cv.FILLED)
cv.putText(frame, label, (left, top), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0))
cv.imshow('out', frame)
cv.waitKey(0)