import cv2 import numpy as np # Load YOLOv3 model net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg") # Load class names classes = [] with open("coco.names", "r") as f: classes = [line.strip() for line in f.readlines()] # Set input image size input_size = (416, 416) # Load input image image = cv2.imread("input.jpg") # Resize image to input size resized_image = cv2.resize(image, input_size) # Normalize image normalized_image = resized_image / 255.0 # Convert image to blob blob = cv2.dnn.blobFromImage(normalized_image, 1/255.0, input_size, (0,0,0), swapRB=True, crop=False) # Set input blob to the network net.setInput(blob) # Run forward pass to get output of the network output_layers_names = net.getUnconnectedOutLayersNames() outputs = net.forward(output_layers_names) # Extract bounding boxes, class ids and confidence scores boxes = [] confidences = [] class_ids = [] for output in outputs: for detection in output: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] if confidence > 0.5: center_x = int(detection[0] * input_size[0]) center_y = int(detection[1] * input_size[1]) width = int(detection[2*续* * input_size[0]) height = int(detection[3] * input_size[1]) left = int(center_x - width / 2) top = int(center_y - height / 2) boxes.append([left, top, width, height]) confidences.append(float(confidence)) class_ids.append(class_id) # Apply non-maximum suppression to remove overlapping boxes indices = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4) # Draw bounding boxes and labels on the image for i in indices: i = i[0] box = boxes[i] left = box[0] top = box[1] width = box[2] height = box[3] label = classes[class_ids[i]] confidence = confidences[i] color = (0, 255, 0) cv2.rectangle(image, (left, top), (left + width, top + height), color, 2) text = f"{label}: {confidence:.2f}" cv2.putText(image, text, (left, top - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2) # Show the result cv2.imshow("YOLOv3", image) cv2.waitKey(0) cv2.destroyAllWindows()在上述代码中,首先使用OpenCV的dnn模块加载预训练的YOLOv3模型。然后,读取类别名称列表和输入图像,并将图像调整为网络的输入大小。接下来,将图像归一化并转换为blob格式,作为网络的输入。运行前向传递以获取网络的输出,并从输出中提取边界框、类别ID和置信度分数。使用非最大抑制(Non-Maximum Suppression,NMS)算法去除重叠的边界框,并在图像上绘制检测结果。 ## 结论 本文介绍了YOLO的基本原理和Python编程技术,以及如何使用YOLO进行目标检测。需要注意的是,在使用YOLO进行目标检测时,需要考虑许多参数和选项,例如输入图像大小、置信度阈值、非最大抑制的参数等。通过调整这些参数,可以获得更好的检测结果。此外,YOLO还可以进行实时目标检测和视频目标检测,这些应用也值得进一步研究和探索。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/130683.html
摘要:摘要本文介绍使用和完成视频流目标检测,代码解释详细,附源码,上手快。将应用于视频流对象检测首先打开文件并插入以下代码同样,首先从导入相关数据包和命令行参数开始。 摘要: 本文介绍使用opencv和yolo完成视频流目标检测,代码解释详细,附源码,上手快。 在上一节内容中,介绍了如何将YOLO应用于图像目标检测中,那么在学会检测单张图像后,我们也可以利用YOLO算法实现视频流中的目标检...
摘要:近几年来,目标检测算法取得了很大的突破。本文主要讲述算法的原理,特别是算法的训练与预测中详细细节,最后将给出如何使用实现算法。但是结合卷积运算的特点,我们可以使用实现更高效的滑动窗口方法。这其实是算法的思路。下面将详细介绍算法的设计理念。 1、前言当我们谈起计算机视觉时,首先想到的就是图像分类,没错,图像分类是计算机视觉最基本的任务之一,但是在图像分类的基础上,还有更复杂和有意思的任务,如目...
摘要:工作原理以前的检测系统通过重复利用分类器和定位器来实现目标识别。修改检测阈值缺省情况下,只显示信心大于的对象。用法如下这个,呵呵,不完美把白马识别成绵羊了,把黑狗识别成奶牛了,但确实很快。 原标题:YOLO: Real-Time Object Detection英文原文:https://pjreddie.com/darknet/... 强烈推荐(TED视频):https://www....
摘要:工作原理以前的检测系统通过重复利用分类器和定位器来实现目标识别。修改检测阈值缺省情况下,只显示信心大于的对象。用法如下这个,呵呵,不完美把白马识别成绵羊了,把黑狗识别成奶牛了,但确实很快。 原标题:YOLO: Real-Time Object Detection英文原文:https://pjreddie.com/darknet/... 强烈推荐(TED视频):https://www....
阅读 968·2023-04-25 17:51
阅读 2815·2021-11-23 09:51
阅读 1405·2021-11-08 13:21
阅读 2360·2021-09-22 15:14
阅读 1500·2019-08-30 12:48
阅读 1055·2019-08-29 12:44
阅读 1102·2019-08-26 12:21
阅读 1378·2019-08-26 10:47