首页 > 其他分享 >基于YOLO V11的车辆检测与追踪与车道计数项目

基于YOLO V11的车辆检测与追踪与车道计数项目

时间:2024-10-17 09:51:50浏览次数:3  
标签:V11 self YOLO 计数 py FONT frame

基于YOLO V11的车辆检测与计数项目

概述

本项目使用最新的YOLO V11模型实现了一个实时车辆检测与计数系统。该系统能够准确地在多条车道(车道A、车道B、车道C)上检测并计数车辆,为交通监控和管理提供有价值的信息。
在这里插入图片描述

问题陈述

在现代城市环境中,监控车辆流量和计数对于有效的交通管理至关重要。现有的系统往往在准确性和实时处理方面存在困难,导致交通响应延迟和效率低下。本项目通过利用YOLO V11模型的先进功能来解决这些挑战,显著提高交通监控系统的性能。

解决方案

YOLO V11模型提供了高精度和高效的物体检测能力。通过利用其功能,我们可以实现实时车辆检测和计数,大幅改善交通监控系统。解决方案的关键特性包括:

  • 增强的准确性:YOLO V11提高了对各种类型车辆的检测率。
  • 实时处理:能够实时处理视频流。
  • 车道特定检测:能够在不同的车道之间区分车辆。
  • 用户友好的界面:易于集成和可视化结果。

系统需求

为了设置本项目的环境,您需要以下内容:

  • Python 3.12
  • OpenCV
  • Ultralytics (用于YOLO V11)
  • YOLO V11的权重文件和配置文件
  • requirements.txt中指定的其他依赖项
    在这里插入图片描述

环境搭建

首先确保已安装Python 3.12。然后创建虚拟环境并安装所需包:

# 创建虚拟环境
python3 -m venv venv

# 激活虚拟环境
source venv/bin/activate  # 在Windows上: venv\Scripts\activate

# 安装所需的包
pip install -r requirements.txt

项目目录结构

组织您的项目目录如下:

vehicle_detection/
│
├── data/
│   ├── videos/
│   └── images/
│
├── models/
│   └── yolov11.pt
│
├── src/
│   ├── __init__.py
│   ├── config.py
│   ├── utils.py
│   ├── detector.py
│   ├── tracker.py
│   ├── counter.py
│   └── main.py
│
├── requirements.txt
└── README.md

实现步骤

配置

创建一个config.py文件来存储所有配置参数:

# config.py

# 路径
MODEL_PATH = 'models/yolov11.pt'
VIDEO_PATH = 'data/videos/sample.mp4'

# 检测和跟踪
CONFIDENCE_THRESHOLD = 0.5
NMS_THRESHOLD = 0.4
TRACKER_MAX_AGE = 30
TRACKER_N_INIT = 2

# 车道
LANES = {
    'A': {'start': (100, 200), 'end': (500, 200)},
    'B': {'start': (100, 300), 'end': (500, 300)},
    'C': {'start': (100, 400), 'end': (500, 400)}
}

# 可视化
FONT = cv2.FONT_HERSHEY_SIMPLEX
FONT_SCALE = 0.5
FONT_COLOR = (0, 255, 0)
FONT_THICKNESS = 2

工具函数

创建一个utils.py文件来存储绘制和其他常用任务的工具函数:

# utils.py

import cv2

def draw_text(img, text, position, font=cv2.FONT_HERSHEY_SIMPLEX, font_scale=0.5, color=(0, 255, 0), thickness=2):
    cv2.putText(img, text, position, font, font_scale, color, thickness, cv2.LINE_AA)

def draw_line(img, start, end, color=(0, 255, 0), thickness=2):
    cv2.line(img, start, end, color, thickness)

def draw_rectangle(img, bbox, color=(0, 255, 0), thickness=2):
    x1, y1, x2, y2 = bbox
    cv2.rectangle(img, (x1, y1), (x2, y2), color, thickness)

检测器

创建一个detector.py文件来处理YOLO V11模型和检测逻辑:

# detector.py

from ultralytics import YOLO
import cv2

class VehicleDetector:
    def __init__(self, model_path, confidence_threshold, nms_threshold):
        self.model = YOLO(model_path)
        self.confidence_threshold = confidence_threshold
        self.nms_threshold = nms_threshold

    def detect(self, frame):
        results = self.model.predict(source=frame, conf=self.confidence_threshold, iou=self.nms_threshold)
        detections = []
        for result in results:
            boxes = result.boxes.xyxy.cpu().numpy()
            scores = result.boxes.conf.cpu().numpy()
            classes = result.boxes.cls.cpu().numpy()
            for box, score, cls in zip(boxes, scores, classes):
                if score >= self.confidence_threshold:
                    detections.append({
                        'bbox': box,
                        'score': score,
                        'class': cls
                    })
        return detections

跟踪器

创建一个tracker.py文件来处理目标跟踪逻辑:

# tracker.py

from deep_sort_realtime.deepsort_tracker import DeepSort

class VehicleTracker:
    def __init__(self, max_age, n_init):
        self.tracker = DeepSort(max_age=max_age, n_init=n_init)

    def update_tracks(self, detections, frame):
        tracks = self.tracker.update_tracks(detections, frame=frame)
        return [track for track in tracks if track.is_confirmed()]

计数器

创建一个counter.py文件来处理车辆计数逻辑:

# counter.py

class VehicleCounter:
    def __init__(self, lanes):
        self.lanes = lanes
        self.counts = {lane: 0 for lane in lanes.keys()}

    def count_vehicles(self, tracks, frame):
        for track in tracks:
            ltrb = track.to_ltrb()
            center_x = (ltrb[0] + ltrb[2]) / 2
            center_y = (ltrb[1] + ltrb[3]) / 2
            for lane, line in self.lanes.items():
                start, end = line['start'], line['end']
                if self._is_point_on_line(center_x, center_y, start, end):
                    self.counts[lane] += 1
                    break

    def _is_point_on_line(self, x, y, start, end):
        # 判断点是否在线段上
        return min(start[0], end[0]) <= x <= max(start[0], end[0]) and min(start[1], end[1]) <= y <= max(start[1], end[1])

主程序

创建一个main.py文件来整合所有的组件并运行主程序:

# main.py



def main():
    # 初始化检测器、跟踪器和计数器
    detector = VehicleDetector(MODEL_PATH, CONFIDENCE_THRESHOLD, NMS_THRESHOLD)
    tracker = VehicleTracker(TRACKER_MAX_AGE, TRACKER_N_INIT)
    counter = VehicleCounter(LANES)

    # 打开视频文件
    cap = cv2.VideoCapture(VIDEO_PATH)

    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break

        # 检测车辆
        detections = detector.detect(frame)

        # 更新跟踪
        tracks = tracker.update_tracks(detections, frame)

        # 计数车辆
        counter.count_vehicles(tracks, frame)

        # 绘制车道线
        for lane, line in LANES.items():
            draw_line(frame, line['start'], line['end'])

        # 绘制检测框和跟踪ID
        for track in tracks:
            ltrb = track.to_ltrb()
            id = str(track.track_id)
            draw_rectangle(frame, ltrb, color=(0, 255, 0))
            draw_text(frame, f"ID: {id}", (int(ltrb[0]), int(ltrb[1]) - 10), font=FONT, font_scale=FONT_SCALE, color=FONT_COLOR, thickness=FONT_THICKNESS)

        # 显示计数结果
        for lane, count in counter.counts.items():
            draw_text(frame, f"Lane {lane}: {count}", (10, 30 + 30 * list(LANES.keys()).index(lane)), font=FONT, font_scale=FONT_SCALE, color=FONT_COLOR, thickness=FONT_THICKNESS)

        # 显示帧
        cv2.imshow('Vehicle Detection and Counting', frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

本项目利用最新的YOLO V11模型实现了一个实时车辆检测、追踪和车道计数系统。该系统能够准确地在多条车道上检测并追踪车辆,并统计每条车道上的车辆数量,为交通监控和管理提供有价值的信息。

问题陈述
在现代城市环境中,实时监控车辆流量和计数对于有效的交通管理至关重要。现有的系统往往在准确性和实时处理方面存在困难,导致交通响应延迟和效率低下。本项目通过利用YOLO V11模型的先进功能来解决这些挑战,显著提高交通监控系统的性能。

解决方案
YOLO V11模型提供了高精度和高效的物体检测能力。通过结合DeepSORT跟踪算法,我们可以实现实时车辆检测、追踪和计数,大幅改善交通监控系统。解决方案的关键特性包括:

增强的准确性:YOLO V11提高了对各种类型车辆的检测率。
实时处理:能够实时处理视频流。
车道特定检测:能够在不同的车道之间区分车辆。
用户友好的界面:易于集成和可视化结果。
系统需求
为了设置本项目的环境,您需要以下内容:

Python 3.12
OpenCV
Ultralytics (用于YOLO V11)
DeepSORT (用于目标跟踪)
YOLO V11的权重文件和配置文件
requirements.txt中指定的其他依赖项
环境搭建
首先确保已安装Python 3.12。然后创建虚拟环境并安装所需包:

总结

通过本指南,我们介绍了如何使用YOLO V11模型构建一个实时车辆检测与计数系统。该项目不仅实现了高精度的车辆检测,还具备实时处理能力和车道特定的车辆计数功能。希望这篇文档能帮助您开始自己的项目探索之旅,并根据具体需求进行调整和扩展。继续探索最新的研究进展和技术趋势也将有助于不断提高系统的整体表现。

全部代码见文末底部卡片

标签:V11,self,YOLO,计数,py,FONT,frame
From: https://blog.csdn.net/cv_2025/article/details/142998258

相关文章

  • YOLO11涨点优化:原创自研 | 自研独家创新BSAM注意力 ,基于CBAM升级
     ......
  • yolov10环境配置
    安装 Anaconda(一直点下一步安装即可,记住安装的目录。)https://www.anaconda.com/download/success  配置系统环境变量D:\anaconda3D:\anaconda3\Library\binD:\anaconda3\Scripts在命令行中执行conda--version显示如下图即为成功创建虚拟环境首先新建......
  • 字典树 计数问题(含 2022 icpc杭州 K)
    //最近学了字典树,补一下1.概念和实现首先,字典树是一棵树(废话),边表示字母,从根到叶子节点所有边的顺序组合表示字目排列顺序。看一下图明白很多:例如:abc这个字母排序(或者说“单词”),可以用1->2->5->8这条路径表示。有个性质就是:同一个单词的末尾节点标号是唯一的。比如以6为末尾......
  • YOLO11有效改进专栏目录
    |试读篇|使用YOLO11训练自己的数据集【下载模型】-【导入数据集】-【训练模型】-【评估模型】-【导出模型】YOLO11关键改进与网络结构图YOLO11改进|注意力机制篇|添加GAM、CBAM、CA、ECA等注意力机制YOLO11改进|卷积篇|引入可变核卷积AKConv|注意力机制篇|YOLO11改进|注意......
  • 作物与杂草的智能识别,基于YOLOv8全系列参数模型【n/s/m/lx/】开发构建田间低头作物杂
    一、背景田间杂草的有效管理是现代农业生产中面临的重要挑战之一。杂草不仅竞争作物的养分、水分和阳光,还可能成为害虫和病原体的寄主,从而降低农作物的产量和品质。因此,开发高效、精确的杂草检测和管理系统对于提高农业生产效率、降低化学除草剂的使用以及保护环境具有重要......
  • 深度解析计数排序:原理、特性与应用
    目录......
  • 基于yolov8的交通标志识别检测数据集包含9类别 训练集:3530验证:801
    pyqt5界面演示摘要随着城市化进程的加速和交通运输业的蓬勃发展,道路交通的安全问题日益凸显其重要性。交通标志作为道路语言的重要组成部分,对于引导交通流、规范驾驶行为、保障道路使用者的安全具有不可替代的作用。然而,在实际交通环境中,由于天气变化、标志老化、驾驶员注......
  • yolov5,v8船舰识别检测(包含训练代码Pyqt源码超详细)
    前言:随着海上活动的增加,对船舰进行实时、准确的检测与识别成为了海上安全、海洋监测、海事管理等领域的迫切需求。传统的船舶识别方法主要依赖于船舶自动识别系统(AIS)和雷达等通信导航设备,但这些方法存在一定的局限性,例如目标误识别、目标丢失和易受环境噪声为海上船只的自动......
  • YOLO11在训练和导出时的一些参数设置
    train时,imsz只能设置成1个整数。如果设置成数组,会提示:updatingto'imgsz=640'.'train'and'val'imgszmustbeaninteger,while'predict'and'export' 图像会以较长的边等比例缩放到指定的整数,然后较短的边的两侧填充114到指定的整数尺寸。即最终会是一个正方形,原图缩放......
  • YOLOv11改进策略【卷积层】| ICCV-2023 SAFM 空间自适应特征调制模块 对C3k2进行二次
    一、本文介绍本文记录的是利用空间自适应特征调制模块SAFM优化YOLOv11的目标检测方法研究。SAFM通过更好地利用特征信息来实现模型性能和效率的平衡。本文通过二次创新C3k2,能够动态选择代表性特征,并结合局部上下文信息,提升模型的检测精度。专栏目录:YOLOv11改进目录一览......