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

张开发
2026/4/9 3:42:42 15 分钟阅读

分享文章

python 基于深度学习的行人车辆多目标实时检测与跟踪系统 ui
python 基于深度学习的行人车辆多目标实时检测与跟踪系统 ui文章目录1. 环境搭建安装依赖2. 数据准备数据集结构3. 模型训练训练配置文件训练模型4. 目标跟踪OCTrack配置5. UI设计与结果展示设计界面主程序代码6. 运行与测试行人车辆多目标实时检测与跟踪系统UI界面Python代码使用深度学习中的YOLOv5和OCTrack算法实现车辆、行人等多目标的实时检测和跟踪并利用PyQt5设计了简约的系统UI界面。选择自己的视频文件进行检测和跟踪可通过电脑自带的摄像头进行实时处理。行人车辆多目标实时检测与跟踪系统涉及多个步骤模型训练、推理代码、目标跟踪算法以及UI设计关键代码示例1. 环境搭建确保你的开发环境已经安装了必要的库和工具。安装依赖# 创建并激活虚拟环境conda create-nmulti_target_trackingpython3.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.txt2. 数据准备收集和标注包含行人和车辆的数据集。使用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.pt4. 目标跟踪使用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.deviceselect_device(0)self.modelattempt_load(best.pt,map_locationself.device)self.trackerinit_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.timerQTimer()self.timer.timeout.connect(self.update_frame)self.capNonedefload_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.capcv2.VideoCapture(file_name)self.timer.start(30)defstart_camera(self):self.capcv2.VideoCapture(0)self.timer.start(30)defupdate_frame(self):ret,frameself.cap.read()ifret:resultsself.detect_and_track(frame)annotated_frameself.plot_results(results,frame)height,width,channelannotated_frame.shape bytes_per_line3*width q_imgQImage(annotated_frame.data,width,height,bytes_per_line,QImage.Format_RGB888)self.imageLabel.setPixmap(QPixmap.fromImage(q_img))defdetect_and_track(self,image):imgcv2.resize(image,(640,640))imgimg[:,:,::-1].transpose(2,0,1)# BGR to RGB, to 3x416x416imgnp.ascontiguousarray(img)imgtorch.from_numpy(img).to(self.device)imgimg.float()/255.0# 0 - 255 to 0.0 - 1.0ifimg.ndimension()3:imgimg.unsqueeze(0)predself.model(img,augmentFalse)[0]prednon_max_suppression(pred,conf_thres0.25,iou_thres0.45,classesNone,agnosticFalse)detections[]fordetinpred:iflen(det):det[:,:4]scale_coords(img.shape[2:],det[:,:4],image.shape).round()for*xyxy,conf,clsinreversed(det):x1,y1,x2,y2map(int,xyxy)detections.append([x1,y1,x2,y2,float(conf),int(cls)])tracksupdate_tracker(self.tracker,detections)returntracksdefplot_results(self,tracks,image):fortrackintracks:x1,y1,x2,y2,idmap(int,track[:5])cv2.rectangle(image,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(image,fID:{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__:appQApplication(sys.argv)windowMultiTargetTrackingApp()window.show()sys.exit(app.exec_())6. 运行与测试运行主程序加载图片、视频或启动摄像头进行检测和跟踪并展示检测和跟踪结果及可视化。关键代码示例仅供参考。

更多文章