news 2026/6/10 14:47:20

城市交通、无人机监控、工业检测 智能交通、安防监控 基于深度学习的单目标跟踪 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/6/10 10:42:48

Bebas Neue字体深度解析:从设计原理到实战应用

Bebas Neue字体深度解析&#xff1a;从设计原理到实战应用 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 在我们日常的设计工作中&#xff0c;选择一款合适的字体往往能让整个作品增色不少。今天&#xff0c;让…

作者头像 李华
网站建设 2026/6/10 9:03:46

揭秘阿里云同款技术:如何快速搭建自己的万物识别API

揭秘阿里云同款技术&#xff1a;如何快速搭建自己的万物识别API 为什么需要自建万物识别服务&#xff1f; 作为一名独立开发者&#xff0c;我最近在为摄影社区添加智能图片标签功能时遇到了难题。商业API虽然方便&#xff0c;但调用费用实在太高&#xff0c;尤其是当用户上传量…

作者头像 李华
网站建设 2026/6/10 9:07: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 当Windows更新…

作者头像 李华
网站建设 2026/6/10 9:00:50

中文场景理解新突破:万物识别+语义分析联合应用

中文场景理解新突破&#xff1a;万物识别语义分析联合应用实战指南 在AI技术快速发展的今天&#xff0c;多模态学习已成为研究热点。中文场景理解新突破&#xff1a;万物识别语义分析联合应用镜像&#xff0c;正是为探索视觉与语言模型结合而设计的预配置环境。本文将带你快速上…

作者头像 李华
网站建设 2026/6/9 20:05:48

MQTT-C:嵌入式物联网通信的轻量级C语言解决方案

MQTT-C&#xff1a;嵌入式物联网通信的轻量级C语言解决方案 【免费下载链接】MQTT-C A portable MQTT C client for embedded systems and PCs alike. 项目地址: https://gitcode.com/gh_mirrors/mq/MQTT-C 在物联网时代&#xff0c;设备间的可靠通信变得至关重要。MQTT…

作者头像 李华