使用YOLOv4模型实现物体识别

    科技2025-11-18  11

    模型及相关下载

    链接: 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)
    Processed: 0.009, SQL: 8