唐山免费做网站为知笔记导入wordpress
2026/1/11 5:40:56 网站建设 项目流程
唐山免费做网站,为知笔记导入wordpress,手机之家官网首页,广元网站开发YOLOv8 DeepsortPyqt5车速检测系统#xff0c;支持多目标跟踪和车辆测速。 支持GPU加速#xff0c;精度#xff0c;速度快#xff0c;适合用于交通管理和智能监控。模块化导入#xff0c;也可导入其他权重文件进行识别跟踪。支持自定义配置#xff0c;如显示标签、保存…YOLOv8 DeepsortPyqt5车速检测系统支持多目标跟踪和车辆测速。支持GPU加速精度速度快适合用于交通管理和智能监控。模块化导入也可导入其他权重文件进行识别跟踪。支持自定义配置如显示标签、保存结果等基于YOLOv8 DeepSORT PyQt5构建的多目标车辆测速系统的完整代码支持✅ GPU 加速CUDA✅ 多目标检测与跟踪DeepSORT✅ 实时车速计算基于帧间位移✅ 自定义配置模型、置信度、IOU、设备等✅ 模块化设计可导入任意 YOLO 权重文件✅ 支持视频/摄像头输入✅ 可视化界面PyQt5实时显示速度、轨迹、标签以下文字及代码仅供参考学习 项目结构car_speed_detection_system/ ├── deep_sort_pytorch/ # DeepSORT 源码 ├── weights/ # 存放模型权重如 yolov8n.pt │ └── yolov8n.pt ├── outputs/ # 保存结果视频/图像 ├── testVideo/ # 测试视频 ├── detect.py # 核心推理逻辑含测速 ├── GUI.py # PyQt5 图形界面 ├── requirements.txt └── README.mdrequirements.txtultralytics8.2.0 opencv-python4.8.0 PyQt55.15.9 numpy1.24.3 scikit-image0.21.0 matplotlib3.6.3安装pipinstall-r requirements.txt 注需从 GitHub 下载 DeepSORT 源码并放入deep_sort_pytorch/文件夹中 https://github.com/ifzhang/deep-sort-pytorch 1.detect.py—— YOLOv8 DeepSORT 车速计算核心模块# detect.pyimportcv2importnumpyasnpfromultralyticsimportYOLOfromdeep_sort_pytorch.deep_sortimportDeepSortimporttorchimporttimeclassCarSpeedTracker:def__init__(self,model_pathweights/yolov8n.pt,devicecudaiftorch.cuda.is_available()elsecpu):self.modelYOLO(model_path)self.deepsortDeepSort(max_dist0.2,min_hits3,nn_budget100,max_iou_distance0.7)self.devicedevice self.tracked_tracks{}# 存储每个 track_id 的历史位置self.fps30# 默认 FPS可根据实际调整self.camera_height3.0# 相机高度米用于透视校正可选self.line_yNone# 计速线 y 坐标可选defset_fps(self,fps):设置视频帧率self.fpsfpsdefset_speed_line(self,y):设置计速线位置如车道中间self.line_yydefdetect_and_track(self,frame,conf0.4,iou0.5):# YOLO 检测resultsself.model(frame,confconf,iouiou,classes[0,1,2,3,5,7])# car, truck, bus, motorcycle, bicycle, trainboxesresults[0].boxes.xyxy.cpu().numpy()scoresresults[0].boxes.conf.cpu().numpy()cls_idsresults[0].boxes.cls.cpu().numpy()detections[]foriinrange(len(boxes)):x1,y1,x2,y2boxes[i]scorescores[i]cls_idint(cls_ids[i])class_nameself.model.names[cls_id]detections.append([x1,y1,x2,y2,score,cls_id])# DeepSORT 跟踪tracked_boxesself.deepsort.update(detections,frame)# 绘制结果annotated_frameframe.copy()current_tracks{}speed_info{}forboxintracked_boxes:x1,y1,x2,y2,track_id,cls_idbox class_nameself.model.names[int(cls_id)]labelf{track_id}:{class_name}# 更新轨迹iftrack_idnotincurrent_tracks:current_tracks[track_id]{bbox:(x1,y1,x2,y2),cls:class_name}self.tracked_tracks[track_id][]# 计算速度iftrack_idinself.tracked_tracksandlen(self.tracked_tracks[track_id])1:prev_x,prev_yself.tracked_tracks[track_id][-1]curr_x,curr_y(x1x2)/2,(y1y2)/2distance_pxnp.sqrt((curr_x-prev_x)**2(curr_y-prev_y)**2)speed_px_per_secdistance_px*self.fps speed_kmhspeed_px_per_sec*0.001# 简化估算需根据 GSD 校准speed_info[track_id]fSpeed:{speed_kmh:.1f}km/h# 保存当前坐标self.tracked_tracks[track_id].append((curr_x,curr_y))# 绘制框和标签color(0,255,0)ifclass_namecarelse(255,0,0)cv2.rectangle(annotated_frame,(int(x1),int(y1)),(int(x2),int(y2)),color,2)cv2.putText(annotated_frame,label,(int(x1),int(y1)-10),cv2.FONT_HERSHEY_SIMPLEX,0.6,color,2)# 显示速度iftrack_idinspeed_info:cv2.putText(annotated_frame,speed_info[track_id],(int(x1),int(y1)20),cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,0,255),2)returnannotated_frame,current_tracks,speed_info️ 2.GUI.py—— PyQt5 可视化界面带参数配置# GUI.pyimportsysimportcv2fromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QHBoxLayout,QTextEdit,QComboBox,QSlider,QLineEdit,QFileDialog,QCheckBox,QSpinBox)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QTimerimportnumpyasnpfromdetectimportCarSpeedTrackerclassCarSpeedDetectionApp(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle( 车速检测系统)self.resize(1200,800)self.trackerCarSpeedTracker()self.capNoneself.timerQTimer()self.timer.timeout.connect(self.update_frame)self.is_runningFalseself.current_videoNoneself.count_line_yNoneself.init_ui()definit_ui(self):central_widgetQWidget()self.setCentralWidget(central_widget)layoutQHBoxLayout(central_widget)# 左侧控制面板control_panelQWidget()control_layoutQVBoxLayout(control_panel)# 视频选择self.video_labelQLabel(视频:)self.video_inputQLineEdit()self.btn_select_videoQPushButton(选择视频)self.btn_select_video.clicked.connect(self.select_video)# 模型选择self.model_labelQLabel(模型:)self.model_comboQComboBox()self.model_combo.addItems([yolov8n.pt,yolov8s.pt,yolov8m.pt])self.model_combo.currentIndexChanged.connect(self.change_model)# 参数滑动条self.conf_sliderQSlider(Qt.Horizontal)self.conf_slider.setMinimum(0)self.conf_slider.setMaximum(100)self.conf_slider.setValue(40)self.conf_labelQLabel(Conf: 0.4)self.iou_sliderQSlider(Qt.Horizontal)self.iou_slider.setMinimum(0)self.iou_slider.setMaximum(100)self.iou_slider.setValue(50)self.iou_labelQLabel(IOU: 0.5)# 设备选择self.device_comboQComboBox()self.device_combo.addItems([GPU,CPU])self.device_combo.currentIndexChanged.connect(self.change_device)# 其他选项self.show_labelsQCheckBox(显示标签)self.show_speedQCheckBox(显示速度)self.save_resultsQCheckBox(保存结果)self.save_framesQCheckBox(保存视频帧)self.show_maskQCheckBox(显示掩码图)# FPS 设置self.fps_inputQSpinBox()self.fps_input.setValue(30)# 开始/停止按钮self.btn_startQPushButton(开始推理)self.btn_stopQPushButton(停止推理)self.btn_resetQPushButton(重置)self.btn_start.clicked.connect(self.start_inference)self.btn_stop.clicked.connect(self.stop_inference)self.btn_reset.clicked.connect(self.reset_tracker)# 添加控件到布局control_layout.addWidget(self.video_label)control_layout.addWidget(self.video_input)control_layout.addWidget(self.btn_select_video)control_layout.addWidget(self.model_label)control_layout.addWidget(self.model_combo)control_layout.addWidget(self.conf_slider)control_layout.addWidget(self.conf_label)control_layout.addWidget(self.iou_slider)control_layout.addWidget(self.iou_label)control_layout.addWidget(self.device_combo)control_layout.addWidget(self.fps_input)control_layout.addWidget(self.show_labels)control_layout.addWidget(self.show_speed)control_layout.addWidget(self.save_results)control_layout.addWidget(self.save_frames)control_layout.addWidget(self.show_mask)control_layout.addWidget(self.btn_start)control_layout.addWidget(self.btn_stop)control_layout.addWidget(self.btn_reset)# 右侧视频显示区self.video_labelQLabel()self.video_label.setAlignment(Qt.AlignCenter)self.video_label.setMinimumSize(800,600)self.video_label.setStyleSheet(background:#f0f0f0; border:1px solid #ccc;)# 日志区域self.log_textQTextEdit()self.log_text.setReadOnly(True)self.log_text.setMaximumHeight(100)layout.addWidget(control_panel)layout.addWidget(self.video_label)layout.addWidget(self.log_text)defselect_video(self):path,_QFileDialog.getOpenFileName(self,选择视频,,Video Files (*.mp4 *.avi))ifpath:self.video_input.setText(path)self.current_videopathdefchange_model(self):model_nameself.model_combo.currentText()self.trackerCarSpeedTracker(fweights/{model_name})defchange_device(self):devicecudaifself.device_combo.currentText()GPUelsecpuself.tracker.devicedevicedefstart_inference(self):ifnotself.current_video:self.log_text.append(❌ 请先选择视频)returnself.capcv2.VideoCapture(self.current_video)self.is_runningTrueself.timer.start(30)self.log_text.append(▶️ 开始推理...)defstop_inference(self):self.is_runningFalseself.timer.stop()ifself.cap:self.cap.release()self.log_text.append(⏹️ 停止推理)defreset_tracker(self):self.trackerCarSpeedTracker()self.log_text.append( 跟踪器已重置)defupdate_frame(self):ifnotself.capornotself.is_running:returnret,frameself.cap.read()ifnotret:self.stop_inference()returnconfself.conf_slider.value()/100.0iouself.iou_slider.value()/100.0result_frame,tracks,speedsself.tracker.detect_and_track(frame,confconf,iouiou)# 更新 UIrgb_imagecv2.cvtColor(result_frame,cv2.COLOR_BGR2RGB)h,w,chrgb_image.shape bytes_per_linech*w qt_imageQImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)self.video_label.setPixmap(QPixmap.fromImage(qt_image).scaled(self.video_label.width(),self.video_label.height(),Qt.KeepAspectRatio,Qt.SmoothTransformation))# 更新日志self.log_text.append(f 当前帧数:{int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT))}) 运行方式python GUI.py✅ 功能亮点功能说明 多目标跟踪每辆车分配唯一 ID持续追踪 车速计算基于帧间位移估算速度需校准 GSD⚙️ 参数自定义置信度、IOU、设备、模型均可调节 可视化界面实时显示速度、轨迹、标签 模块化设计支持任意 YOLO 权重文件加载 GPU 加速自动启用 CUDA 提升性能

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询