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

YOLOv5+双目实现三维跟踪(python)

YOLOv5+双目实现三维跟踪(python)

  • 1. 目标跟踪
  • 2. 测距模块
    • 2.1 测距原理
    • 2.2 添加测距
  • 3. 细节修改(可忽略)
  • 4. 实验效果

相关链接
1. YOLOV5 + 双目测距(python)
2. YOLOV7 + 双目测距(python)
3. YOLOv7+双目实现三维跟踪(python)
4. 具体实现效果已在Bilibili发布,点击跳转

1. 目标跟踪

用yolov5实现跟踪步骤比较简单,去官网下载deepsort源码,这里有个版本对应关系
DeepSort v3.0 ~YOLOv5 v5.0-------------------DeepSort v4.0 ~ YOLOv5 v6.1
后续有机会的话会特意写一下跟踪原理…
在这里插入图片描述

下载完DeepSort之后去YOLO官网下载相应的YOLO版本,然后把下载的YOLO拖进DeepSort文件夹里,并把YOLO文件夹改名为yolov5,接下来把环境装好,然后运行代码 track.py ,此时如果不出问题就完成了普通检测
也可以用终端运行命令python track.py --source 1.mp4 --show-vid --save-vid --yolo_weights yolov5/weights/yolov5s.pt
这里有几个常用知识需要注意的,我直接在以下代码作了注释

if __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--yolo_weights', type=str, default='yolov5/weights/yolov5s.pt', help='model.pt path')parser.add_argument('--deep_sort_weights', type=str, default='deep_sort_pytorch/deep_sort/deep/checkpoint/ckpt.t7', help='ckpt.t7 path')    # file/folder, 0 for webcam#parser.add_argument('--source', type=str, default='0', help='source')# 改成0可以调用摄像头parser.add_argument('--source', type=str, default='1.mp4', help='source')parser.add_argument('--output', type=str, default='output', help='output folder')  # output folderparser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')parser.add_argument('--conf-thres', type=float, default=0.4, help='object confidence threshold')parser.add_argument('--iou-thres', type=float, default=0.5, help='IOU threshold for NMS')parser.add_argument('--fourcc', type=str, default='mp4v', help='output video codec (verify ffmpeg support)')parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')parser.add_argument('--show-vid', action='store_true', help='display tracking video results')   # 显示检测画面parser.add_argument('--save-vid', action='store_true', help='save video tracking results')  # 保存检测后的画面parser.add_argument('--save-txt', action='store_true', help='save MOT compliant results to *.txt')# class 0 is person, 1 is bycicle, 2 is car... 79 is ovenparser.add_argument('--classes', nargs='+', type=int, help='filter by class')  # 检测类别#parser.add_argument('--classes', nargs='+', default=[0], type=int, help='filter by class')  # default=[0]代表只检测coco数据集里的类别0,即person,同理可换成别的类别

请添加图片描述

2. 测距模块

2.1 测距原理

测距原理详见 双目三维测距(python)

2.2 添加测距

接下来调用测距代码到主代码 track.py 文件中,先在代码开头导入库,添加

from stereo import stereoconfig
from stereo.stereo import stereo_40
from stereo.stereo import stereo_threading, MyThread
from yolov5.utils.plots import plot_one_box

我们需要将立体匹配等代码写进跟踪模块里,具体写法在我之前开源的 YOLOv5+双目测距(python) 这片文章里已经提及,这里就不再细讲,最后计算得到目标框的中心点坐标和距离对其进行显示,具体如下

for *xyxy, conf, cls in det:# to deep sort formatx_c, y_c, bbox_w, bbox_h = xyxy_to_xywh(*xyxy)xywh_obj = [x_c, y_c, bbox_w, bbox_h]xywh_bboxs.append(xywh_obj)confs.append([conf.item()])if (0 < xyxy[2] < 1280):x_center = (xyxy[0] + xyxy[2]) / 2y_center = (xyxy[1] + xyxy[3]) / 2x_0 = int(x_center)y_0 = int(y_center)if (0 < x_0 < 1280):x1 = xyxy[0]x2 = xyxy[2]y1 = xyxy[1]y2 = xyxy[3]if (accel_frame % fps_set == 0):t3 = time.time()  # stereo time endthread.join()points_3d = thread.get_result()# gol.set_value('points_3d', points_3d)t4 = time.time()  # stereo time endprint(f'{s}Stereo Done. ({t4 - t3:.3f}s)')a = points_3d[int(y_0), int(x_0), 0] / 1000b = points_3d[int(y_0), int(x_0), 1] / 1000c = points_3d[int(y_0), int(x_0), 2] / 1000distance = ((a**2+b**2+c**2)**0.5)if (distance != 0):  ## Add bbox to imagelabel = f'{names[int(cls)]} {conf:.2f} 'text_xy_0 = "*"print('点 (%d, %d) 的 %s 距离左摄像头的相对距离为 %0.2f m' % (x_center, y_center, label, distance))text_dis_avg = "dis:%0.2fm" % distancecv2.rectangle(im0, (int(x1 + (x2 - x1)), int(y1)),(int(x1 + (x2 - x1) + 5 + 100), int(y1 + 12)), colors[int(cls)],-1)  # 画框存三维坐标cv2.putText(im0, text_dis_avg, (int(x1 + (x2 - x1) + 5), int(y1 + 10)),cv2.FONT_HERSHEY_PLAIN, 1, (255, 255, 255), 2)

3. 细节修改(可忽略)

下边是一些小细节修改,可以忽略不看
为了实时显示画面,对运行的py文件点击编辑配置,在形参那里输入–view-img --save-txt
在这里插入图片描述
但实时显示画面太大,我们对显示部分做了修改,这部分也可以不要,具体是把代码

if view_img:cv2.imshow(str(p), im0)cv2.waitKey(1)  # 1 millisecond

替换成

if view_img:cv2.namedWindow("Webcam", cv2.WINDOW_NORMAL)cv2.resizeWindow("Webcam", 1280, 720)cv2.moveWindow("Webcam", 0, 100)cv2.imshow("Webcam", im0)cv2.waitKey(1)

4. 实验效果

实验效果如下,可以看出来其实这里是存在一些问题的,虽然测距我只让他在左相机画面显示,但是跟踪的话两个相机画面同时进行了跟踪,估计是跟踪模块没有做改动,这一个细节后续也会去深入研究,大家如果有了解这一块如何修改的的也可以联系我

更多测距代码见博客主页源代码后续会开源…

相关文章:

YOLOv5+双目实现三维跟踪(python)

YOLOv5双目实现三维跟踪&#xff08;python&#xff09; 1. 目标跟踪2. 测距模块2.1 测距原理2.2 添加测距 3. 细节修改&#xff08;可忽略&#xff09;4. 实验效果 相关链接 1. YOLOV5 双目测距&#xff08;python&#xff09; 2. YOLOV7 双目测距&#xff08;python&#x…...

ESP8266使用SDK软硬件定时执行函数

1、软件定时 以下接口使用的定时器由软件实现&#xff0c;定时器的函数在任务中被执行。因为任务可能被中断&#xff0c;或者被其他高优先级的任务延迟&#xff0c;因此以下os_timer系列的接口并不能保证定时器精确执行。 注意&#xff1a; ①对于同一个 timer&#xff0c;os…...

ThreadPoolExecutor源码阅读流程图

1.创建线程池 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultThreadFactory(), def…...

如何通过筛选高质量爬虫IP提升爬虫效率?

前言 对于做数据抓取的技术员来说&#xff0c;如何稳定高效的爬取数据ip库池起到决定性作用&#xff0c;对于爬虫ip池的维护&#xff0c;可以从以下几个方面入手&#xff1a; 目录 一、验证爬虫ip的可用性二、更新爬虫ip池三、维护爬虫ip的质量四、监控爬虫ip的使用情况 一、验…...

C#中定义数组--字符串及数组操作

C#中定义数组–字符串及数组操作 以前用VB的时候经常使用数组&#xff0c;不过C#用习惯后数组基本上用的不多了。 像用List<>&#xff0c;ArrayList&#xff0c;Dirctionary<,>都比较好用。 一、一维&#xff1a; int[] numbers new int[]{1,2,3,4,5,6}; //不…...

嵌入式就业怎么样?

嵌入式就业怎么样? 现在的IT行业,嵌入式是大热门&#xff0c;下面也要来给大家介绍下学习嵌入式之后的发展以及就业怎么样。 首先是好找工作。嵌入式人才目前是处于供不应求的状态中&#xff0c;据权威统计机构统计在所有软件开发类人才的需求中&#xff0c;对嵌入式工程师的…...

用户订阅付费如何拆解分析?看这篇就够了

会员制的订阅付费在影音娱乐行业中已相当普及&#xff0c;近几年&#xff0c;不少游戏厂商也开始尝试订阅收费模式。在分析具体的用户订阅偏好以及订阅付费模式带来的增长效果时&#xff0c;我们常常会有这些疑问&#xff1a; 如何从用户的整体付费行为中具体拆解订阅付费事件…...

智能合约中如何调用其他智能合约

智能合约是区块链技术中的一项关键功能&#xff0c;它可以让开发者编写代码来自动执行一系列的操作&#xff0c;从而实现各种复杂的业务逻辑。在许多应用场景中&#xff0c;一个智能合约可能需要调用另一个智能合约来完成某些任务。本文将介绍智能合约如何调用其他智能合约&…...

python的多任务处理

在现代计算机系统中&#xff0c;多任务处理是一项重要的技术&#xff0c;可以大幅提高程序的运行效率。Python语言提供了多种多任务处理的方式&#xff0c;本文将介绍其中几种常见的方式&#xff0c;包括多进程、多线程和协程。 多进程 进程是计算机中运行程序的实例&#xf…...

Vue收集表单数据学习笔记

收集表单数据 v-model双向数据绑定&#xff0c;收集的是input框的value&#xff0c;单选按钮不存在value&#xff0c;就像代码中的男女选项&#xff0c;即使绑定性别v-model“sex”&#xff0c;控制台依然不能接收性别的值&#xff0c;因为没有value值&#xff0c;&#xff0c…...

Linux搭建GitLab私有仓库,并内网穿透实现公网访问

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 转载自远控源码文章&#xff1a;Linux搭建GitLab私有仓库&#xff0c;并内网穿透实现公网访问 …...

SpringBoot项目防重复提交注解开发

背景 在实际开发过程中&#xff0c;防重复提交的操作很常见。有细分配置针对某一些路径进行拦截&#xff0c;也有基于注解去实现的指定方法拦截的。 分析 实现原理 实现防重复提交&#xff0c;我们很容易想到就是用过滤器或者拦截器来实现。 使用拦截器就是继承HandlerInt…...

从软件哲学角度谈 Amazon SageMaker

如果你喜欢哲学并且你是一个 IT 从业者&#xff0c;那么你很可能对软件哲学感兴趣&#xff0c;你能发现存在于软件领域的哲学之美。本文我们就从软件哲学的角度来了解一下亚马逊云科技的拳头级产品 Amazon SageMaker&#xff0c;有两个出发点&#xff1a;一是 SageMaker 本身设…...

C++内联函数

目录 一、常规函数和内联函数的对比 二、如何使用 三、内联函数的特性 四、内联函数与宏 五、如何查看内联函数 六、【面试题】 前言-----内联函数是C中为程序运行速度所做的一项该进。常规函数和内联函数之间的主要区别不在于编写方式&#xff0c;而在于C编译器如何将他…...

JAVA大师的秘籍:轻松掌握高质量代码之道

如果你想写出高质量的代码,那掌握编写技巧可是必不可少哦!这不仅能让你的代码变得更加易读易维护,还可以让你的应用程序性能更强、稳定性更高!所以,别怕麻烦,多花些时间和心思在代码上,相信你一定能成为优秀的JAVA开发者! 要想让代码易读易维护、性能稳定,得拿出耐心和…...

OpenGL入门教程之 变换

引言 这是一个闪耀的时刻&#xff0c;因为我们即将能生产出令人惊叹的3D效果&#xff01; 变换 向量和矩阵变换包括太多内容&#xff0c;但由于学过线性代数和GAMES101&#xff0c;因此不在此做过多阐述。仅阐述包括代码的GLM内容。 GLM的使用 &#xff08;1&#xff09;GLM…...

ASPICE详细介绍-4.车载项目为什么要符合ASPICE标准?

目录 车载项目为什么要符合ASPICE标准&#xff1f;ASPICE与功能安全的关系、区别&#xff1f;各大车厂对软件体系的要求 车载项目为什么要符合ASPICE标准&#xff1f; ASPICE&#xff08;Automotive Software Process Improvement and Capability Determination&#xff09;最…...

一文彻底理解Java 17中的新特性密封类

密封类的作用 在面向对象语言中&#xff0c;我们可以通过继承&#xff08;extend&#xff09;来实现类的能力复用、扩展与增强。但有的时候&#xff0c;有些能力我们不希望被继承了去做一些不可预知的扩展。所以&#xff0c;我们需要对继承关系有一些限制的控制手段。而密封类…...

【Git 入门教程】第四节、Git冲突:如何解决版本控制的矛盾

Git是目前最流行的版本控制系统之一&#xff0c;它为团队协作开发提供了方便和高效的方式。然而&#xff0c;在多人同时修改同一个文件时&#xff0c;可能会出现代码冲突&#xff08;conflict&#xff09;&#xff0c;导致代码无法正确合并。那么&#xff0c;如何解决Git冲突呢…...

c++验证用户输入合法性的示例代码

c验证用户输入合法性的示例代码 本文介绍c验证用户输入合法性&#xff0c;用于检测限定用户输入值。包括&#xff1a;1、限定用户输入为整数&#xff08;正负整数&#xff09;&#xff1b;2、限定用户输入为正整数&#xff1b;3、限定用户输入为正数&#xff08;可以含有小数&…...

Win11系统下JDK1.8(jdk-8u121)环境变量配置保姆级教程,附常见报错排查

Win11系统Java开发环境配置全指南&#xff1a;从安装到故障排查 1. 为什么Java环境配置如此重要&#xff1f; 对于每一位Java开发者来说&#xff0c;正确配置开发环境是迈入编程世界的第一步。想象一下&#xff0c;当你满怀期待地写下第一个"Hello World"程序&#x…...

团队项目空间、角色继承链、资产水印策略——Midjourney新功能三大硬核模块详解,错过将丧失企业级部署资格

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;团队项目空间、角色继承链、资产水印策略——Midjourney新功能三大硬核模块详解&#xff0c;错过将丧失企业级部署资格 Midjourney v6.3 企业版正式引入三大底层架构级能力&#xff1a;团队项目空间&#xff…...

终极指南:如何用5分钟安装FF14动画跳过插件提升副本效率

终极指南&#xff1a;如何用5分钟安装FF14动画跳过插件提升副本效率 【免费下载链接】FFXIV_ACT_CutsceneSkip 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_ACT_CutsceneSkip 还在为《最终幻想14》国服副本中冗长的动画而烦恼吗&#xff1f;FFXIV_ACT_Cutscene…...

PCB直流电阻精确估算:从基础公式到工程实践的全解析

1. 项目概述&#xff1a;为什么需要精确估算PCB直流电阻&#xff1f; 在硬件设计&#xff0c;尤其是电源完整性、信号完整性和热管理的世界里&#xff0c;PCB走线的直流电阻常常是一个被低估的关键参数。很多工程师在设计初期&#xff0c;注意力都集中在阻抗匹配、串扰和EMI上&…...

手把手教你复现CVE-2022-25578:利用.htaccess文件上传绕过,在Taocms 3.0.2靶场拿Flag

从零实战复现CVE-2022-25578&#xff1a;Taocms 3.0.2靶场渗透全解析 在网络安全领域&#xff0c;文件上传漏洞一直是渗透测试中的经典突破口。今天我们将深入剖析CVE-2022-25578漏洞&#xff0c;这是一个基于.htaccess文件配置不当导致的安全问题。不同于简单的漏洞复现教程&a…...

嵌入式AI四大趋势:硬件定义模型、工具链平民化、多模态融合与系统级安全

1. 项目概述&#xff1a;嵌入式AI的十字路口与新机遇最近和几位在芯片原厂、终端设备公司做研发的朋友聊天&#xff0c;大家不约而同地都在讨论同一个话题&#xff1a;嵌入式AI的玩法&#xff0c;好像和几年前不太一样了。过去我们一提到“嵌入式AI”&#xff0c;脑子里蹦出来的…...

终极指南:如何用天津大学LaTeX论文模板彻底告别格式烦恼

终极指南&#xff1a;如何用天津大学LaTeX论文模板彻底告别格式烦恼 【免费下载链接】TJUThesisLatexTemplate LaTeX templates for TJU graduate thesis. Originally forked from code.google.com/p/tjuthesis 项目地址: https://gitcode.com/gh_mirrors/tj/TJUThesisLatexT…...

【会议征稿通知 | E3S出版 | EI 、Scopus稳定检索】第十二届能源材料与环境工程国际学术会议(ICEMEE 2026)

第十二届能源材料与环境工程国际学术会议&#xff08;ICEMEE 2026&#xff09; 2026 12th International Conference on Energy Materials and Environment Engineering 2026年6月12-14日 | 线上会议 大会官网&#xff1a;www.icemee.net 截稿时间&#xff1a;见官网&#x…...

手把手教你用Verilog在FPGA上实现Sobel边缘检测(附完整Matlab图片转TXT流程)

从图像到硬件加速&#xff1a;FPGA实现Sobel边缘检测全流程实战指南 在计算机视觉领域&#xff0c;边缘检测作为基础预处理步骤&#xff0c;直接影响着后续特征提取和目标识别的精度。传统基于CPU的算法实现往往难以满足实时性要求&#xff0c;而FPGA凭借其并行计算能力和低延迟…...

不只是格式化:深入理解Mac磁盘工具里的‘分区方案’(GUID/MBR/APM),选对才能跨平台读写

不只是格式化&#xff1a;深入理解Mac磁盘工具里的‘分区方案’&#xff08;GUID/MBR/APM&#xff09;&#xff0c;选对才能跨平台读写 当你将一块移动硬盘从APFS格式化为ExFAT后&#xff0c;满心欢喜地插到Windows电脑上&#xff0c;却依然收到"需要格式化"的提示—…...