当前位置: 首页 > news >正文

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

 

01:YOLOv8 + DeepSort 车辆跟踪

该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。

02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线

在此基础上增加了用户界面功能,允许用户在视频监控区域内自由绘制进出线。当被跟踪的车辆穿过这些线时,系统会记录事件,例如记录车辆进入或离开某个区域的时间。这对于交通流量管理和安全监控很有帮助。

03:YOLOv8 + DeepSort 车辆跟踪 + 测速

系统增加了测速功能,通过计算车辆在两帧或多帧图像之间的位移来估计其速度。一旦检测到车辆超速,系统将触发报警机制。这项功能对于交通安全监控尤为重要。

04:YOLOv8 + DeepSort 车辆跟踪 + 测速 + 任意绘制进出线

结合了测速和任意绘制进出线的功能,不仅能够跟踪车辆并测量其速度,还能在用户定义的进出线上记录车辆的速度和通行时间。这对于交通管理和执法活动非常有用。

05:YOLOv8 + DeepSort 车辆跟踪 + 禁停区域 + 进出线

增加了禁停区域的检测功能,系统能够识别并标记出不允许停车的区域。当车辆在这些区域内停留时,系统将触发警报。同时,进出线的功能可以帮助监控车辆是否非法进入禁停区。

06:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制禁停区域 + 任意绘制进出线

进一步提升了系统的灵活性,允许用户根据需要自定义禁停区域以及进出线的位置。这种配置可以更好地适应各种应用场景,如临时禁停区域的设置。

07:YOLOv8 + DeepSort 车辆跟踪 + 测速 + 禁停区域 + 进出线

整合了测速、禁停区域和进出线的功能,系统可以在监测车辆速度的同时,防止车辆在不应停车的地方停留,并记录它们的进出情况。这对于交通安全管理非常关键。

08:YOLOv8 + DeepSort 车辆跟踪 + 测速 + 任意绘制禁停区域 + 任意绘制进出线

提供了最大的灵活性,允许用户根据具体的监控需求自由设定禁停区域和进出线的位置。这对于需要高度定制化监控解决方案的应用尤其适用。

09:YOLOv8 + DeepSort 车辆跟踪 + 车道车辆检测

此项目在车辆跟踪的基础上增加了车道检测功能,能够识别道路上的不同车道,并且能够区分各车道上的车辆。这有助于智能交通系统更好地管理交通流量,减少道路拥堵现象。

每个项目都利用了YOLOv8的高效检测能力和DeepSort的跟踪优势,可以根据具体的应用场景和技术要求进行调整和优化。

首先,确保安装了必要的库:

 
1pip install ultralytics  # YOLOv8
2pip install deep_sort_pytorch  # DeepSort

基础代码框架

1. 导入必要的库
 
1import cv2
2from ultralytics import YOLO
3from deep_sort_pytorch.deep_sort import DeepSort
4import numpy as np
2. 初始化YOLOv8模型和DeepSort
1# 加载YOLOv8模型
2model = YOLO('yolov8n.pt')  # 或者使用预训练模型路径
3
4# 初始化DeepSort
5deepsort = DeepSort(
6    'osnet_x0_25',
7    max_dist=0.2,
8    max_iou_distance=0.7,
9    max_age=70,
10    n_init=3,
11    nn_budget=100,
12    use_cuda=True
13)
3. 定义处理每一帧的方法
1def process_frame(frame, model, deepsort):
2    # 使用YOLOv8进行目标检测
3    results = model(frame)
4
5    # 获取检测结果
6    boxes = results[0].boxes.cpu().numpy()
7    scores = results[0].scores.cpu().numpy()
8    classes = results[0].names
9
10    # 只保留车辆类别的检测结果
11    vehicle_boxes = []
12    for box, score, class_name in zip(boxes, scores, classes):
13        if class_name in ['car', 'truck', 'bus']:  # 根据YOLOv8的类别名称选择
14            vehicle_boxes.append([*box[:4], score])
15
16    # 将检测结果传递给DeepSort进行跟踪
17    outputs = deepsort.update(np.array(vehicle_boxes), frame)
18
19    # 绘制跟踪框
20    for output in outputs:
21        x1, y1, x2, y2, track_id = output
22        cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
23        cv2.putText(frame, f"ID: {int(track_id)}", (int(x1), int(y1 - 10)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
24
25    return frame
4. 处理视频流
1# 打开视频文件
2video_path = 'path_to_your_video.mp4'
3cap = cv2.VideoCapture(video_path)
4
5while cap.isOpened():
6    ret, frame = cap.read()
7    if not ret:
8        break
9
10    # 处理每一帧
11    processed_frame = process_frame(frame, model, deepsort)
12
13    # 显示结果
14    cv2.imshow('Vehicle Tracking', processed_frame)
15
16    # 按Q键退出
17    if cv2.waitKey(1) & 0xFF == ord('q'):
18        break
19
20# 清理
21cap.release()
22cv2.destroyAllWindows()

扩展功能

对于扩展功能,如测速、绘制进出线、禁停区域等功能,需要在process_frame函数中加入额外的逻辑。例如,为了实现测速功能,你可以根据车辆在不同帧中的位置变化来计算速度;为了绘制进出线,可以在processed_frame上使用cv2.line()函数添加线条,并检查车辆是否跨越了这些线。

相关文章:

  • Flask中实现WebSocket需要什么组件
  • 如何在mac上玩使命召唤手游?苹果电脑好玩的第一人称射击游戏推荐
  • 面对Redis数据量庞大时的应对策略
  • 【Linux 内核构建】如何查看 Linux 系统中可以选择的内核有哪一些?如何切换 Linux kernel 版本?
  • docker 安装 rabbitmq
  • Java内存马系列 | SpringMVC内存马 - 下 | SpringMVC 内存马分析
  • 人工智能在行动:利用人工智能扩展您的显示和视频工作
  • AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理
  • QT6聊天室项目 网络通信实现逻辑分析
  • 优化算法与正则化
  • Tomcat服务详解
  • 我与Linux的爱恋:yum和vim以及gcc的使用
  • A题 农村公交与异构无人机协同配送优化
  • Rust:Restful API 服务程序开发详述
  • 【ShuQiHere】从残差思想到 ResNet:深度学习的突破性创新
  • 【技术性】Search知识
  • ESLint简单操作
  • JavaScript对象详解
  • Js基础知识(四) - js运行原理与机制
  • Shell编程
  • socket.io+express实现聊天室的思考(三)
  • Solarized Scheme
  • Theano - 导数
  • vue 个人积累(使用工具,组件)
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 对象引论
  • 机器学习 vs. 深度学习
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 使用docker-compose进行多节点部署
  • 一道闭包题引发的思考
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • $refs 、$nextTic、动态组件、name的使用
  • (2)MFC+openGL单文档框架glFrame
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (离散数学)逻辑连接词
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (推荐)叮当——中文语音对话机器人
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)原始图像数据和PDF中的图像数据
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 服务 ServiceController
  • .NET 回调、接口回调、 委托
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .net通用权限框架B/S (三)--MODEL层(2)