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

yolov5 deepsort 行人/车辆(检测 +计数+跟踪+测距+测速)

YOLOv5和DeepSORT是两种常用的计算机视觉技术,它们可以结合使用以实现行人和车辆的目标检测和跟踪。这种技术在交通监控、智慧城市等领域中具有广泛的应用。

YOLOv5是一种基于深度学习的目标检测算法,它可以实现高效的目标检测和分类。与传统的目标检测算法相比,YOLOv5具有更快的检测速度和更高的准确率。而DeepSORT则是一种基于多目标跟踪的算法,它可以对相邻帧之间的目标进行跟踪,并输出目标的轨迹和速度等信息。

将YOLOv5和DeepSORT结合使用,可以实现对行人和车辆的目标检测和跟踪。首先,利用YOLOv5对图像或视频进行目标检测,得到行人和车辆的位置和类别信息。然后,利用DeepSORT对相邻帧之间的目标进行跟踪,并输出目标的轨迹和速度等信息。

这种技术在交通监控、智慧城市等领域中具有广泛的应用。例如,在交通监控中,可以利用该技术对路面上的行人和车辆进行实时监控,以提高交通安全性和交通效率。在智慧城市建设中,可以利用该技术对公共场所的人流和车流进行监测和管理,以提高城市管理效率和服务质量。

当然,YOLOv5和DeepSORT结合使用也存在一些限制和挑战。例如,光照、天气等因素可能会影响目标检测和跟踪效果;同时,在多目标跟踪中可能存在目标重叠和遮挡等问题。因此,需要不断地优化算法和模型,以提高检测和跟踪的准确率和鲁棒性。

总之,YOLOv5和DeepSORT的结合可以实现对行人和车辆的高效目标检测和跟踪,具有广泛的应用前景。通过不断地改进和优化算法和模型,可以进一步提高其检测和跟踪的准确率和鲁棒性,为智慧城市和交通安全等领域的发展做出更大的贡献。

功能 简介


YOLOv5 DeepSORT:实现行人/车辆检测、计数、跟踪、测距和测速


1. 背景介绍


随着计算机视觉和深度学习技术的迅猛发展,目标检测、目标跟踪与计数等技术在智能交通、智能监控等领域发挥着重要作用。YOLOv5是一种快速、准确的目标检测算法,而DeepSORT是目标跟踪算法中的经典方法,结合二者可以实现对行人和车辆的检测、计数、跟踪、测距和测速,为智能交通管理和智能监控系统提供了强大的支持。

2. YOLOv5 DeepSORT技术原理
2.1 YOLOv5目标检测


YOLOv5是一种基于深度学习的目标检测算法,它采用单阶段检测的方式,在保持高精度的同时实现了更快的推理速度。YOLOv5通过卷积神经网络对图像进行特征提取,并利用anchor boxes来预测物体的位置和类别,其高效的设计使得它适用于实时目标检测任务。

2.2 DeepSORT目标跟踪


DeepSORT是一种多目标跟踪算法,它结合了深度学习的目标检测和传统的多目标跟踪方法,可以对视频序列中的目标进行持续跟踪。DeepSORT利用卡尔曼滤波器对目标轨迹进行预测和更新,并结合外观描述子对不同帧中的目标进行关联,从而实现目标的持续跟踪。

2.3 YOLOv5 DeepSORT整合


将YOLOv5的目标检测结果输入到DeepSORT中,可以实现对行人和车辆的跟踪,同时可以根据目标的运动轨迹对其进行计数、测距和测速。这样的整合可以在智能交通管理系统和智能监控系统中提供更全面、精准的目标信息。

3. 应用场景
3.1 智能交通管理

在城市交通管理中,利用YOLOv5 DeepSORT可以实时监测道路上的行人和车辆情况,对交通流量进行统计和分析,实现智能交通信号控制和拥堵预警。
3.2 智能监控系统


在安防监控领域,结合YOLOv5 DeepSORT可以实现对监控区域内的异常行为检测、人员计数和车辆追踪,提高监控效率和准确性。

3.3 智能工厂和物流管理


在工业自动化和物流管理中,利用YOLOv5 DeepSORT可以对生产线上的物体进行实时监测与跟踪,提高生产效率和物流管理水平。

4. 技术挑战与发展趋势
4.1 技术挑战


整合YOLOv5和DeepSORT要解决数据传输、算法整合、性能优化等方面的技术挑战,如如何快速高效地将目标检测结果输入到目标跟踪算法中进行处理,如何在保证准确性的前提下提高系统的实时性。

4.2 发展趋势


未来,基于YOLOv5和DeepSORT的目标检测与跟踪技术将更加智能化和多样化,如结合语义分割进一步提高检测准确性,结合3D视觉技术实现目标的三维跟踪,以及结合强化学习等技术实现对目标行为的预测与分析。

具体代码实现


YOLOv5 DeepSORT技术的应用将为智能交通管理、智能监控系统等领域带来更加智能、高效的解决方案,为人们的生活和工作提供更多便利与安全。随着技术的不断发展与完善,我们有理由相信,基于YOLOv5 DeepSORT的目标检测与跟踪技术将广泛应用于更多领域,并取得更大的突破与创新。

实现了局域的出/入 分别计数。
显示检测类别,ID数量。
默认是 南/北 方向检测,若要检测不同位置和方向,需要加以修改
可在 count_car/traffic.py 点击运行
默认检测类别:行人、自行车、小汽车、摩托车、公交车、卡车、船。
检测类别可在 objdetector.py 文件修改。

 

代码运行 
$ git clone 追踪代码

因此repo包含weights及mp4等文件,若 git clone 速度慢,可直接下载zip
blog.csdnimg.cn/de311b07251a4d408d59f0487a41ae44.png)

进入目录

$ cd unbox_yolov5_deepsort_counting

创建 python 虚拟环境

$ python3 -m venv venv

激活虚拟环境

$ source venv/bin/activate

升级pip

$ python -m pip install --upgrade pip

安装pytorch
根据你的操作系统、安装工具以及CUDA版本,在 https://pytorch.org/get-started/locally/ 找到对应的安装命令。我的环境是 ubuntu 18.04.5、pip、CUDA 11.0。![在这里插入图片描述](https://img-blog.csdnimg.cn/77d60150764741b0bafa0927e1042a46.png

$ pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

安装软件包

$ pip install -r requirements.txt

在 demo.py 文件中,设置要检测的视频文件路径,默认为 './video/test.mp4'

capture = cv2.VideoCapture(‘./video/test.mp4’)

运行程序

python count.py

demo代码

detector = Detector()# 打开视频capture = cv2.VideoCapture(VIDEO_PATH)while True:# 读取每帧图片_, im = capture.read()if im is None:break# 缩小尺寸im = cv2.resize(im, (width//2, height//2))list_bboxs = []# 更新跟踪器output_image_frame, list_bboxs = objtracker.update(detector, im)# 输出图片output_image_frame = cv2.add(output_image_frame, color_polygons_image)if len(list_bboxs) > 0:# ----------------------判断撞线----------------------for item_bbox in list_bboxs:x1, y1, x2, y2, _, track_id = item_bbox# 撞线检测点,(x1,y1),y方向偏移比例 0.0~1.0y1_offset = int(y1 + ((y2 - y1) * 0.6))# 撞线的点y = y1_offsetx = x1if polygon_mask_blue_and_yellow[y, x] == 1:# 如果撞 蓝polygonif track_id not in list_overlapping_blue_polygon:list_overlapping_blue_polygon.append(track_id)# 判断 黄polygon list里是否有此 track_id# 有此track_id,则认为是 UP (上行)方向if track_id in list_overlapping_yellow_polygon:# 上行+1up_count += 1print('up count:', up_count, ', up id:', list_overlapping_yellow_polygon)# 删除 黄polygon list 中的此idlist_overlapping_yellow_polygon.remove(track_id)elif polygon_mask_blue_and_yellow[y, x] == 2:# 如果撞 黄polygonif track_id not in list_overlapping_yellow_polygon:list_overlapping_yellow_polygon.append(track_id)# 判断 蓝polygon list 里是否有此 track_id# 有此 track_id,则 认为是 DOWN(下行)方向if track_id in list_overlapping_blue_polygon:# 下行+1down_count += 1print('down count:', down_count, ', down id:', list_overlapping_blue_polygon)# 删除 蓝polygon list 中的此idlist_overlapping_blue_polygon.remove(track_id)# ----------------------清除无用id----------------------list_overlapping_all = list_overlapping_yellow_polygon + list_overlapping_blue_polygonfor id1 in list_overlapping_all:is_found = Falsefor _, _, _, _, _, bbox_id in list_bboxs:if bbox_id == id1:is_found = Trueif not is_found:# 如果没找到,删除idif id1 in list_overlapping_yellow_polygon:list_overlapping_yellow_polygon.remove(id1)if id1 in list_overlapping_blue_polygon:list_overlapping_blue_polygon.remove(id1)list_overlapping_all.clear()# 清空listlist_bboxs.clear()else:# 如果图像中没有任何的bbox,则清空listlist_overlapping_blue_polygon.clear()list_overlapping_yellow_polygon.clear()# 输出计数信息text_draw = 'DOWN: ' + str(down_count) + \' , UP: ' + str(up_count)output_image_frame = cv2.putText(img=output_image_frame, text=text_draw,org=draw_text_postion,fontFace=font_draw_number,fontScale=0.75, color=(0, 0, 255), thickness=2)cv2.imshow('Counting Demo', output_image_frame)cv2.waitKey(1)capture.release()cv2.destroyAllWindows()QQ767172261

结果展示

各种追踪 测距 姿态估计 目标检测 计数 测速功能已实现。

欢迎交流学习

相关文章:

  • 在数字化营销的大背景下,企业微信营销的挑战与应对策略
  • 【C++】wxWidgets编程的程序入口点
  • 桥接模式解析
  • 【vue】vue.config.js里面获取本机ip:
  • QML语法 | 导入语句(import)
  • WPF自定义控件,聚合器模式传递消息
  • 面试题整理
  • C语言每日一题(49)二叉树的三种基本遍历方法
  • Web开发8:前后端分离开发
  • 华为笔记本matebook pro X如何扩容 C 盘空间
  • 解析PDF二维码:数字时代文件管理的创新之道
  • 【数据结构:顺序表】
  • mysql之基本查询
  • 51单片机点灯
  • 数字身份保护:Web3如何改变个人隐私观念​
  • 0基础学习移动端适配
  • css布局,左右固定中间自适应实现
  • ES6 学习笔记(一)let,const和解构赋值
  • Gradle 5.0 正式版发布
  • Java 内存分配及垃圾回收机制初探
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Mac转Windows的拯救指南
  • SpriteKit 技巧之添加背景图片
  • TypeScript迭代器
  • 猴子数据域名防封接口降低小说被封的风险
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 手写双向链表LinkedList的几个常用功能
  • -- 数据结构 顺序表 --Java
  • 译自由幺半群
  • scrapy中间件源码分析及常用中间件大全
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • # windows 安装 mysql 显示 no packages found 解决方法
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #java学习笔记(面向对象)----(未完结)
  • (0)Nginx 功能特性
  • (12)Linux 常见的三种进程状态
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (PADS学习)第二章:原理图绘制 第一部分
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (转)setTimeout 和 setInterval 的区别
  • (转)创业家杂志:UCWEB天使第一步
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .mysql secret在哪_MYSQL基本操作(上)
  • .mysql secret在哪_MySQL如何使用索引
  • .NET 5种线程安全集合
  • .NET Core 2.1路线图
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net mvc 获取url中controller和action
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [ajaxupload] - 上传文件同时附件参数值