车辆跟踪及测距

a92c427afff14ca3b8487337bf5628c8.png

车辆跟踪及测距是一种现代化的技术手段,通过使用各种传感器和技术设备,能够实现车辆的实时监控和测距。这些技术手段包括GPS全球定位系统、雷达、激光等,它们可以帮助我们更好地了解车辆的位置和行驶情况。在本文中,我们将从以下几个方面进行详细的探讨:

1. 车辆跟踪技术的发展历程

车辆跟踪技术在过去几十年中得到了极大的发展和进步。早期的车辆跟踪只是简单地通过人工观察和记录车辆的行驶轨迹。然而,随着计算机技术的发展,现代化的车辆跟踪技术不但可以实时查看车辆位置和行驶情况,还可以对车辆的行驶数据进行分析和处理。

2. 车辆跟踪技术的原理和应用

车辆跟踪技术主要基于全球定位系统(GPS)和移动通信技术实现。我们可以通过GPS系统定位车辆的位置,并通过移动通信技术将数据传输到远程控制中心。这些数据可以包括车辆的位置、速度、行驶路线等信息。车辆跟踪技术广泛应用于物流、货运、公共交通、执法等领域,并为车辆管理提供了重要的数据支持和智能决策。

3. 测距技术的原理和应用

测距技术是车辆跟踪的重要组成部分。常见的测距技术包括雷达、激光、红外线和声波等。雷达测距是一种广泛应用于军事和民用领域的测距技术,它可以通过发射和接收无线电波来确定目标物体的位置和距离。激光测距则是通过发射和接收激光束,实现精确测距。这些测距技术广泛应用于车辆防撞系统、自动驾驶等领域。

4. 车辆跟踪及测距技术的优缺点与挑战

车辆跟踪及测距技术的优点在于可以实时跟踪车辆位置和行驶情况,帮助车辆管理者更好地进行车辆调度和节约成本。而缺点则在于需要较高的技术成本和维护难度,同时也存在侵犯隐私的风险。此外,车辆跟踪及测距技术还需要应对日益复杂和多样化的车辆和行驶场景,面临着不断升级和优化的挑战。

总之,车辆跟踪及测距技术在现代交通和车辆管理中扮演着重要的角色。随着技术的发展和进步,我们相信这些技术将会不断创新和完善,为车辆管理和安全提供更好的保障和服务。

车辆跟踪及测距

  • 该项目一个基于深度学习和目标跟踪算法的项目,主要用于实现视频中的目标检测和跟踪。
  • 该项目使用了 YOLOv5目标检测算法和 DeepSORT
    目标跟踪算法,以及一些辅助工具和库,可以帮助用户快速地在本地或者云端上实现视频目标检测和跟踪!

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


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

5cab280da7a44fc0ac8c2543ad80d1b7.png

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

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

代码运行 

$ git clone 追踪代码

进入目录

$ cd unbox_yolov5_deepsort_counting

激活虚拟环境

$ source venv/bin/activate

升级pip

$ python -m pip install --upgrade pip

安装pytorch

$ 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

在 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()

结果展示

571919d5532b464faceaf9956c80472e.png

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/233037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode - 460 LFU缓存(Java JS Python)

题目来源 460. LFU 缓存 - 力扣(LeetCode) 题目描述 请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。 实现 LFUCache 类: LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key)…

【迁移学习论文四】Multi-Adversarial Domain Adaptation论文原理及复现工作

Multi-Adversarial Domain Adaptation 多对抗域适应 前言 好久没有更新了,所以这周开始记录下来,也好督促自己。记录本人预备研究生阶段相关迁移学习论文的原理阐述以及复现工作。 问题 跨域混淆或错误对齐 文章介绍 这篇文章于2018年发表在AAAI&…

手把手教你使用Cypress进行端到端测试

一、引言 Cypress是一个流行的端到端测试框架,它提供了一个全面的解决方案,可以测试任何在浏览器中运行的内容。不论你是想为一个小型项目添加测试,还是在大型企业级应用中进行端到端测试,Cypress都是一个不错的选择。本文将会手…

智能优化算法应用:基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.阿基米德优化算法4.实验参数设定…

国家开放大学 河南开放大学形成性考核 平时作业 统一参考资料

试卷代号:1258 房屋建筑混凝土结构设计 参考试题 一、单项选择题(每小题2分,共计40分) 1.( )是将框架结构中的部分跨间布置剪力墙或把剪力墙结构的部分剪力墙抽掉改为框架承重。 A.梁板结构体系 B.框…

评价机器学习模型的指标

为了衡量一个机器学习模型的好坏,需要给定一个测试集,用模型对测试集中的每一个样本进行预测,并根据预测结果计算评价分数。 对于分类问题,常见的评价标准有准确率、精确率、召回率和F值等。给定测试集 𝒯 {(&#x1…

一款电压检测LVD

一、基本概述 The TX61C series devices are a set of three terminal low power voltage detectors implemented in CMOS technology. Each voltage detector in the series detects a particular fixed voltage ranging from 0.9V to 5.0V. The voltage detectors consist…

git缓存区、本地仓库、远程仓库的同步问题(初始化库无法pull和push)

git新建库与本地库同步 gitee使用教程,git的下载与安装接不在叙述了。 新建远程仓库 新建远程仓库必须要使用仓库提供的api,也就是仓库门户网站,例如gitee,github,gitlab等。在上图中使用gitee网址中新建了一个test仓…

回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 (多指标,多图)

回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 (多指标,多图) 目录 回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 (多指标,多图)效果一览基本介绍…

HarmonyOS(十五)——状态管理之@Prop装饰器(父子单向同步)

上一篇文章我们认识了状态管理的State装饰器(组件内状态),接下来我们学习另外一个状态管理装饰器Prop装饰器。 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的,但是变化不会同步回其父组件。 说明&#…

10分钟微调专属于自己的大模型

本文主要介绍使用魔搭社区轻量级训练推理工具SWIFT,进行大模型自我认知微调,帮助初阶炼丹师快速微调出专属于自己的大模型。 SWIFT(Scalable lightWeight Infrastructure for Fine-Tuning)是魔搭ModelScope开源社区推出的一套完整…

泰坦陨落2找不到msvcr120文件的修复方法,分享多种解决方法

在玩泰坦陨落2这款游戏时,有些玩家可能会遇到找不到msvcr120.dll文件的问题。这个问题可能是由于游戏缺少必要的运行库导致的。下面我将分享一些解决这个问题的方法,希望对大家有所帮助。 一、问题分析 msvcr120.dll是Microsoft Visual C Redistributab…

MATLAB - 使用 MPC Designer 线性化 Simulink 模型

系列文章目录 前言 本主题介绍如何使用 MPC Designer 对 Simulink 模型进行线性化。为此,请从包含 MPC 控制器块的 Simulink 模型打开该应用程序。本例中使用 CSTR_ClosedLoop 模型。 open_system(CSTR_ClosedLoop) 在模型窗口中,双击 MPC 控制器模块。…

Vue中英文翻译小结

背景:时局艰难,后端开发被强制写了vue,这不有个需求是中英文翻译,特此记录下,该怎么个翻译法子。 先引入全局的路由国际化文件,zh.js 和 en.js 1.关于插值表达Button里面 {{ $t(reinsop.common.back) }} …

LazyIDA源码阅读

LazyIDA是一款IDA插件,项目地址GitHub - L4ys/LazyIDA: Make your IDA Lazy! 外部引用 from __future__ import division from __future__ import print_function from struct import unpack import idaapi import idautils import idcfrom PyQt5.Qt import QAppli…

vue中的事件修饰符、表单双向数据绑定和计算属性

目录 一、事件修饰符 二、表单双向数据绑定 模拟双向数据绑定(双向数据绑定底层原理) 三、计算属性 计算属性和methods方法区别? 计算属性和watch区别? 一、事件修饰符 stop 阻止事件冒泡 prevent 阻止事件默认行为 ca…

Linux线程——互斥锁

概念 互斥量(mutex)从本质上来说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁后,任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥锁。 如果释放…

【HCIP学习记录】OSPF之DD报文

1.OSPF报文格式 24字节 字段长度含义Version1字节版本,OSPF的版本号。对于OSPFv2来说,其值为2。Type1字节类型,OSPF报文的类型,有下面几种类型: 1:Hello报文;● 2:DD报文&#xff1…

美国联邦机动车安全标准-FMVSS

FMVSS标准介绍: FMVSS是美国《联邦机动车安全标准》,由美国运输部下属的国家公路交通安全管理局(简称NHTSA)具体负责制定并实施。是美国联邦政府针对机动车制定的安全标准,旨在提高机动车的安全性能,减少交通事故中的人员伤亡。F…

ubuntu无 root 权限安装 screen

网上的方法主要是如下图的方法,源码安装,但是我一直 make install失败显示没有权限 然后选择放弃,然后随便试了一下方法 2,成功 方法 1 方法 2 pip3 install screen结果: