2026/3/7 18:01:58
网站建设
项目流程
网站布局方法分类,在深圳的中建公司,学室内设计好不好,it网站开发基于YOLOv8和PySide6的行人跌倒检测系统1数据集#xff1a;
共616张图片#xff0c;分为三类#xff1a;跌倒#xff0c;坐下#xff0c;站立
训练集#xff1a;527张图片
验证集#xff1a;89张图片
基于 YOLOv8 PySide6 构建的 行人跌倒检测系统 的完整代码#xff…基于YOLOv8和PySide6的行人跌倒检测系统1数据集共616张图片分为三类跌倒坐下站立训练集527张图片验证集89张图片基于YOLOv8 PySide6构建的行人跌倒检测系统的完整代码支持✅ 三类行为识别fall跌倒、sit坐下、stand站立✅ 支持图像、视频、摄像头实时检测✅ 动态调节置信度与模型权重✅ 美观 UI 界面PySide6✅ 提供训练好的best.pt模型文件✅ 多场景适配稳定可靠 项目结构fall_detection_system/ ├── data/ │ ├── images/ │ │ ├── train/ # 527 张 │ │ └── val/ # 89 张 │ ├── labels/ │ │ ├── train/ │ │ └── val/ │ └── dataset.yaml ├── weights/ │ └── best.pt # 训练好的模型 ├── outputs/ # 保存结果 ├── testVideo/ # 测试视频 ├── detect.py # 推理核心 ├── GUI.py # PySide6 可视化界面 ├── train.py # 训练脚本可选 ├── requirements.txt └── README.mdrequirements.txtultralytics8.2.0 PySide66.6.0 opencv-python4.8.0 numpy1.24.3 matplotlib3.6.3安装pipinstall-r requirements.txtdata/dataset.yamltrain:../data/images/trainval:../data/images/valnc:3names:[fall,sit,stand]✅ 标注格式为 YOLO 格式.txt每行class x_center y_center width height归一化train.py—— YOLOv8 训练脚本可选# train.pyfromultralyticsimportYOLOif__name____main__:modelYOLO(yolov8n.pt)# 使用官方预训练模型resultsmodel.train(datadata/dataset.yaml,epochs100,imgsz640,batch16,device0,# GPUnamefall_detection,projectruns/train,patience20,saveTrue)print(f✅ 训练完成最佳模型路径:{results.save_dir}/weights/best.pt)运行python train.py 建议使用yolov8n.pt或yolov8s.pt适合小目标行为识别。detect.py—— 推理核心模块# detect.pyimportcv2importnumpyasnpfromultralyticsimportYOLOclassFallDetection:def__init__(self,model_pathweights/best.pt):self.modelYOLO(model_path)self.class_names[fall,sit,stand]defdetect(self,frame,conf0.4):resultsself.model(frame,confconf)annotated_frameresults[0].plot()detections[]forboxinresults[0].boxes:x1,y1,x2,y2map(int,box.xyxy[0])conf_scorefloat(box.conf[0])cls_idint(box.cls[0])class_nameself.class_names[cls_id]labelf{class_name}{conf_score:.2f}detections.append({bbox:(x1,y1,x2,y2),label:label,class:class_name,confidence:conf_score})returnannotated_frame,detections️GUI.py—— PySide6 可视化界面主程序# GUI.pyimportsysimportcv2fromPySide6.QtWidgetsimport(QApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QHBoxLayout,QFileDialog,QSlider,QLineEdit,QComboBox,QTextEdit,QMenuBar,QMenu,QAction)fromPySide6.QtGuiimportQImage,QPixmap,QIconfromPySide6.QtCoreimportQt,QTimer,QSizeimportnumpyasnpfromdetectimportFallDetectionclassFallDetectionApp(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle( 行人跌倒检测系统)self.resize(1200,800)self.detectorFallDetection()self.capNoneself.timerQTimer()self.timer.timeout.connect(self.update_frame)self.is_runningFalseself.init_ui()definit_ui(self):central_widgetQWidget()self.setCentralWidget(central_widget)layoutQVBoxLayout(central_widget)# 顶部状态栏status_layoutQHBoxLayout()self.status_labelQLabel(状态: 就绪)self.status_label.setStyleSheet(font-weight:bold; color:green;)status_layout.addWidget(self.status_label)layout.addLayout(status_layout)# 主显示区self.main_layoutQHBoxLayout()self.left_imageQLabel()self.right_imageQLabel()self.left_image.setAlignment(Qt.AlignCenter)self.right_image.setAlignment(Qt.AlignCenter)self.left_image.setStyleSheet(background:#f0f0f0; border:1px solid #ccc;)self.right_image.setStyleSheet(background:#f0f0f0; border:1px solid #ccc;)self.main_layout.addWidget(self.left_image)self.main_layout.addWidget(self.right_image)layout.addLayout(self.main_layout)# 控制面板control_layoutQVBoxLayout()self.btn_loadQPushButton(加载图片)self.btn_videoQPushButton(加载视频)self.btn_cameraQPushButton(启动摄像头)self.btn_stopQPushButton(停止)self.btn_resetQPushButton(重置)self.conf_sliderQSlider(Qt.Horizontal)self.conf_slider.setMinimum(0)self.conf_slider.setMaximum(100)self.conf_slider.setValue(40)self.conf_labelQLabel(置信度: 0.4)self.model_comboQComboBox()self.model_combo.addItems([best.pt,yolov8n.pt])self.model_combo.currentIndexChanged.connect(self.change_model)control_layout.addWidget(self.btn_load)control_layout.addWidget(self.btn_video)control_layout.addWidget(self.btn_camera)control_layout.addWidget(self.btn_stop)control_layout.addWidget(self.btn_reset)control_layout.addWidget(self.conf_slider)control_layout.addWidget(self.conf_label)control_layout.addWidget(self.model_combo)layout.addLayout(control_layout)# 日志区域self.log_textQTextEdit()self.log_text.setReadOnly(True)self.log_text.setMaximumHeight(100)layout.addWidget(self.log_text)# 连接信号self.btn_load.clicked.connect(self.load_image)self.btn_video.clicked.connect(self.load_video)self.btn_camera.clicked.connect(self.start_camera)self.btn_stop.clicked.connect(self.stop_inference)self.btn_reset.clicked.connect(self.reset_detector)self.conf_slider.valueChanged.connect(self.update_confidence)defload_image(self):path,_QFileDialog.getOpenFileName(self,选择图片,,Images (*.jpg *.png))ifnotpath:returnimagecv2.imread(path)result_img,detectionsself.detector.detect(image,confself.conf_slider.value()/100.0)# 显示原图和结果图self.display_image(image,self.left_image)self.display_image(result_img,self.right_image)self.log_text.append(f 图片分析完成:{len(detections)}个目标)defload_video(self):path,_QFileDialog.getOpenFileName(self,选择视频,,Videos (*.mp4 *.avi))ifnotpath:returnself.capcv2.VideoCapture(path)self.is_runningTrueself.timer.start(30)self.log_text.append(f▶️ 开始播放视频:{path})defstart_camera(self):self.capcv2.VideoCapture(0)# 使用默认摄像头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_detector(self):self.detectorFallDetection()self.log_text.append( 检测器已重置)defchange_model(self):model_nameself.model_combo.currentText()self.detectorFallDetection(fweights/{model_name})self.log_text.append(f 模型已切换为:{model_name})defupdate_confidence(self):valueself.conf_slider.value()/100.0self.conf_label.setText(f置信度:{value:.1f})self.log_text.append(f⚙️ 置信度调整为:{value:.1f})defupdate_frame(self):ifnotself.capornotself.is_running:returnret,frameself.cap.read()ifnotret:self.stop_inference()returnresult_img,detectionsself.detector.detect(frame,confself.conf_slider.value()/100.0)# 显示帧self.display_image(frame,self.left_image)self.display_image(result_img,self.right_image)# 更新日志self.log_text.append(f⏱️ 检测中... 目标数:{len(detections)})defdisplay_image(self,image,label):rgb_imagecv2.cvtColor(image,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)pixmapQPixmap.fromImage(qt_image).scaled(label.width(),label.height(),Qt.KeepAspectRatio,Qt.SmoothTransformation)label.setPixmap(pixmap) 应用场景场景功能价值 老年人居家安全实时监测老人是否跌倒及时报警 公共场所监控商场、医院、车站等区域异常行为预警 智能家居系统集成到家庭安防平台提升安全等级⚕️ 医疗护理机构护理人员远程监控减少人工巡检