深度学习 智慧安防 基于 YOLOv8 深度学习的摔倒检测系统 摔倒检测数据集

发布时间:2026/7/20 19:24:50
深度学习 智慧安防 基于 YOLOv8 深度学习的摔倒检测系统 摔倒检测数据集 智慧安防-基于深度学习的摔倒检测系统】模型yolov8支持图片视频摄像头检测准确率90%软件 anaconda和pycharm内含600张摔倒数据集包括[‘Down’, ‘Person’]2类基于YOLOv8的摔倒检测系统一、项目核心信息表项目详情说明系统名称基于YOLOv8深度学习的摔倒检测系统技术框架后端Python PyQt Ultralytics YOLOv8前端PyQt界面核心功能图片/视频/摄像头实时摔倒检测、结果可视化、检测信息记录与保存模型YOLOv8目标检测模型数据集共600张图像包含2类目标Down摔倒、Person站立人员准确率模型在测试集上准确率约90%开发环境Python 3.8~3.10Anaconda、PyCharm运行方式本地桌面端软件支持图片、视频文件及USB摄像头输入二、应用场景场景具体用途居家养老安防老人家中摔倒自动识别触发告警降低独居老人意外风险养老院/护理机构公共区域摄像头实时监控快速发现老人跌倒事件公共场所安防商场、学校、医院等场所的人员摔倒事件自动检测毕设/课程项目深度学习目标检测的实战项目可扩展行为识别功能工业现场安全工厂车间内工人摔倒/倒地检测辅助安全管理三、关键标签#YOLOv8#摔倒检测#目标检测#深度学习#计算机视觉#居家安防#养老院监控#PyQt#Python#毕业设计四、核心构建代码示例1. 数据集目录结构YOLO格式fall_dataset/ ├── images/ │ ├── train/ # 训练集图片 │ └── val/ # 验证集图片 ├── labels/ │ ├── train/ # 对应YOLO格式标注txt文件 │ └── val/ └── fall.yaml # 数据集配置文件2. 数据集配置文件fall.yamlpath:./fall_datasettrain:images/trainval:images/valnc:2names:0:Down# 摔倒1:Person# 站立人员3. 模型训练代码train_fall.pyfromultralyticsimportYOLOdefmain():# 加载预训练模型YOLOv8smodelYOLO(yolov8s.pt)# 开始训练resultsmodel.train(data./fall_dataset/fall.yaml,epochs100,imgsz640,batch8,device0,workers4,patience15,projectruns/train,namefall_detection,exist_okTrue,pretrainedTrue)print(训练完成模型保存在 runs/train/fall_detection/weights/)# 验证模型metricsmodel.val()print(fmAP50:{metrics.box.map50:.4f})if__name____main__:main()4. PyQt检测系统核心代码fall_detect_gui.pyimportsysimportcv2importpandasaspdfromPyQt5.QtWidgetsimport*fromPyQt5.QtCoreimport*fromPyQt5.QtGuiimport*fromultralyticsimportYOLOclassFallDetectionSystem(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(基于YOLOv8的摔倒检测系统)self.setGeometry(100,100,1200,800)self.modelYOLO(runs/train/fall_detection/weights/best.pt)self.detection_results[]self.initUI()definitUI(self):# 左侧控制面板left_widgetQWidget()left_layoutQVBoxLayout(left_widget)# 文件导入self.btn_imgQPushButton(导入图片)self.btn_videoQPushButton(导入视频)self.btn_cameraQPushButton(开启摄像头)self.btn_saveQPushButton(保存结果)self.btn_img.clicked.connect(self.load_image)self.btn_video.clicked.connect(self.load_video)self.btn_camera.clicked.connect(self.toggle_camera)self.btn_save.clicked.connect(self.save_results)left_layout.addWidget(self.btn_img)left_layout.addWidget(self.btn_video)left_layout.addWidget(self.btn_camera)left_layout.addWidget(self.btn_save)# 检测结果信息self.info_labelQLabel(检测结果信息)self.info_tableQTableWidget()self.info_table.setColumnCount(5)self.info_table.setHorizontalHeaderLabels([序号,文件路径,类别,置信度,坐标位置])left_layout.addWidget(self.info_label)left_layout.addWidget(self.info_table)# 右侧图像显示self.image_labelQLabel(检测画面)self.image_label.setAlignment(Qt.AlignCenter)# 主布局main_layoutQHBoxLayout()main_layout.addWidget(left_widget,1)main_layout.addWidget(self.image_label,3)central_widgetQWidget()central_widget.setLayout(main_layout)self.setCentralWidget(central_widget)self.timerQTimer()self.timer.timeout.connect(self.update_frame)self.capNonedefload_image(self):path,_QFileDialog.getOpenFileName(self,选择图片,,Images (*.png *.jpg *.jpeg))ifpath:self.current_pathpath self.process_image(path)defload_video(self):path,_QFileDialog.getOpenFileName(self,选择视频,,Videos (*.mp4 *.avi))ifpath:self.capcv2.VideoCapture(path)self.timer.start(30)deftoggle_camera(self):ifself.capisNoneornotself.cap.isOpened():self.capcv2.VideoCapture(0)self.timer.start(30)self.btn_camera.setText(关闭摄像头)else:self.cap.release()self.timer.stop()self.btn_camera.setText(开启摄像头)defprocess_image(self,img_path):imgcv2.imread(img_path)resultsself.model.predict(img,conf0.5)self.draw_and_display(img,results[0].boxes)self.update_result_table(results[0].boxes,img_path)defupdate_frame(self):ret,frameself.cap.read()ifnotret:self.timer.stop()returnresultsself.model.predict(frame,conf0.5)self.draw_and_display(frame,results[0].boxes)self.update_result_table(results[0].boxes,摄像头/视频流)defdraw_and_display(self,img,boxes):forboxinboxes:x1,y1,x2,y2map(int,box.xyxy[0])clsint(box.cls[0])conffloat(box.conf[0])label摔倒ifcls0else站立color(0,0,255)ifcls0else(0,255,0)cv2.rectangle(img,(x1,y1),(x2,y2),color,2)cv2.putText(img,f{label}{conf:.1%},(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.8,color,2)img_rgbcv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,cimg_rgb.shape qimgQImage(img_rgb.data,w,h,c*w,QImage.Format_RGB888)self.image_label.setPixmap(QPixmap.fromImage(qimg).scaled(self.image_label.size(),Qt.KeepAspectRatio))defupdate_result_table(self,boxes,source):self.info_table.setRowCount(0)fori,boxinenumerate(boxes):clsint(box.cls[0])conffloat(box.conf[0])coordslist(map(int,box.xyxy[0].tolist()))self.info_table.insertRow(i)self.info_table.setItem(i,0,QTableWidgetItem(str(i1)))self.info_table.setItem(i,1,QTableWidgetItem(source))self.info_table.setItem(i,2,QTableWidgetItem(摔倒ifcls0else站立))self.info_table.setItem(i,3,QTableWidgetItem(f{conf:.2%}))self.info_table.setItem(i,4,QTableWidgetItem(str(coords)))self.detection_results.append([i1,source,摔倒ifcls0else站立,conf,coords])defsave_results(self):dfpd.DataFrame(self.detection_results,columns[序号,文件路径,类别,置信度,坐标位置])df.to_csv(fall_detection_results.csv,indexFalse,encodingutf-8)QMessageBox.information(self,保存成功,检测结果已保存为 fall_detection_results.csv)if__name____main__:appQApplication(sys.argv)windowFallDetectionSystem()window.show()sys.exit(app.exec_())