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

yolov8+deepsort+botsort+bytetrack车辆检测和测速系统

结合YOLOv8、DeepSORT、BoTSORT和ByteTrack等技术,可以实现一个高效的车辆检测和测速系统。这样的系统适用于交通监控、智能交通管理系统(ITS)等领域,能够实时识别并跟踪车辆,并估算其速度。

项目介绍

本项目旨在开发一个综合性的车辆检测和测速系统,该系统利用先进的目标检测和多目标跟踪技术,能够实现在视频流中对车辆进行实时检测、跟踪,并计算车辆的速度。系统主要分为以下几个部分:

  1. 目标检测:使用YOLOv8模型进行车辆检测。
  2. 目标跟踪:结合DeepSORT、BoTSORT和ByteTrack算法实现多目标跟踪。
  3. 测速:基于车辆在视频中的位移和时间差来计算速度。
  4. 用户界面:使用PyQt5构建GUI,便于用户操作和查看结果。

关键功能

  • 实时车辆检测:通过YOLOv8模型实时检测视频中的车辆。
  • 多目标跟踪:利用DeepSORT、BoTSORT和ByteTrack算法同时跟踪多个车辆。
  • 速度估计:根据车辆在视频中的运动轨迹和时间差计算速度。
  • 用户界面:提供图形用户界面供用户启动分析并查看结果。

技术栈

  • 目标检测:YOLOv8(You Only Look Once v8)
  • 多目标跟踪:DeepSORT、BoTSORT、ByteTrack
  • 图形用户界面:PyQt5
  • 视频处理:OpenCV
  • 编程语言:Python

关键代码示例

1. 安装依赖

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

1pip install opencv-python torch torchvision pyqt5 numpy scikit-learn filterpy
2pip install ultralytics  # 用于YOLOv8
3git clone https://github.com/nwojke/deep_sort.git  # DeepSORT
4git clone https://github.com/ifzhang/ByteTrack.git  # ByteTrack
5git clone https://github.com/ifzhang/BoT-SORT.git  # BoTSORT
2. 导入库
1import sys
2import cv2
3import numpy as np
4import torch
5from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton
6from PyQt5.QtCore import QTimer
7from PyQt5.QtGui import QImage, QPixmap
8from ultralytics import YOLO  # 使用YOLOv8的最新版本
9from deep_sort_pytorch.deep_sort import DeepSort  # DeepSORT
10from botsort import BoTSORT  # BoTSORT
11from bytetrack import BYTETracker  # ByteTrack
3. 初始化模型

假设YOLOv8模型的权重文件位于weights/yolov8.pt

1device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
2yolo_model = YOLO('weights/yolov8.pt').to(device)
3
4# 初始化跟踪器
5deepsort = DeepSort(
6    "deep_sort_pytorch/deep_sort/deep/checkpoint/ckpt.t7",
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)
14
15botsort = BoTSORT(device, max_age=1, min_hits=3, iou_threshold=0.1)
16bytetrack = BYTETracker(device, fp16=True, track_thresh=0.5, track_buffer=30, match_thresh=0.8)
4. 创建GUI

创建一个简单的GUI来显示视频流和检测结果。

1class VideoAnalysisWindow(QMainWindow):
2    def __init__(self):
3        super().__init__()
4        self.initUI()
5
6    def initUI(self):
7        self.setWindowTitle('车辆检测与测速系统')
8        self.setGeometry(100, 100, 800, 600)
9        
10        layout = QVBoxLayout()
11        self.label = QLabel(self)
12        layout.addWidget(self.label)
13        
14        button = QPushButton('开始分析', self)
15        button.clicked.connect(self.start_analysis)
16        layout.addWidget(button)
17        
18        container = QWidget()
19        container.setLayout(layout)
20        self.setCentralWidget(container)
21    
22    def start_analysis(self):
23        self.capture = cv2.VideoCapture(0)  # 使用摄像头0作为视频源
24        self.timer = QTimer()
25        self.timer.timeout.connect(self.update_frame)
26        self.timer.start(20)  # 每50毫秒更新一次画面
27
28    def update_frame(self):
29        ret, frame = self.capture.read()
30        if ret:
31            # 检测车辆
32            results = yolo_model(frame)
33            detections = results.xyxy[0].cpu().numpy()
34            
35            # 跟踪车辆
36            tracks = deepsort.update(detections, frame)
37            tracks_botsort = botsort.update(detections, frame)
38            tracks_bytetrack = bytetrack.update(detections, frame)
39            
40            # 绘制边界框
41            self.draw_boxes(frame, tracks)
42            self.draw_boxes(frame, tracks_botsort)
43            self.draw_boxes(frame, tracks_bytetrack)
44            
45            # 显示结果
46            self.display_results(frame)
47            
48    def draw_boxes(self, frame, tracks):
49        for track in tracks:
50            bbox = track[:4]
51            id = int(track[4])
52            x1, y1, x2, y2 = [int(i) for i in bbox]
53            cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)
54            cv2.putText(frame, f"ID: {id}", (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (36, 255, 12), 2)
55    
56    def display_results(self, frame):
57        height, width, channel = frame.shape
58        bytesPerLine = 3 * width
59        qImg = QImage(frame.data, width, height, bytesPerLine, QImage.Format_BGR888)
60        pixmap = QPixmap.fromImage(qImg)
61        self.label.setPixmap(pixmap)
62
63if __name__ == '__main__':
64    app = QApplication(sys.argv)
65    window = VideoAnalysisWindow()
66    window.show()
67    sys.exit(app.exec_())

测速逻辑

测速逻辑可以通过计算车辆在视频中的位移和时间差来实现。具体来说,可以跟踪车辆的轨迹,并记录其在不同时间点的位置,然后使用这些信息来估算速度。

1def estimate_speed(tracks, fps):
2    speeds = []
3    for track in tracks:
4        # 获取轨迹点
5        positions = track['positions']
6        timestamps = track['timestamps']
7        
8        # 计算速度
9        for i in range(len(positions) - 1):
10            distance = np.linalg.norm(positions[i + 1] - positions[i])
11            time_diff = timestamps[i + 1] - timestamps[i]
12            speed = distance / time_diff * fps
13            speeds.append(speed)
14    
15    return speeds

结论

通过结合YOLOv8、DeepSORT、BoTSORT和ByteTrack等技术,本项目实现了一个功能完备的车辆检测和测速系统。该系统能够实时检测视频中的车辆,跟踪它们的运动,并计算速度。此外,系统还提供了一个简单的图形用户界面,使得用户可以轻松启动分析并查看结果。随着技术的不断发展和完善,这样的系统将在智能交通管理、公共安全等领域发挥越来越重要的作用。

相关文章:

yolov8+deepsort+botsort+bytetrack车辆检测和测速系统

结合YOLOv8、DeepSORT、BoTSORT和ByteTrack等技术,可以实现一个高效的车辆检测和测速系统。这样的系统适用于交通监控、智能交通管理系统(ITS)等领域,能够实时识别并跟踪车辆,并估算其速度。 项目介绍 本项目旨在开发…...

基于准静态自适应环型缓存器(QSARC)的taskBus万兆吞吐实现

文章目录 概要整体架构流程技术名词解释技术细节1. 数据结构2. 自适应计算队列大小3. 生产者拼接缓存4. 高效地通知消费者 小结1. 性能表现情况2. 主要改进和局限3. 源码和发行版 概要 准静态自适应环形缓存器(Quasi-Static Adaptive Ring Cache)是task…...

C++笔记---指针常量和常量指针

巧记方法(方法来自于网络出处忘记了):const读作常量,*读作指针,按顺序读即可。例如: const int * ptr; //const在前*在后读作常量指针 const * int ptr; //const在前*在后读作常量指针 int * const prt; /…...

Python习题 177:设计银行账户类并实现存取款功能

(编码题)Python 实现一个简单的银行账户类 BankAccount,包含初始化方法、存款、取款、获取余额等功能。 参考答案 分析需求如下。 Python 类 BankAccount,用于模拟银行账户的基本功能。该类应包含以下方法: 初始化方法: 接受两个参数:account_holder(账户持有人的姓…...

IPhone 16:它的 “苹果智能 “包括哪些内容?

IPhone 16 的发布让科技界看到了该公司的人工智能产品 “苹果智能”(Apple Intelligence)究竟能做些什么。 苹果公司发布了拥有人工智能硬件升级的最新款 iPhone 16,进一步进军人工智能领域。苹果公司首席执行官蒂姆-库克(Tim Coo…...

【中国国际航空-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...

【ArcGIS】栅格计算器原理及案例介绍

ArcGIS:栅格计算器原理及案例介绍 栅格计算器(Raster Calculator)原理介绍案例案例1:计算栅格数据平均值 参考 栅格计算器(Raster Calculator)原理介绍 描述:在类似计算器的界面中,…...

LOOKUP函数和VLOOKUP函数知识讲解与案例演示

〇、需求 在 Excel 文档中,根据查找值从查找域和结果域构成的数组中,找到对应的结果值。 一、知识点讲解 LOOKUP函数(比较常用,推荐)和VLOOKUP函数 两个公式都可以实现上述需求。 1. LOOKUP 函数 1.1 单个查询条件…...

Java技术深度探索:高并发场景下的线程安全与性能优化

Java技术深度探索:高并发场景下的线程安全与性能优化 在当今的软件开发领域,随着互联网应用的日益复杂和用户量的激增,高并发成为了一个不可忽视的技术挑战。Java,作为一门广泛应用于企业级开发的编程语言,其内置的并发支持机制如线程(Thread)、锁(Lock)、并发集合(…...

Vulnhub-RickdiculouslyEasy靶场(9个flag)

flag1 端口9090有一个flag flag2 13337端口 flag3 使用dirb进行扫描网站的80端口,发现一些敏感文件 访问80端口,没有发现有效信息 访问passwords目录 访问FLAG.txt 再返回访问passwords.html文件 查看页面源代码发现一个密码 flag4 之前扫描到了robo…...

Android Studio Menu制作

文章目录 在Activity上新建onCreateOptionsMenu新建menu目录及资源文件新建Menu一级菜单在Activity上加载Menu 在Activity上新建onCreateOptionsMenu Overridepublic boolean onCreateOptionsMenu(Menu menu) {return super.onCreateOptionsMenu(menu);}新建menu目录及资源文件…...

【mybatis】使用模糊查询时报错:Encountered unexpected token: “?“ “?“

报错信息如下: Mapper.xml报错代码: AND HILIST_NAME like %#{hilistName}% 解决方案: 把模糊查询的 sql 语句改为使用 CONCAT 命令拼接, 就不会报错了。 AND HILIST_NAME like CONCAT(%, #{hilistName},%)...

【Linux】文件权限与类型全解:你的文件安全指南

欢迎来到 CILMY23 的博客 🏆本篇主题为:文件权限与类型全解:你的文件安全指南 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法专题…...

解析DNS查询报文,探索DNS工作原理

目录 1. 用 tcpdump工具监听抓包 2. 用 host 工具获取域名对应的IP地址 3. 分析DNS以太网查询数据帧 3.1 linux下查询DNS服务器IP地址 3.2 DNS以太网查询数据帧 (1)数据链路层 (2)网络层 (3)传输层…...

Unity让摄像机跟随物体的方法(不借助父子关系)

在Unity中,不使用子对象的方式让相机跟随物体移动,我们通过编写脚本来实现。下面放一个从工程中摘出来的的C#脚本示例,用于将相机绑定到一个Target对象上并跟随其移动: using UnityEngine; public class FollowCamera : MonoBeh…...

misc音频隐写

一、MP3隐写 (1)题解:下载附件之后是一个mp3的音频文件;并且题目提示keysyclovergeek;所以直接使用MP3stego对音频文件进行解密;mp3stego工具是音频数据分析与隐写工具 (2)mp3stego工具的使用:…...

如何启动网络安全计划:首先要做的事情

目录 数据分类:网络安全的基石 为什么它很重要? 如何对数据进行分类? 风险分析 什么是风险分析? 如何进行风险分析? 业务影响分析 (BIA) BIA 的用途是什么? BIA 是如何进行的? 安全解…...

Java零基础-三维数组详解!

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互…...

数据分析-20-时间序列预测之基于PyTorch的LSTM数据准备及模型训练流程

文章目录 1 数据加载2 去除异常值3 数据归一化4 切分窗口5 制作数据集加载器6 定义模型7 训练模型8 模型评估9 参考附录1 数据加载 参考数据集kaggle下载DailyDelhiClimate import pandas as pd import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] = SimHei # 设…...

vue2中使用web worker启动定时器

vue2中使用web worker启动定时器,避免浏览器最小化或切换标签页时定时器不能按设定周期执行【一般是周期小于60s时,大于60s一般可正常执行】 1、添加worker-loader2、修改vue.config.js3、创建timer.worker.js4、创建TimerWorker.js5、使用TimerWorker启…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...