news 2026/4/16 16:24:34

深度学习框架 YOLOV11模型如何训练老年人跌倒行为检测数据集 构建基于深度学习YOLOv11的跌倒检测系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习框架 YOLOV11模型如何训练老年人跌倒行为检测数据集 构建基于深度学习YOLOv11的跌倒检测系统

基于YOLOv11的跌倒检测系统

项目介绍:
模型:YOLOV11
软件:Pycharm+Anaconda
环境:python=3.9 opencv_python PyQt5
文件:
1.完整程序文件(.py等)
2.UI界面源文件、图标(.ui、.qrc、.py等)
3.测试图片、视频文件(.jpeg、.mp4、.avi等)

功能: 系统实现了对于多种裂缝情况的识别检测功能:包括通过选择图片、视频、摄像头进行实时识别;检测速度快、识别精度较高。
①选择图片识别。
②选择视频识别。
③摄像头检测识别。


1

UI 界面(PyQt5)
YOLO11 模型训练与推理代码
数据集说明(含标注格式)
支持图片 / 视频 / 摄像头实时检测
用户登录功能(可选)
完整 Python 代码 + 项目结构


🧩 一、系统功能概述

功能支持
✅ 跌倒行为识别(Fall Detection)
✅ 正常站立/行走状态识别
✅ 图片检测
✅ 视频检测
✅ 摄像头实时检测
✅ 用户登录界面(可选)
✅ 检测结果可视化(框+置信度)
✅ 结果表格输出(类别、置信度、坐标)
✅ 保存检测图像

📁 二、项目结构

FallDetectionSystem/ ├── datasets/# 数据集(YOLO格式)│ ├── images/ │ │ ├── train/ │ │ └── val/ │ └── labels/ │ ├── train/ │ └── val/ ├── models/ │ └── fall_best.pt# 训练好的模型├── UIProgram/ │ ├── MainProgram.py# 主程序│ ├── detect_tools.py# 检测工具类│ ├── login_widget.py# 登录界面│ ├── Config.py# 配置文件│ └── imgTest.py# 图片测试脚本├── train.py# 模型训练脚本└── fall_detection.yaml# 数据配置文件

🗃️ 三、1. 数据集准备(2类)

类别说明

class_id中文名称英文名称
0跌倒Fall
1正常Normal

✅ 标注方式:在跌倒或正常人体上画出边界框
✅ 建议使用 LabelImg 进行标注
✅ 图像来源:公开数据集如Fall Detection Dataset (UCF101)或自采集视频截图


📂 四、2. 创建fall_detection.yaml

# fall_detection.yamltrain:./datasets/images/trainval:./datasets/images/valnc:2names:['Fall','Normal']

🚀 五、3. 模型训练(train.py

# train.pyfromultralyticsimportYOLOimportosdefmain():os.makedirs("runs",exist_ok=True)model=YOLO('yolov8s.pt')# 使用 YOLOv8s 作为“YOLOv11”代理results=model.train(data='fall_detection.yaml',epochs=100,imgsz=640,batch=16,name='fall_detection_v8',optimizer='AdamW',lr0=0.001,lrf=0.01,patience=15,save=True,device=0,workers=4,project='runs')print("✅ 训练完成!最佳模型路径:",results.save_dir/"weights/best.pt")if__name__=='__main__':main()

🔧 运行:

python train.py

🔍 六、4. 检测工具类(detect_tools.py

# detect_tools.pyfromultralyticsimportYOLOimportcv2importnumpyasnpclassFallDetector:def__init__(self,model_path="models/fall_best.pt",conf_threshold=0.4):self.model=YOLO(model_path)self.conf_threshold=conf_threshold self.class_names=['Fall','Normal']self.colors=[(0,0,255),(0,255,0)]# 红色:跌倒;绿色:正常defdetect_image(self,image_path):"""检测单张图片"""results=self.model(image_path,conf=self.conf_threshold)result=results[0]boxes=result.boxes.cpu().numpy()detections=[]forboxinboxes:x1,y1,x2,y2=map(int,box.xyxy[0])cls_id=int(box.cls[0])conf=float(box.conf[0])class_name=self.class_names[cls_id]color=self.colors[cls_id]cv2.rectangle(image,(x1,y1),(x2,y2),color,2)label=f"{class_name}{conf:.2f}"cv2.putText(image,label,(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.6,color,2)detections.append({"class":class_name,"confidence":conf,"bbox":(x1,y1,x2,y2)})returndetections,result.plot()defdetect_video(self,video_path):"""检测视频流"""cap=cv2.VideoCapture(video_path)whilecap.isOpened():ret,frame=cap.read()ifnotret:breakresults=self.model(frame,conf=self.conf_threshold)annotated_frame=results[0].plot()yieldannotated_frame cap.release()

🖥️ 七、5. PyQt5 主界面(MainProgram.py

# MainProgram.pyimportsysimportosfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QLabel,QPushButton,QFileDialog,QVBoxLayout,QHBoxLayout,QWidget,QTextEdit,QLineEdit,QComboBox)fromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQt,QTimerimportcv2fromdetect_toolsimportFallDetectorclassFallApp(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("基于YOLOv11的跌倒检测系统")self.setGeometry(100,100,1000,700)self.detector=FallDetector()self.cap=Noneself.timer=QTimer()self.timer.timeout.connect(self.update_frame)self.setup_ui()defsetup_ui(self):central_widget=QWidget()self.setCentralWidget(central_widget)main_layout=QHBoxLayout(central_widget)# 左侧图像显示区left_panel=QWidget()left_layout=QVBoxLayout(left_panel)self.image_label=QLabel()self.image_label.setAlignment(Qt.AlignCenter)self.image_label.setStyleSheet("border: 2px solid #007BFF;")left_layout.addWidget(self.image_label)# 右侧控制区right_panel=QWidget()right_layout=QVBoxLayout(right_panel)# 文件输入self.file_input=QLineEdit()self.file_input.setPlaceholderText("请选择图片或视频...")self.btn_open=QPushButton("打开文件")self.btn_open.clicked.connect(self.open_file)right_layout.addWidget(self.file_input)right_layout.addWidget(self.btn_open)# 检测结果self.result_text=QTextEdit()self.result_text.setReadOnly(True)right_layout.addWidget(self.result_text)# 操作按钮self.btn_start=QPushButton("开始检测")self.btn_start.clicked.connect(self.start_detection)self.btn_stop=QPushButton("停止检测")self.btn_stop.clicked.connect(self.stop_detection)right_layout.addWidget(self.btn_start)right_layout.addWidget(self.btn_stop)# 保存按钮self.btn_save=QPushButton("保存结果")self.btn_save.clicked.connect(self.save_result)right_layout.addWidget(self.btn_save)main_layout.addWidget(left_panel,stretch=2)main_layout.addWidget(right_panel,stretch=1)defopen_file(self):file_path,_=QFileDialog.getOpenFileName(self,"选择文件","","图像文件 (*.jpg *.png);;视频文件 (*.mp4 *.avi)")iffile_path:self.file_input.setText(file_path)self.detect_and_show(file_path)defdetect_and_show(self,path):ifpath.lower().endswith(('.jpg','.png')):detections,img=self.detector.detect_image(path)self.show_image(img)self.display_results(detections)elifpath.lower().endswith(('.mp4','.avi')):self.video_path=path self.start_detection()defstart_detection(self):ifself.file_input.text().lower().endswith(('.mp4','.avi')):self.cap=cv2.VideoCapture(self.file_input.text())self.timer.start(30)self.btn_start.setEnabled(False)self.btn_stop.setEnabled(True)else:self.detect_and_show(self.file_input.text())defstop_detection(self):ifself.cap:self.cap.release()self.timer.stop()self.btn_start.setEnabled(True)self.btn_stop.setEnabled(False)defupdate_frame(self):ret,frame=self.cap.read()ifret:results=self.detector.model(frame,conf=0.4)annotated_frame=results[0].plot()self.show_image(annotated_frame)self.display_results(results[0].boxes.cpu().numpy())defshow_image(self,img):h,w,ch=img.shape bytes_per_line=ch*w q_img=QImage(img.data,w,h,bytes_per_line,QImage.Format_BGR888)pixmap=QPixmap.fromImage(q_img).scaled(600,600,Qt.KeepAspectRatio)self.image_label.setPixmap(pixmap)defdisplay_results(self,boxes):ifisinstance(boxes,np.ndarray):boxes=boxes[0]results=[]forboxinboxes:x1,y1,x2,y2=map(int,box.xyxy[0])conf=float(box.conf[0])cls=int(box.cls[0])class_name=self.detector.class_names[cls]results.append(f"类别:{class_name}, 置信度:{conf:.2f}, 位置: [{x1},{y1},{x2},{y2}]")self.result_text.setText("\n".join(results))defsave_result(self):# 可扩展为保存图片或日志passif__name__=='__main__':app=QApplication(sys.argv)window=FallApp()window.show()sys.exit(app.exec_())

🔐 八、9. 用户登录界面(login_widget.py

# login_widget.pyfromPyQt5.QtWidgetsimportQDialog,QVBoxLayout,QLineEdit,QPushButton,QLabelfromPyQt5.QtCoreimportQtclassLoginDialog(QDialog):def__init__(self):super().__init__()self.setWindowTitle("用户登录")self.resize(300,200)self.setup_ui()defsetup_ui(self):layout=QVBoxLayout()self.username_input=QLineEdit()self.username_input.setPlaceholderText("用户名")layout.addWidget(self.username_input)self.password_input=QLineEdit()self.password_input.setEchoMode(QLineEdit.Password)self.password_input.setPlaceholderText("密码")layout.addWidget(self.password_input)self.login_btn=QPushButton("登录")self.login_btn.clicked.connect(self.login)layout.addWidget(self.login_btn)self.setLayout(layout)deflogin(self):username=self.username_input.text()password=self.password_input.text()ifusername=="admin"andpassword=="123456":self.accept()# 登录成功else:self.password_input.clear()self.password_input.setPlaceholderText("用户名或密码错误")

📦 九、运行步骤

  1. 安装依赖
pipinstallultralytics opencv-python pyqt5 numpy
  1. 放置数据集和模型
FallDetectionSystem/ ├── datasets/ ├── models/ │ └── fall_best.pt # 训练后生成 └── UIProgram/ └── MainProgram.py
  1. 运行主程序
cdUIProgram python MainProgram.py
  1. 点击“打开文件”选择图片或视频
  2. 点击“开始检测”进行识别

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

5分钟完成Next AI Draw.io智能绘图工具的Docker部署

5分钟完成Next AI Draw.io智能绘图工具的Docker部署 【免费下载链接】next-ai-draw-io 项目地址: https://gitcode.com/GitHub_Trending/ne/next-ai-draw-io 想要体验AI驱动的智能图表创作吗?Next AI Draw.io将大型语言模型与专业绘图工具完美结合&#xff…

作者头像 李华
网站建设 2026/4/16 6:40:37

如何快速部署FlashAI通义千问:零配置本地大模型完整指南

如何快速部署FlashAI通义千问:零配置本地大模型完整指南 【免费下载链接】通义千问 FlashAI一键本地部署通义千问大模型整合包 项目地址: https://ai.gitcode.com/FlashAI/qwen 想要在自己的电脑上体验强大的通义千问大模型吗?FlashAI整合包让你轻…

作者头像 李华
网站建设 2026/4/13 0:04:47

如何快速使用bilix:异步视频下载完整指南

如何快速使用bilix:异步视频下载完整指南 【免费下载链接】bilix ⚡️Lightning-fast async download tool for bilibili and more | 快如闪电的异步下载工具,支持bilibili及更多 项目地址: https://gitcode.com/gh_mirrors/bi/bilix bilix是一款…

作者头像 李华
网站建设 2026/4/15 13:12:02

永久免费进销存软件排名揭秘:拒绝套路,象过河为何备受青睐?

在数字化浪潮下,无论是批发商贸、零售门店还是生产加工企业,使用进销存软件来替代手工账已是大势所趋。对于处于起步阶段或成本敏感型的中小微企业来说,“永久免费进销存”无疑是最具吸引力的关键词。但在搜索引擎上看似权威的“软件排名”背…

作者头像 李华
网站建设 2026/4/16 13:43:57

Ganache UI插件扩展进阶指南:打造专属区块链开发环境

Ganache UI作为区块链开发者的得力助手,其强大的插件扩展能力让开发者能够为特定区块链网络创建定制化的开发环境。本文将深入解析插件开发的核心设计理念和实战流程,帮助你快速掌握区块链开发工具的扩展技能。 【免费下载链接】ganache-ui Personal blo…

作者头像 李华
网站建设 2026/4/16 15:13:47

电源管理中三脚电感选型核心要点解析

三脚电感选型实战指南:如何在高效电源设计中避开“看不见的坑”你有没有遇到过这样的情况?一款看似设计完美的Buck电路,在实验室里跑得好好的,一进EMC暗室——辐射发射超标;或者设备冷启动时突然“啪”一声保护&#x…

作者头像 李华