news 2026/7/15 2:20:27

python 基于深度学习的行人车辆多目标实时检测与跟踪系统 ui界面 行人车辆轨迹追踪 yolov5 深度学习框架目标检测算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python 基于深度学习的行人车辆多目标实时检测与跟踪系统 ui界面 行人车辆轨迹追踪 yolov5 深度学习框架目标检测算法

python 基于深度学习的行人车辆多目标实时检测与跟踪系统 ui

文章目录

      • 1. 环境搭建
        • 安装依赖
      • 2. 数据准备
        • 数据集结构
      • 3. 模型训练
        • 训练配置文件
        • 训练模型
      • 4. 目标跟踪
        • OCTrack配置
      • 5. UI设计与结果展示
        • 设计界面
        • 主程序代码
      • 6. 运行与测试

行人车辆多目标实时检测与跟踪系统
(UI界面,Python代码)

使用深度学习中的YOLOv5和OCTrack算法实现车辆、行人等多目标的实时检测和跟踪,并利用PyQt5设计了简约的系统UI界面。选择自己的视频文件进行检测和跟踪,可通过电脑自带的摄像头进行实时处理。

行人车辆多目标实时检测与跟踪系统
涉及多个步骤:模型训练、推理代码、目标跟踪算法以及UI设计

关键代码示例:

1. 环境搭建

确保你的开发环境已经安装了必要的库和工具。

安装依赖
# 创建并激活虚拟环境conda create-nmulti_target_trackingpython=3.8conda activate multi_target_tracking# 安装YOLOv5和相关库pipinstalltorch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113 pipinstallopencv-python PyQt5 numpy scipy filterpygitclone https://github.com/ultralytics/yolov5.gitcdyolov5 pipinstall-rrequirements.txt# 安装OCTrackgitclone https://github.com/your-octrack-repo.gitcdoctrack pipinstall-rrequirements.txt

2. 数据准备

收集和标注包含行人和车辆的数据集。使用Labelimg进行标注,并将标注文件保存为YOLO格式。

数据集结构
dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ └── labels/ ├── train/ ├── val/ └── test/

3. 模型训练

使用YOLOv5进行模型训练。

训练配置文件

创建一个data.yaml文件,定义数据集和类别信息。

train:dataset/images/trainval:dataset/images/valtest:dataset/images/testnc:2names:['person','car']
训练模型

使用以下命令进行模型训练。

python train.py--img640--batch16--epochs100--datadata.yaml--weightsyolov5s.pt

4. 目标跟踪

使用OCTrack进行目标跟踪。

OCTrack配置

根据需要调整OCTrack的参数和配置。

fromoctrackimportOCTrackdefinit_tracker():returnOCTrack()defupdate_tracker(tracker,detections):tracker.update(detections)returntracker.get_tracks()

5. UI设计与结果展示

使用PyQt5设计用户界面,并展示检测和跟踪结果。

设计界面

使用Qt Designer设计界面,并导出为.ui文件,然后使用pyuic5转换为Python代码。

pyuic5-xyour_design.ui-oui_design.py
主程序代码
importsysfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QFileDialogfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQTimerimportcv2fromyolov5.models.experimentalimportattempt_loadfromyolov5.utils.datasetsimportLoadStreams,LoadImagesfromyolov5.utils.generalimportnon_max_suppression,scale_coordsfromyolov5.utils.torch_utilsimportselect_devicefromoctrackimportOCTrackfromui_designimportUi_MainWindowclassMultiTargetTrackingApp(QMainWindow,Ui_MainWindow):def__init__(self):super().__init__()self.setupUi(self)self.device=select_device('0')self.model=attempt_load('best.pt',map_location=self.device)self.tracker=init_tracker()self.loadImageButton.clicked.connect(self.load_image)self.loadVideoButton.clicked.connect(self.load_video)self.startCameraButton.clicked.connect(self.start_camera)self.saveButton.clicked.connect(self.save_results)self.exitButton.clicked.connect(self.close)self.timer=QTimer()self.timer.timeout.connect(self.update_frame)self.cap=Nonedefload_image(self):file_name,_=QFileDialog.getOpenFileName(self,"选择图片文件","","Images (*.png *.xpm *.jpg)")iffile_name:self.detect_and_track(file_name)defload_video(self):file_name,_=QFileDialog.getOpenFileName(self,"选择视频文件","","Videos (*.mp4 *.avi)")iffile_name:self.cap=cv2.VideoCapture(file_name)self.timer.start(30)defstart_camera(self):self.cap=cv2.VideoCapture(0)self.timer.start(30)defupdate_frame(self):ret,frame=self.cap.read()ifret:results=self.detect_and_track(frame)annotated_frame=self.plot_results(results,frame)height,width,channel=annotated_frame.shape bytes_per_line=3*width q_img=QImage(annotated_frame.data,width,height,bytes_per_line,QImage.Format_RGB888)self.imageLabel.setPixmap(QPixmap.fromImage(q_img))defdetect_and_track(self,image):img=cv2.resize(image,(640,640))img=img[:,:,::-1].transpose(2,0,1)# BGR to RGB, to 3x416x416img=np.ascontiguousarray(img)img=torch.from_numpy(img).to(self.device)img=img.float()/255.0# 0 - 255 to 0.0 - 1.0ifimg.ndimension()==3:img=img.unsqueeze(0)pred=self.model(img,augment=False)[0]pred=non_max_suppression(pred,conf_thres=0.25,iou_thres=0.45,classes=None,agnostic=False)detections=[]fordetinpred:iflen(det):det[:,:4]=scale_coords(img.shape[2:],det[:,:4],image.shape).round()for*xyxy,conf,clsinreversed(det):x1,y1,x2,y2=map(int,xyxy)detections.append([x1,y1,x2,y2,float(conf),int(cls)])tracks=update_tracker(self.tracker,detections)returntracksdefplot_results(self,tracks,image):fortrackintracks:x1,y1,x2,y2,id=map(int,track[:5])cv2.rectangle(image,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(image,f'ID:{id}',(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)returnimagedefsave_results(self):file_name,_=QFileDialog.getSaveFileName(self,"保存结果","","Text Files (*.txt)")iffile_name:withopen(file_name,'w')asf:fortrackinself.tracks:f.write(f'{track}\n')if__name__=='__main__':app=QApplication(sys.argv)window=MultiTargetTrackingApp()window.show()sys.exit(app.exec_())

6. 运行与测试

运行主程序,加载图片、视频或启动摄像头进行检测和跟踪,并展示检测和跟踪结果及可视化。

关键代码示例,仅供参考。

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

Kerberos认证流程全解析(原创时序图+实战)

1. Kerberos认证的核心机制想象一下你走进一家高端会所,门口站着一位严格的保安。他不会直接放你进去,而是要求你出示会员卡、核对指纹,甚至要你回答只有真会员才知道的暗号。Kerberos就是网络世界的这位保安,只不过它用加密票据代…

作者头像 李华
网站建设 2026/7/15 2:19:10

蚁群算法(ACO):从自然启发的寻径到现代优化引擎

1. 蚂蚁觅食与算法灵感想象一下你在野餐时不小心打翻了一罐蜂蜜,几分钟后就会看到蚂蚁排着整齐的队伍前来搬运。这个看似简单的现象背后,隐藏着令人惊叹的群体智慧——蚂蚁们总能找到从巢穴到食物源的最短路径。1992年,意大利学者Marco Dorig…

作者头像 李华
网站建设 2026/7/15 2:18:05

Wt::Dbo:C++ ORM实现零SQL持久化与对象关系映射实践

1. 项目概述:当C遇见零SQL持久化作为一名在C后端领域摸爬滚打了十多年的老码农,我经历过无数次与数据库打交道的“阵痛期”。从早期的ODBC手动拼接SQL字符串,到后来尝试各种ORM框架,总感觉在C的世界里,对象和数据库表之…

作者头像 李华
网站建设 2026/7/15 2:17:31

规则驱动的结构化文档编排:从模板到文档操作系统

1. 项目概述:当模板不再是“套壳”,而是一套可执行的文档操作系统你有没有过这种经历:手头有一篇写得不错的行业分析,想快速做成一份体面的PDF报告发给客户,结果打开Word或InDesign,光是调封面字体、对齐目…

作者头像 李华
网站建设 2026/7/15 2:15:29

Python3 批量提取视频时长:三种库的性能对比与实战选型

1. 为什么需要批量提取视频时长?在数字媒体管理、内容审核或自动化视频处理的工作流中,批量获取视频时长是一个高频需求。比如:媒体资产管理:整理海量视频素材时,需要统计每个文件的时长信息建立索引内容审核&#xff…

作者头像 李华
网站建设 2026/7/15 2:14:15

模板驱动型文档自动化:结构化内容与跨格式同步实战

1. 项目概述:这不是“套模板写文档”,而是用结构化思维重构内容生产流你有没有过这种体验:一份产品说明书,要同时出PDF给客户、网页版给官网、PPT给销售团队、Word给法务审阅——四个版本内容主体一致,但格式、层级、侧…

作者头像 李华