python import cv2 # Load YOLOv3 weights and configuration files net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg") # Load object classes classes = [] with open("coco.names", "r") as f: classes = [line.strip() for line in f.readlines()] # Set input and output layers for the network layer_names = net.getLayerNames() output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()] # Load image img = cv2.imread("image.jpg") # Resize image to fit the network input size img = cv2.resize(img, None, fx=0.4, fy=0.4) height, width, channels = img.shape # Convert image to blob format blob = cv2.dnn.blobFromImage(img, 0.00392, (416, 416), (0, 0, 0), True, crop=False) # Set input for the network net.setInput(blob) # Run forward pass through the network outs = net.forward(output_layers) # Extract bounding boxes, confidence scores and class IDs boxes = [] confidences = [] class_ids = [] for out in outs: for detection in out: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] if confidence > 0.5: center_x = int(detection[0] * width) center_y = int(detection[1] * height) w = int(detection[2] * width) h = int(detection[3] * height) x = int(center_x - w / 2) y = int(center_y - h / 2) boxes.append([x, y, w, h]) confidences.append(float(confidence)) class_ids.append(class_id) # Apply non-maximum suppression to remove overlapping boxes indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4) # Draw bounding boxes and object labels on the image font = cv2.FONT_HERSHEY_PLN for i in range(len(boxes)): if i in indexes: x, y, w, h = boxes[i] label = str(classes[class_ids[i]]) color = (0, 255, 0) cv2.rectangle(img, (x, y), (x + w, y + h), color, 2) cv2.putText(img, label, (x, y - 5), font, 1, color, 2) # Display the image cv2.imshow("Image", img) cv2.waitKey(0) cv2.destroyAllWindows()在这个代码示例中,我们首先加载了YOLOv3的权重和配置文件。然后,我们加载了类别标签文件,并设置了网络的输入和输出层。接下来,我们加载了要检测的图像,并将其缩放到适合网络输入大小的尺寸。然后,我们将图像转换为blob格式,并将其设置为网络的输入。接下来,我们运行了网络的前向传递,并从输出中提取了边界框、置信度分数和类别ID。最后,我们应用了非最大值抑制来消除重叠的边界框,并在图像上绘制了边界框和对象标签。 总之,使用Python和OpenCV库实现YOLOv3算法并不难。通过使用这个算法,我们可以快速准确地检测出多个对象,并在图像或视频中进行分类和跟踪。如果你对计算机视觉和目标检测感兴趣,那么YOLOv3算法是一个值得学习的重要工具。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/130913.html
摘要:近日,来自华盛顿大学的和提出的版本。而那些评分较高的区域就可以视为检测结果。此外,相对于其它目标检测方法,我们使用了完全不同的方法。从图中可以看出准确率高,速度也快。对于的图像,可以达到的检测速度,获得的性能,与的准确率相当但是速度快倍。 近日,来自华盛顿大学的 Joseph Redmon 和 Ali Farhadi 提出 YOLO 的版本 YOLOv3。通过在 YOLO 中加入设计细节的变...
摘要:来自原作者,快如闪电,可称目标检测之光。实现教程去年月就出现了,实现一直零零星星。这份实现,支持用自己的数据训练模型。现在可以跑脚本了来自原作者拿自己的数据集训练快速训练这个就是给大家一个粗略的感受,感受的训练过程到底是怎样的。 来自YOLOv3原作者YOLOv3,快如闪电,可称目标检测之光。PyTorch实现教程去年4月就出现了,TensorFlow实现一直零零星星。现在,有位热心公益的程...
阅读 2923·2023-04-26 01:52
阅读 3449·2021-09-04 16:40
阅读 3615·2021-08-31 09:41
阅读 1706·2021-08-09 13:41
阅读 471·2019-08-30 15:54
阅读 2909·2019-08-30 11:22
阅读 1585·2019-08-30 10:52
阅读 931·2019-08-29 13:24