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

保姆级教程:用YOLOv8+ByteTrack搞定视频多目标追踪(附完整Python代码)

从零实现视频多目标追踪YOLOv8与ByteTrack实战指南在智能监控、自动驾驶和体育分析等领域视频中的多目标追踪技术正发挥着越来越重要的作用。想象一下当我们需要分析一段繁忙路口的监控视频不仅要识别出行人和车辆还要持续跟踪它们的运动轨迹——这正是多目标追踪(Multi-Object Tracking, MOT)技术的用武之地。本文将手把手带您实现一个完整的视频多目标追踪系统结合当前最先进的YOLOv8目标检测算法和ByteTrack追踪算法即使您是刚接触计算机视觉的新手也能快速搭建出可用的解决方案。1. 环境准备与工具安装在开始编码前我们需要配置合适的开发环境。推荐使用Python 3.8或更高版本这是大多数计算机视觉库支持良好的Python版本。为了避免与其他项目产生依赖冲突建议使用虚拟环境。创建并激活虚拟环境的命令如下python -m venv mot_env source mot_env/bin/activate # Linux/MacOS mot_env\Scripts\activate # Windows接下来安装核心依赖库。YOLOv8由Ultralytics团队维护而ByteTrack的实现我们可以使用Supervision库它提供了简洁易用的接口pip install ultralytics supervision opencv-python tqdm numpy这些库各自的作用是ultralytics: YOLOv8的官方实现supervision: 提供ByteTrack等计算机视觉工具opencv-python: 视频处理和可视化tqdm: 进度条显示numpy: 数值计算基础库提示如果遇到安装问题可以尝试先升级pippip install --upgrade pip验证安装是否成功可以运行以下Python代码检查版本import ultralytics print(ultralytics.__version__) # 应显示8.x.x版本2. YOLOv8模型原理与使用YOLOv8是YOLO系列的最新版本在速度和精度之间取得了更好的平衡。与之前版本相比它的主要改进包括更高效的骨干网络使用改进的CSP结构提升特征提取能力更精确的锚框预测优化了边框回归机制更灵活的使用方式支持目标检测、实例分割和姿态估计等多种任务使用YOLOv8进行目标检测非常简单。首先下载预训练模型我们可以选择不同大小的模型模型类型参数量推理速度(FPS)mAP(COCO)适用场景YOLOv8n3.2M45037.3移动端/嵌入式YOLOv8s11.4M25044.9平衡型YOLOv8m26.2M12050.2性能优先YOLOv8l43.7M8052.9服务器端YOLOv8x68.2M6053.9最高精度需求加载和使用模型的示例代码from ultralytics import YOLO # 加载预训练模型(会自动下载) model YOLO(yolov8n.pt) # 使用nano版本 # 单张图片检测 results model(image.jpg) # 视频流检测 results model.predict(video.mp4, saveTrue)在实际应用中我们需要根据硬件条件和精度需求选择合适的模型。对于大多数追踪场景YOLOv8s或YOLOv8m是不错的选择。3. ByteTrack追踪算法深度解析ByteTrack是2021年提出的高效多目标追踪算法其核心创新在于充分利用了低置信度的检测框这在处理遮挡场景时特别有效。传统追踪算法如SORT和DeepSORT通常会丢弃低置信度的检测结果而ByteTrack通过两阶段匹配策略保留了这些信息。ByteTrack的工作流程可以分为以下几个关键步骤检测阶段使用检测器(如YOLOv8)获取当前帧的所有检测框并按置信度分为高置信度和低置信度两组第一次匹配将高置信度检测框与现有轨迹进行匹配第二次匹配将低置信度检测框与未匹配的轨迹进行匹配轨迹管理更新匹配成功的轨迹为未匹配的检测创建新轨迹移除长时间未匹配的轨迹这种策略带来的优势包括更好的处理遮挡情况减少轨迹断裂保持更稳定的ID分配ByteTrack与其他主流追踪算法的对比算法使用外观特征处理低分检测框计算复杂度MOTASORT否否低74.6DeepSORT是否中75.4ByteTrack可选是低-中76.64. 完整视频追踪系统实现现在我们将YOLOv8和ByteTrack结合起来实现一个完整的视频多目标追踪系统。这个系统将读取输入视频检测并追踪其中的目标最后输出带有追踪结果和ID标记的视频。首先定义视频处理函数import cv2 import numpy as np from tqdm import tqdm import supervision as sv from ultralytics import YOLO def process_video( model_path: str, source_video: str, output_video: str, conf_thresh: float 0.3, iou_thresh: float 0.5, target_classes: list None ): # 初始化模型和追踪器 model YOLO(model_path) tracker sv.ByteTrack() # 创建视频信息对象 video_info sv.VideoInfo.from_video_path(source_video) # 初始化标注工具 box_annotator sv.BoundingBoxAnnotator() label_annotator sv.LabelAnnotator() # 打开视频输出流 with sv.VideoSink(output_video, video_info) as sink: # 逐帧处理视频 for frame in tqdm(sv.get_video_frames_generator(source_video), totalvideo_info.total_frames): # 使用YOLOv8进行检测 results model(frame, verboseFalse, confconf_thresh, iouiou_thresh)[0] detections sv.Detections.from_ultralytics(results) # 如果指定了目标类别进行过滤 if target_classes: class_filter np.isin(detections.class_id, target_classes) detections detections[class_filter] # 使用ByteTrack更新追踪结果 detections tracker.update_with_detections(detections) # 准备标注标签 (ID 类别 置信度) labels [ f#{track_id} {model.model.names[class_id]} {confidence:.2f} for track_id, class_id, confidence in zip(detections.tracker_id, detections.class_id, detections.confidence) ] # 标注边界框和标签 annotated_frame box_annotator.annotate(frame.copy(), detections) annotated_frame label_annotator.annotate(annotated_frame, detections, labels) # 写入输出视频 sink.write_frame(annotated_frame)使用这个函数处理视频# 示例追踪行人和车辆 process_video( model_pathyolov8s.pt, source_videotraffic.mp4, output_videooutput.mp4, conf_thresh0.3, target_classes[0, 2, 5, 7] # COCO类别中的人、车、公交车、卡车 )5. 参数调优与性能优化要让追踪系统在实际场景中表现更好我们需要调整几个关键参数1. 检测置信度阈值(conf_thresh)值越高检测框越少但更可靠值越低检测框越多但可能包含更多误检推荐范围0.2-0.52. IoU阈值(iou_thresh)控制非极大值抑制(NMS)的严格程度值越高保留的重叠框越少推荐范围0.4-0.73. 目标类别选择只追踪感兴趣的类别可以减少干扰COCO数据集的常见类别ID0: person2: car5: bus7: truck性能优化技巧对于实时应用可以使用model.track()方法代替分开的检测和追踪调整视频处理分辨率model.predict(source, imgsz640)使用TensorRT加速model.export(formatengine)# 更高效的实时追踪方式 model YOLO(yolov8s.pt) results model.track(video.mp4, showTrue, trackerbytetrack.yaml)6. 常见问题与解决方案在实际部署过程中可能会遇到一些典型问题问题1ID切换频繁可能原因检测置信度阈值过低解决方案提高conf_thresh或使用更强的检测模型问题2轨迹断裂可能原因目标被遮挡或检测不稳定解决方案降低conf_thresh确保ByteTrack能利用低分检测框问题3计算速度慢可能原因模型太大或硬件性能不足解决方案换用更小的YOLOv8模型(nano或small)降低处理分辨率使用GPU加速问题4特定类别检测效果差可能原因预训练模型在该类别上表现不佳解决方案在自己的数据上微调模型使用专门的数据集(如UA-DETRAC用于车辆追踪)一个完整的解决方案应该包括异常处理例如try: process_video(...) except Exception as e: print(f处理视频时出错: {str(e)}) # 可能的恢复操作或日志记录7. 进阶功能扩展基础追踪系统搭建完成后可以考虑添加更多实用功能1. 越界检测在视频中定义虚拟线或区域检测目标穿越情况line_start sv.Point(0, 360) line_end sv.Point(1280, 360) line_counter sv.LineZone(startline_start, endline_end) # 在每帧处理中添加 line_counter.trigger(detections)2. 轨迹绘制可视化目标的运动轨迹trace_annotator sv.TraceAnnotator() annotated_frame trace_annotator.annotate(annotated_frame, detections)3. 区域计数统计特定区域内目标数量polygon np.array([[100,100], [1100,100], [1100,700], [100,700]]) zone sv.PolygonZone(polygon, frame_resolution_wh(1280,720)) zone.trigger(detections)4. 多摄像头支持扩展系统以处理多个视频源def multi_camera_processing(camera_urls): for url in camera_urls: cap cv2.VideoCapture(url) while True: ret, frame cap.read() if not ret: break # 处理帧...5. 结果分析与导出将追踪结果保存为结构化数据import pandas as pd tracking_data [] # 在每帧处理中收集数据 for det in detections: tracking_data.append({ frame_id: current_frame, track_id: det.tracker_id, class: model.model.names[det.class_id], bbox: det.xyxy[0].tolist(), confidence: det.confidence }) # 保存为CSV pd.DataFrame(tracking_data).to_csv(tracking_results.csv, indexFalse)

相关文章:

保姆级教程:用YOLOv8+ByteTrack搞定视频多目标追踪(附完整Python代码)

从零实现视频多目标追踪:YOLOv8与ByteTrack实战指南 在智能监控、自动驾驶和体育分析等领域,视频中的多目标追踪技术正发挥着越来越重要的作用。想象一下,当我们需要分析一段繁忙路口的监控视频,不仅要识别出行人和车辆&#xff0…...

突破Mac网络限制:用HoRNDIS实现Android手机USB网络共享

突破Mac网络限制:用HoRNDIS实现Android手机USB网络共享 【免费下载链接】HoRNDIS Android USB tethering driver for Mac OS X 项目地址: https://gitcode.com/gh_mirrors/ho/HoRNDIS 你是否曾在咖啡厅、机场或户外工作时,因为Wi-Fi信号不稳定而影…...

基于分层隔离与消息代理的跨浏览器扩展架构:Zotero Connector 3层系统设计解析

基于分层隔离与消息代理的跨浏览器扩展架构:Zotero Connector 3层系统设计解析 【免费下载链接】zotero-connectors Chrome, Firefox, Edge, and Safari extensions for Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-connectors Zotero Conne…...

Faster-Whisper-GUI:3步搞定专业级音视频转文字,比手动快10倍

Faster-Whisper-GUI:3步搞定专业级音视频转文字,比手动快10倍 【免费下载链接】faster-whisper-GUI faster_whisper GUI with PySide6 项目地址: https://gitcode.com/gh_mirrors/fa/faster-whisper-GUI 还在为海量音视频文件转文字而烦恼吗&…...

从论文到实践:手把手复现UFLDv2车道线检测模型(PyTorch版)与CULane数据集评测指南

从零构建UFLDv2车道检测系统:PyTorch实战与CULane评测全解析 车道线检测作为自动驾驶感知系统的核心组件,其准确性和实时性直接影响着车辆的安全行驶。传统基于分割的方法虽然直观,但存在计算成本高、对遮挡场景适应性差等固有缺陷。UFLD系列…...

theone陪伴ai免费版theone陪伴ai下载教程

theone陪伴ai免费版theone陪伴ai下载 📢提示:资源链接地址放在文章结尾👇👇,往下翻就行 📢提示:资源链接地址放在文章结尾👇👇,往下翻就行 theone陪伴ai&…...

R语言在LLM偏见分析中的统计建模实战(2024最新F1-Bias检验框架首次公开)

更多请点击: https://intelliparadigm.com 第一章:R语言在LLM偏见分析中的统计建模实战(2024最新F1-Bias检验框架首次公开) F1-Bias 是2024年新提出的多维偏见量化指标,融合了类别敏感性(Recall-Bias&…...

PHP 9.0 Fiber + AI Bot推理流水线:单机万级并发下LLM Token流低延迟投递方案(含v8引擎JIT协同优化细节)

更多请点击: https://intelliparadigm.com 第一章:PHP 9.0 异步编程与 AI 聊天机器人对比评测报告 PHP 9.0(预发布版)引入了原生协程调度器(Swoole Core Integration)和 async/await 语法糖,标…...

自然语言生成代码审查

自然语言生成代码审查:当AI成为你的编程搭档 在软件开发中,代码审查是确保质量的关键环节,但传统人工审查耗时耗力。随着AI技术的进步,自然语言生成(NLG)驱动的代码审查工具正逐渐兴起。这类工具不仅能自动…...

C#项目日志配置踩坑实录:从log4net基础配置到生产环境最佳实践

C#项目日志配置踩坑实录:从log4net基础配置到生产环境最佳实践 在多年的C#项目开发中,我发现日志系统就像项目的"黑匣子"——平时无人问津,一出问题却成了救命稻草。而log4net作为.NET生态中最成熟的日志框架之一,其强大…...

摩尔线程 × 上海AI实验室|基于S5000和KernelSwift实现DeepSeek-V4核心算子Day-0适配

今日,DeepSeek-V4预览版正式发布并开源。摩尔线程携手上海 AI 实验室 DeepLink 团队,通过大模型驱动的智能算子迁移系统 KernelSwift,率先在旗舰级AI训推一体智算卡 MTT S5000 上完成了核心算子的Day-0适配。目前算子通过率已超80%&#xff0…...

ARM C库I/O重定向机制与嵌入式开发实践

1. ARM C库I/O重定向机制深度解析在嵌入式开发领域,标准C库的I/O函数(如printf、scanf)通常需要通过底层适配才能与具体硬件设备协同工作。ARM C库提供了一套灵活的机制,允许开发者重定义目标相关的系统I/O函数,实现与…...

DyberPet桌面宠物框架:从零开始打造你的专属数字伙伴

DyberPet桌面宠物框架:从零开始打造你的专属数字伙伴 【免费下载链接】DyberPet Desktop Cyber Pet Framework based on PySide6 项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet 你是否曾经想过,让一个可爱的虚拟角色常驻在你的电脑…...

外包经历对程序员职业生涯的影响

外包经历对程序员职业生涯的影响 在当今全球化的技术环境中,外包已成为许多企业降低成本、提高效率的重要手段。对于程序员而言,参与外包项目既是机遇也是挑战。外包经历不仅能拓宽技术视野,还可能对职业发展产生深远影响。本文将从多个角度…...

Packet Tracer 中文语言包安装指南

思科模拟器(特别是Cisco Packet Tracer)可以通过安装中文语言包,将软件界面、菜单及部分设备注释切换为中文 。其核心设置方法是通过替换语言文件并修改软件首选项来实现。 1. 思科模拟器中文化方法详解 思科Packet Tracer的中文化并非通过…...

recycleview列表多种样式,列表为空的设置,列表刷新

刷新列表&#xff1a;尽量使用&#xff1a;adapter.notifyItemRangeChanged&#xff08;0&#xff0c;list.size()&#xff09;&#xff0c;或者类似方法&#xff0c;有动画&#xff1b;adapterpublic class Adapter2 extends RecyclerView.Adapter<Adapter2.ViewHolder2>…...

别再傻傻分不清了!一文搞懂蓝牙BR/EDR、BLE和LE2M到底有啥区别(附应用场景选择指南)

蓝牙技术选型指南&#xff1a;BR/EDR、BLE与LE2M的核心差异与实战选择 当你准备开发一款智能手环时&#xff0c;技术文档里突然冒出BR/EDR、BLE、LE2M这些术语——它们看起来都带着"蓝牙"前缀&#xff0c;但功耗参数相差十倍&#xff0c;传输距离可能差出百米。三年前…...

MySQL explain 输出分析指南

MySQL explain 输出分析指南&#xff1a;优化SQL性能的钥匙 在数据库性能优化中&#xff0c;MySQL的explain命令是开发者不可或缺的工具。通过分析其输出结果&#xff0c;可以深入了解SQL语句的执行计划&#xff0c;从而发现潜在的性能瓶颈。无论是慢查询的排查&#xff0c;还…...

别再只靠外部中断了!TM1650按键扫描的DP引脚正确用法与防干扰实践

TM1650按键扫描进阶实战&#xff1a;从基础中断到工业级可靠性的设计跃迁 在嵌入式人机交互设计中&#xff0c;按键扫描模块的可靠性直接影响用户体验。TM1650作为集成了LED驱动和键盘扫描功能的芯片&#xff0c;其DP引脚的中断特性既是便利也是陷阱。本文将带您从基础中断实现…...

2026年招投标网站怎么选?正规靠谱平台深度解析,帮你精准抓住投标商机

在当前竞争愈发激烈的招投标市场赛道中&#xff0c;能否抢先获取时效性强、真实精准的投标机会&#xff0c;已经成为所有企业业务团队、销售部门开展工作的核心竞争力。对于想要持续拓展业务、稳定获取新项目订单的企业来说&#xff0c;选对符合自身需求的优质招投标信息平台&a…...

调试 jar 包时遇到 exec 命令(或进程)一直转圈(挂起/无响应)

在使用IDEA调试项目时&#xff0c;莫名遇到有一个exec命令一直转圈&#xff0c;点击结束调试时&#xff0c;这个命令也一直在转圈&#xff0c;没有停止。以前从来没有遇见过&#xff0c;仔细看启动控制台的启动命令&#xff0c;出现了agentlib、dt_socket、exec-maven-plugin等…...

3步解锁全中文Figma:设计师必备的figmaCN插件使用指南

3步解锁全中文Figma&#xff1a;设计师必备的figmaCN插件使用指南 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 对于中文设计师来说&#xff0c;Figma虽然功能强大&#xff0c;但英文…...

Linux新手必看:手把手教你搞定Realtek RTL8821CU USB无线网卡驱动(含Ubuntu 22.04实战)

Linux新手实战&#xff1a;Ubuntu 22.04下Realtek RTL8821CU无线网卡驱动全攻略 刚接触Linux的用户常常会在硬件兼容性上碰壁&#xff0c;尤其是那些价格亲民的USB无线网卡。Realtek RTL8821CU芯片组的设备就是典型代表——它们在Windows上即插即用&#xff0c;但在Linux系统中…...

Win11Debloat:让Windows系统恢复流畅的终极优化指南

Win11Debloat&#xff1a;让Windows系统恢复流畅的终极优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cust…...

IDEA全局配置 (Maven环境和JDK版本)

国内镜像源下载jdk&#xff1a; https://www.cnblogs.com/xiaoyuicom/p/15386997.html 知乎教程&#xff1a; https://zhuanlan.zhihu.com/p/690734376 非常好用的教程。...

如何用OnStep在1小时内将普通望远镜升级为智能天文观测系统

如何用OnStep在1小时内将普通望远镜升级为智能天文观测系统 【免费下载链接】OnStep Arduino telescope goto for equatorial and alt/az mounts 项目地址: https://gitcode.com/gh_mirrors/on/OnStep 你是否曾经仰望星空&#xff0c;却被繁琐的手动寻星和跟踪操作困扰&…...

OpenRGB:3步实现跨品牌RGB灯光统一控制,告别软件冲突烦恼

OpenRGB&#xff1a;3步实现跨品牌RGB灯光统一控制&#xff0c;告别软件冲突烦恼 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/O…...

专业潮汐模型驱动工具箱:TMD Matlab Toolbox v2.5 完整技术指南

专业潮汐模型驱动工具箱&#xff1a;TMD Matlab Toolbox v2.5 完整技术指南 【免费下载链接】TMD_Matlab_Toolbox_v2.5 项目地址: https://gitcode.com/gh_mirrors/tm/TMD_Matlab_Toolbox_v2.5 TMD Matlab Toolbox v2.5&#xff08;潮汐模型驱动工具箱&#xff09;是由…...

终极Markdown预览体验:如何在5分钟内掌握VSCode最强扩展

终极Markdown预览体验&#xff1a;如何在5分钟内掌握VSCode最强扩展 【免费下载链接】vscode-markdown-preview-enhanced One of the "BEST" markdown preview extensions for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-markdown-pr…...

【锂电池】锂离子电池RC二阶等效电路递推最小二乘法在线参数辨识simulink(附参考文献)

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...