python yolo车辆目标检测
时间: 2025-01-08 07:42:08 浏览: 3
### 使用Python和YOLO实现车辆目标检测
#### 创建合适的开发环境
为了确保能够顺利运行YOLO模型,建议先建立一个新的Conda虚拟环境来管理所需的库文件。通过命令`conda create -n yolo3d python=3.8 numpy`可以创建一个名为yolo3d的环境,并安装Python 3.8以及NumPy作为基础依赖包[^3]。
#### 下载预训练权重与配置文件
YOLO框架通常会提供已经过大量数据集训练好的权重文件(weights),这些可以直接用于测试图片中的物体识别任务。同时还需要下载对应的网络结构描述文件(cfg),类别名称列表(names file)等资源。
#### 加载并初始化YOLO模型
利用OpenCV读取图像或视频流,在此基础上加载Darknet风格的YOLOv3或其他版本的模型。下面是一段简单的代码片段展示如何设置YOLO:
```python
import cv2
import numpy as np
def load_yolo():
net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg") # 载入模型参数和配置
classes = []
with open("coco.names", "r") as f:
classes = [line.strip() for line in f.readlines()]
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
colors = np.random.uniform(0, 255, size=(len(classes), 3))
return net, classes, colors, output_layers
```
这段代码实现了YOLO模型及其辅助变量(如颜色表、输出层索引)的加载过程[^2]。
#### 执行预测操作
当准备好上述组件之后就可以开始处理输入源了——无论是静态照片还是实时摄像机画面都可以被送入到YOLO当中去分析是否存在汽车类别的实体。对于每一帧图像都会调用一次前向传播函数从而获得可能存在的边界框位置信息以及其他属性值。
```python
img = cv2.imread("image.jpg")
height, width, channels = img.shape
blob = cv2.dnn.blobFromImage(img, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(output_layers)
class_ids = []
confidences = []
boxes = []
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5 and classes[class_id] == 'car': # 只保留置信度大于0.5且属于'car'类别的结果
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)
indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
font = cv2.FONT_HERSHEY_PLAIN
for i in range(len(boxes)):
if i in indexes:
x, y, w, h = boxes[i]
label = str(classes[class_ids[i]])
color = colors[i]
cv2.rectangle(img, (x, y), (x + w, y + h), color, 2)
cv2.putText(img, label, (x, y + 30), font, 3, color, 3)
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
此部分展示了完整的推理流程,包括但不限于构建Blob对象、执行神经网络计算、解析输出特征图得到候选区域提案、应用非极大抑制(NMS)去除冗余矩形框最后绘制标注后的可视化效果。
阅读全文