在这篇博客中,咱们将介绍怎么运用YOLOv5实现车辆辨认。YOLO(You Only Look Once)是一种流行的实时目标检测算法,YOLOv5是其最新版别,功能得到了明显进步。咱们将运用Python写代码,为您展示怎么实现实时车辆检测。

YOLOv5车辆识别:使用Python实现实时车辆检测

YOLOv5车辆识别:使用Python实现实时车辆检测

源码:www.hedaoapp.com/goods/goods…

一、装置必要库

首要,咱们需要装置YOLOv5所需的依靠库。确保您的体系已经装置了Python,然后运转以下命令:

pip install torch torchvision opencv-python

接下来,咱们需要克隆YOLOv5的官方库房,并装置所需的依靠:

git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt

二、下载预练习模型

咱们将运用在COCO数据集上预练习的YOLOv5模型。这儿咱们挑选YOLOv5s,由于它较小,适用于实时检测。您能够在YOLOv5的发布页面找到其他版别的预练习模型。运转以下命令下载YOLOv5s模型:

wget https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt

三、编写车辆辨认代码

咱们首要导入所需的库:

import cv2
import torch
from yolov5.utils.general import non_max_suppression

接下来,咱们界说一个函数来加载模型:

def load_model(weights_path, device):
    model = torch.hub.load('ultralytics/yolov5', 'custom', path_or_model=weights_path)
    model.to(device)
    model.eval()
    return model

现在,咱们将创建一个函数来处理模型的输出:

def process_detections(detections, conf_thres):
    car_detections = []
    for det in detections:
        if det[5] == 2:  # 2对应于COCO数据集中的“汽车”类别
            if det[4] >= conf_thres:
                car_detections.append(det[:4].cpu().numpy().astype(int))
    return car_detections

接下来,咱们界说一个函数用于在图画上制作检测成果:

def draw_detections(image, detections, color=(0, 255, 0), thickness=2):
    for det in detections:
        x1, y1, x2, y2 = det
        cv2.rectangle(image, (x1, y1), (x2, y2), color, thickness)
    return image

最终,咱们编写主程序,从摄像头捕获视频流并进行实时车辆检测:

def main():
    device = torch.device("cuda if torch.cuda.is_available() else "cpu") weights_path = "yolov5s.pt" conf_thres = 0.5
model = load_model(weights_path, device)
cap = cv2.VideoCapture(0)  # 运用摄像头
while True:
    ret, frame = cap.read()
    if not ret:
        break
    # 将图画转换为模型输入格式
    img = torch.from_numpy(frame).permute(2, 0, 1).float() / 255.0
    img = img.unsqueeze(0).to(device)
    # 进行目标检测
    with torch.no_grad():
        pred = model(img)[0]
        pred = non_max_suppression(pred, conf_thres)
    # 提取车辆检测成果
    detections = process_detections(pred[0], conf_thres)
    # 在图画上制作检测成果
    frame = draw_detections(frame, detections)
    # 显示成果
    cv2.imshow("Car Detection", frame)
    # 按'q'键退出
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break
cap.release()
cv2.destroyAllWindows()
if name == "main": 
    main()

现在,您能够运转此代码进行实时车辆检测。摄像头将捕获视频流,YOLOv5将辨认图画中的车辆,并用矩形框标注出来。

YOLOv5还能够辨认其他类型的目标,您能够根据需要调整代码。此外,能够尝试运用其他版别的预练习模型(如YOLOv5m或YOLOv5l)以取得更高的准确性,但可能会下降实时功能。

总归,YOLOv5是一个强壮且实用的目标检测算法,非常适用于实时车辆辨认。经过运用Python和YOLOv5,您能够轻松地开发自己