当前位置:   article > 正文

YOLOv8+DeepSORT多目标车辆跟踪(车辆检测+跟踪+车辆计数)

YOLOv8+DeepSORT多目标车辆跟踪(车辆检测+跟踪+车辆计数)

一、引言

智能交通系统(ITS)的快速发展中,对车辆进行精确的检测和跟踪是实现交通监控、流量分析和安全预警的关键技术。YOLOv8和DeepSORT的结合,为解决这一挑战提供了一种创新的解决方案。

本文将详细介绍YOLOv8+DeepSORT在多目标车辆跟踪中的应用,包括车辆检测、跟踪和计数。

二、YOLOv8:革命性的车辆检测

YOLOv8是目标检测领域的最新进展,它通过单次前向传播即可预测出图像中的目标位置和类别。与传统的两阶段检测器相比,YOLOv8在速度和准确性上都有显著提升。YOLOv8的特点包括:

  • 实时性能:YOLOv8专为实时应用设计,能够在视频流中快速检测车辆。

  • 高准确性:利用最新的卷积神经网络架构,YOLOv8在各种环境下都能保持高准确率。

  • 易于集成:YOLOv8的输出可以直接用于后续的跟踪算法,无需复杂的预处理。

三、DeepSORT:先进的跟踪技术

DeepSORT是一种基于深度学习的特征表示方法,它通过提取目标的关键点特征来进行跟踪。DeepSORT的关键优势包括:

  • 特征学习:DeepSORT利用深度卷积网络学习目标的特征表示,提高了目标区分能力。

  • 多目标跟踪:DeepSORT能够有效处理视频中的多个目标,即使在目标重叠和遮挡的情况下也能保持稳定跟踪。

  • 适应性:DeepSORT能够适应目标的外观变化,包括尺度变化、旋转和变形。

四、YOLOv8+DeepSORT:无缝集成

将YOLOv8用于车辆检测,其输出的边界框和车辆特征可以作为DeepSORT的输入。这种无缝集成的方式使得YOLOv8+DeepSORT系统在多目标车辆跟踪中表现出色:

  • 快速检测与稳定跟踪:YOLOv8快速定位车辆,DeepSORT稳定跟踪每一辆车。

  • 高精度的车辆计数:系统能够准确统计通过特定区域的车辆数量,适用于交通流量分析

  • 鲁棒性:即使在复杂的交通场景中,YOLOv8+DeepSORT也能保持稳定的跟踪性能。

五、车辆计数:智能交通管理的关键

在智能交通管理系统中,车辆计数是一个关键功能。通过YOLOv8+DeepSORT系统,我们不仅可以实时跟踪每一辆车的轨迹,还可以统计车流量,分析交通模式。这对于交通规划、拥堵管理和事故预防具有重要意义。

相关代码介绍

初始化跟踪器

  1. def init_tracker():
  2. """
  3. 初始化目标跟踪器
  4. """
  5. # 获取DeepSort的配置
  6. cfg_deep = get_config()
  7. cfg_deep.merge_from_file("deep_sort_pytorch/configs/deep_sort.yaml")
  8. deepsort = DeepSort(model_path=cfg_deep.DEEPSORT.REID_CKPT,
  9. max_dist=cfg_deep.DEEPSORT.MAX_DIST, min_confidence=cfg_deep.DEEPSORT.MIN_CONFIDENCE,
  10. nms_max_overlap=cfg_deep.DEEPSORT.NMS_MAX_OVERLAP,
  11. max_iou_distance=cfg_deep.DEEPSORT.MAX_IOU_DISTANCE,
  12. max_age=cfg_deep.DEEPSORT.MAX_AGE, n_init=cfg_deep.DEEPSORT.N_INIT,
  13. nn_budget=cfg_deep.DEEPSORT.NN_BUDGET,
  14. use_cuda=True)
  15. return deepsort

计算移动方向

  1. def get_direction(point1, point2):
  2. """
  3. 根据两个点的相对位置计算出移动方向
  4. """
  5. direction_str = ""
  6. # 根据两个点在y轴上的相对位置,确定是向南还是向北移动
  7. if point1[1] > point2[1]:
  8. direction_str += "South"
  9. elif point1[1] < point2[1]:
  10. direction_str += "North"
  11. else:
  12. direction_str += ""
  13. # 根据两个点在x轴上的相对位置,确定是向东还是向西移动
  14. if point1[0] > point2[0]:
  15. direction_str += "East"
  16. elif point1[0] < point2[0]:
  17. direction_str += "West"
  18. else:
  19. direction_str += ""
  20. return direction_str

绘制计数信息

  1. # 遍历向北移动的对象计数器中的条目,并在图像的右上角显示计数信息
  2. for idx, (key, value) in enumerate(object_counter1.items()):
  3. # 进入的车辆数量
  4. cnt_str = str(key) + ":" + str(value)
  5. cv2.line(img, (width - 500, 25), (width, 25), [85, 45, 255], 40)
  6. cv2.putText(img, f'Number of Vehicles Entering', (width - 500, 35), 0, 1, [225, 255, 255], thickness=2,
  7. lineType=cv2.LINE_AA)
  8. # 绘制分隔线
  9. cv2.line(img, (width - 150, 65 + (idx * 40)), (width, 65 + (idx * 40)), [85, 45, 255], 30)
  10. # 绘制计数信息。
  11. cv2.putText(img, cnt_str, (width - 150, 75 + (idx * 40)), 0, 1, [255, 255, 255], thickness=2,
  12. lineType=cv2.LINE_AA)
  13. # 遍历向南移动的对象计数器中的条目,并在图像的左上角显示计数信息
  14. for idx, (key, value) in enumerate(object_counter.items()):
  15. # 离开的车辆数量
  16. cnt_str1 = str(key) + ":" + str(value)
  17. cv2.line(img, (20, 25), (500, 25), [85, 45, 255], 40)
  18. cv2.putText(img, f'Numbers of Vehicles Leaving', (11, 35), 0, 1, [225, 255, 255], thickness=2,
  19. lineType=cv2.LINE_AA)
  20. cv2.line(img, (20, 65 + (idx * 40)), (127, 65 + (idx * 40)), [85, 45, 255], 30)
  21. cv2.putText(img, cnt_str1, (11, 75 + (idx * 40)), 0, 1, [225, 255, 255], thickness=2, lineType=cv2.LINE_AA)

推理效果

YOLOv8+DeepSORT多目标车辆跟踪(车辆检测+跟踪

可视化界面

六、源码获取

本文涉及到的完整全部程序文件,具体见下图,获取方式见文末:

关注下方公众号:【AI算法与电子竞赛】,发送【YOLOv8+DeepSORT】即可免费获取下载方式

七、链接作者

欢迎关注我的公众号:@AI算法与电子竞赛

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/499991
推荐阅读
相关标签
  

闽ICP备14008679号