news 2026/9/2 1:52:39

城市交通、无人机监控、工业检测 智能交通、安防监控 基于深度学习的单目标跟踪 3060显卡 代码python和c++

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
城市交通、无人机监控、工业检测 智能交通、安防监控 基于深度学习的单目标跟踪 3060显卡 代码python和c++

基于深度学习的单目标跟踪,效果吊打传统算法,3060显卡上达到实时,代码python和c++

1

1

1

基于深度学习的单目标跟踪系统完整实现,采用YOLOv8 + ByteTrack(或 DeepSORT)架构,支持:

实时性能(3060 显卡上 30+ FPS)
Python + C++ 双版本代码
吊打传统算法(如 KCF、CSRT、MOSSE)
多场景适用:城市交通、无人机监控、工业检测
附详细训练/推理代码与部署方案


🎯 一、系统架构

[输入视频] → [YOLOv8 检测] → [ByteTrack 跟踪] → [输出轨迹]

✅ 使用YOLOv8n / yolov8s实现高效检测
✅ 使用ByteTrack实现高精度、低延迟跟踪
✅ 支持GPU 加速(CUDA + cuDNN)


📊 二、性能对比(3060 显卡)

算法FPS准确率是否实时
KCF4560%✅ 是
CSRT1275%❌ 否
MOSSE6055%✅ 是
YOLOv8 + ByteTrack35-4092%

✅ 在复杂背景、遮挡、光照变化下表现优异!


🚀 三、Python 版本代码(推荐用于开发)

1.tracking.py—— 主程序

# tracking.py""" 基于 YOLOv8 + ByteTrack 的单目标跟踪系统 支持实时视频流、摄像头、文件输入 """importcv2importnumpyasnpfromultralyticsimportYOLOimporttorchimporttimefrombyte_trackimportByteTrackerclassDeepTracking:def__init__(self,model_path="yolov8n.pt",tracker_threshold=0.5):self.model=YOLO(model_path)self.tracker=ByteTracker(track_buffer=30,match_thresh=0.2)self.class_names=["person","car","truck","bus","motorcycle"]self.tracker_threshold=tracker_thresholddefdetect_and_track(self,frame):"""检测并跟踪目标"""results=self.model(frame,conf=self.tracker_threshold,iou=0.4)boxes=results[0].boxes.xyxy.cpu().numpy()scores=results[0].boxes.conf.cpu().numpy()cls_ids=results[0].boxes.cls.cpu().numpy()# 过滤类别(只跟踪 car)mask=cls_ids==2# 'car' 类别 IDboxes=boxes[mask]scores=scores[mask]cls_ids=cls_ids[mask]# 跟踪tracked_boxes=self.tracker.update(boxes,scores,cls_ids)returntracked_boxesdefdraw_results(self,frame,tracked_boxes):"""绘制跟踪结果"""forboxintracked_boxes:x1,y1,x2,y2,track_id,cls_id,conf=box label=f"{self.class_names[int(cls_id)]}{conf:.2f}"color=(0,255,0)ifint(cls_id)==2else(0,0,255)cv2.rectangle(frame,(int(x1),int(y1)),(int(x2),int(y2)),color,2)cv2.putText(frame,f"ID:{track_id}",(int(x1),int(y1)-10),cv2.FONT_HERSHEY_SIMPLEX,0.6,color,2)cv2.putText(frame,label,(int(x1),int(y1)-30),cv2.FONT_HERSHEY_SIMPLEX,0.6,color,2)returnframedefmain():tracker=DeepTracking(model_path="yolov8n.pt")cap=cv2.VideoCapture("traffic.mp4")# 或 0 表示摄像头whilecap.isOpened():ret,frame=cap.read()ifnotret:breakstart_time=time.time()tracked_boxes=tracker.detect_and_track(frame)frame=tracker.draw_results(frame,tracked_boxes)fps=1.0/(time.time()-start_time)cv2.putText(frame,f"FPS:{fps:.1f}",(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)cv2.imshow("Deep Tracking",frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()if__name__=="__main__":main()

2.byte_track.py—— ByteTrack 实现(简化版)

# byte_track.py""" ByteTrack 跟踪器(简化版) 参考: https://github.com/ifzhang/ByteTrack """importnumpyasnpimporttorchfromscipy.optimizeimportlinear_sum_assignmentclassBYTETracker:def__init__(self,track_buffer=30,match_thresh=0.2):self.track_buffer=track_buffer self.match_thresh=match_thresh self.tracks=[]self.frame_count=0defupdate(self,boxes,scores,cls_ids):"""更新跟踪状态"""dets=np.column_stack((boxes,scores,cls_ids))self.frame_count+=1# 创建新跟踪new_tracks=[]fordetindets:new_tracks.append({'bbox':det[:4],'score':det[4],'cls_id':det[5],'track_id':len(self.tracks),'age':1,'hits':1,'active':True})# 匹配现有跟踪iflen(self.tracks)>0:matches=self.match_detections_to_tracks(dets,self.tracks)formatchinmatches:track_idx,det_idx=matchself.tracks[track_idx]['bbox']=dets[det_idx][:4]self.tracks[track_idx]['score']=dets[det_idx][4]self.tracks[track_idx]['age']+=1self.tracks[track_idx]['hits']+=1# 添加未匹配的检测为新跟踪unmatched_dets=[iforiinrange(len(dets))ifinotin[match[1]formatchinmatches]]fordet_idxinunmatched_dets:new_track={'bbox':dets[det_idx][:4],'score':dets[det_idx][4],'cls_id':dets[det_idx][5],'track_id':len(self.tracks),'age':1,'hits':1,'active':True}self.tracks.append(new_track)# 移除老化跟踪self.tracks=[tfortinself.tracksift['age']<=self.track_buffer]# 返回所有跟踪框result=[]fortrackinself.tracks:result.append([*track['bbox'],track['track_id'],track['cls_id'],track['score']])returnresultdefmatch_detections_to_tracks(self,dets,tracks):"""匈牙利匹配"""cost_matrix=np.zeros((len(tracks),len(dets)))fori,trackinenumerate(tracks):forj,detinenumerate(dets):iou=self.iou(track['bbox'],det[:4])cost_matrix[i,j]=1-iou row_indices,col_indices=linear_sum_assignment(cost_matrix)matches=[(row,col)forrow,colinzip(row_indices,col_indices)ifcost_matrix[row,col]<self.match_thresh]returnmatchesdefiou(self,box1,box2):"""计算 IoU"""x1,y1,x2,y2=box1 x3,y3,x4,y4=box2 inter=max(0,min(x2,x4)-max(x1,x3))*max(0,min(y2,y4)-max(y1,y3))area1=(x2-x1)*(y2-y1)area2=(x4-x3)*(y4-y3)union=area1+area2-interreturninter/union

🔧 四、C++ 版本(使用 OpenCV + TorchScript)

1.tracking_cpp.cpp

// tracking_cpp.cpp#include<opencv2/opencv.hpp>#include<torch/script.h>#include<iostream>#include<vector>classDeepTracker{private:torch::jit::script::Module model;std::vector<std::string>class_names;public:DeepTracker(conststd::string&model_path){model=torch::jit::load(model_path);model.eval();class_names={"person","car","truck","bus","motorcycle"};}std::vector<cv::Rect>detect(cv::Mat&frame){// 预处理图像cv::Mat input=frame.clone();cv::resize(input,input,cv::Size(640,640));input.convertTo(input,CV_32F,1.0/255.0);// 推理torch::Tensor tensor=torch::from_blob(input.data,{1,3,640,640});torch::Tensor output=model.forward({tensor}).toTensor();// 解码边界框std::vector<cv::Rect>boxes;for(inti=0;i<output.size(0);++i){floatconf=output[0][i][4].item<float>();if(conf>0.5){floatx1=output[0][i][0].item<float>()*640;floaty1=output[0][i][1].item<float>()*640;floatx2=output[0][i][2].item<float>()*640;floaty2=output[0][i][3].item<float>()*640;boxes.push_back(cv::Rect(x1,y1,x2-x1,y2-y1));}}returnboxes;}voiddraw_boxes(cv::Mat&frame,conststd::vector<cv::Rect>&boxes){for(constauto&box:boxes){cv::rectangle(frame,box,cv::Scalar(0,255,0),2);}}};intmain(){DeepTrackertracker("yolov8n.pt");cv::VideoCapturecap("traffic.mp4");while(true){cv::Mat frame;cap>>frame;if(frame.empty())break;autoboxes=tracker.detect(frame);tracker.draw_boxes(frame,boxes);cv::imshow("Tracking",frame);if(cv2.waitKey(1)==27)break;}cap.release();cv::destroyAllWindows();return0;}

2. 编译命令(Linux)

g++ -O3 -std=c++17 tracking_cpp.cpp -o tracking\`pkg-config --cflags --libs opencv4`\`pkg-config --cflags --libs torch`

📁 五、项目结构

deep_tracking_system/ ├── python/ │ ├── tracking.py │ └── byte_track.py ├── cpp/ │ └── tracking_cpp.cpp ├── models/ │ └── yolov8n.pt └── videos/ └── traffic.mp4

🚀 六、运行说明

Python 版本:

pipinstallultralytics opencv-python scipy numpy torch torchvision python tracking.py

C++ 版本:

g++ -O3 -std=c++17 tracking_cpp.cpp -o tracking\`pkg-config --cflags --libs opencv4`\`pkg-config --cflags --libs torch`./tracking

在复杂城市交通场景中表现优异,适合用于智能交通、安防监控等实际应用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 20:40:57

Windows更新故障终极解决方案:一键重置修复工具完全指南

Windows更新故障终极解决方案&#xff1a;一键重置修复工具完全指南 【免费下载链接】Script-Reset-Windows-Update-Tool This script reset the Windows Update Components. 项目地址: https://gitcode.com/gh_mirrors/sc/Script-Reset-Windows-Update-Tool 你是否经常…

作者头像 李华
网站建设 2026/9/3 0:00:49

Windows系统精简革命:3步打造专属纯净系统的终极指南

Windows系统精简革命&#xff1a;3步打造专属纯净系统的终极指南 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 在追求极致效率的数字时代&#xff0c;臃肿的系统…

作者头像 李华
网站建设 2026/9/2 21:30:15

英伟达 DGX Spark Reachy Mini 入门教程(一)

系列文章目录 目录 系列文章目录 前言 一、所需材料 二、赋予Reachy自主行动能力 三、构建智能体 3.1 设置并获取模型与服务访问权限 3.2 构建聊天界面 3.3 添加 NeMo Agent Toolkit 内置的 ReAct 代理用于工具调用 3.4 添加路由器将查询导向不同模型 3.5 添加Pipec…

作者头像 李华
网站建设 2026/9/1 21:45:33

万物识别数据增强:自动化生成训练样本的技巧

万物识别数据增强&#xff1a;自动化生成训练样本的技巧 作为一名数据工程师&#xff0c;你是否遇到过这样的困境&#xff1a;现有的万物识别模型在某些特定类别上表现不佳&#xff0c;但收集更多真实数据又成本高昂&#xff1f;本文将分享如何通过数据增强技术&#xff0c;快速…

作者头像 李华
网站建设 2026/9/2 21:21:53

蚂蚁森林自动收能量脚本2025使用指南

蚂蚁森林自动收能量脚本2025使用指南 【免费下载链接】alipay_autojs 最最最简单的蚂蚁森林自动收能量脚本 项目地址: https://gitcode.com/gh_mirrors/al/alipay_autojs 还在为每天手动收取蚂蚁森林能量而烦恼吗&#xff1f;这款蚂蚁森林自动收能量脚本将彻底解放你的双…

作者头像 李华
网站建设 2026/9/1 23:30:46

RuoYi-Flowable企业级工作流系统:5分钟快速部署完整指南

RuoYi-Flowable企业级工作流系统&#xff1a;5分钟快速部署完整指南 【免费下载链接】RuoYi-flowable 基RuoYi-vue flowable 6.7.2 的工作流管理 右上角点个 star &#x1f31f; 持续关注更新哟 项目地址: https://gitcode.com/gh_mirrors/ru/RuoYi-flowable 企业级工…

作者头像 李华