发布文章
【AI加持】基于PyQt5+YOLOv8+DeepSeek的摔倒行为检测系统(详细介绍)
44/100
a1397852386
未选择任何文件
@[toc]
本系统功能强大!支持对图片、视频、视频流、摄像头中的摔倒行为进行检测,支持多种数据数据源输入并且接入了AI实现了对当前分析结果的评估,欢迎了解!

一.前言
基于PyQt5+YOLOv8+DeepSeek的摔倒行为检测系统的提出,源于智能安防与智慧养老快速发展的时代背景。随着人口老龄化加剧,独居老人或特殊群体因摔倒造成的伤害与延迟救助问题日益突出,而传统的人工巡查方式不仅耗费大量人力,也难以及时发现紧急情况。与此同时,计算机视觉技术在深度学习浪潮推动下取得突破,尤其是以YOLOv8为代表的目标检测模型在实时性与精度上兼具显著优势,能够高效捕捉人体姿态变化;PyQt5在桌面应用开发领域成熟稳健,为系统提供了可视化友好的交互界面和便捷的业务逻辑组织方式;而DeepSeek类语言模型的加入,让系统在异常判断解释、事件分析报告生成以及智能配置辅助等方面具备更高的智能化水平。三者的协作,不仅让摔倒检测从传统的视频监控识别进化到集检测、分析、交互与可扩展能力于一体的综合系统,也为后续的场景扩展(如养老院、医院、社区安防、工业安全监管等)奠定了技术基础。该系统的意义体现在多个层面:在民生层面,它提升了高危人群的安全保障,实现无人值守条件下的实时预警;在技术层面,它展示了前沿视觉算法与智能人机交互的深度融合实践;在产业层面,它为智能安防产品提供了更高效、更智能的落地方案,推动了智慧养老与公共安全领域的数字化升级;在社会价值层面,它通过减少事故伤害、提高响应效率,为构建更加安全、友好的社会环境提供了可借鉴的解决思路。整体而言,这一系统不仅是技术集成的产物,更是社会需求驱动下的创新回应,具有重要的研究意义与应用前景。
二.核心技术&知识
在这章我将要介绍本系统的核心技术。
1.PyQt5
PyQt5 是一套用于创建跨平台桌面应用程序的 Python GUI 工具包,它是 Qt 应用框架的 Python 绑定。通过 PyQt5,开发者可以使用 Python 编写具有现代图形界面的应用程序,支持丰富的控件、信号与槽机制、窗口管理、事件处理等功能。它兼容主流操作系统(如 Windows、macOS 和 Linux),适用于开发各种规模的桌面软件,常与 Qt Designer 配合使用以加快开发效率。
2.YOLOv8
YOLOv8(You Only Look Once version 8)是由 Ultralytics 推出的最新一代实时目标检测模型,属于 YOLO 系列的改进版本。相比前代模型,YOLOv8 在精度、速度和灵活性上都有显著提升,支持目标检测、图像分割、姿态估计等多任务处理。它采用了更加高效的网络结构和训练策略,并提供开箱即用的 Python 接口和命令行工具,适用于边缘设备和云端部署,广泛应用于安防监控、自动驾驶、工业检测等场景。
3.DeepSeek
DeepSeek是由深度求索公司开发的AI大模型助手,作为纯文本模型,我擅长自然语言处理、文档分析和智能对话。当与YOLO(You Only Look Once)实时目标检测系统结合时,可以形成强大的多模态应用架构——YOLO系统负责实时视觉识别和目标检测,快速准确地识别图像或视频流中的物体;而我则对YOLO检测到的结果进行深度语义分析和上下文理解,提供物体属性的详细解读、场景描述、行为分析以及决策建议。这种结合使得计算机视觉的“看到”与AI的“理解”完美融合,可广泛应用于智能监控、自动驾驶、工业质检等领域,实现从视觉感知到智能决策的完整闭环。
4.CSV
本系统使用CSV进行数据的存储与数据导出。
CSV(Comma-Separated Values)是一种简单通用的文本文件格式,以纯文本形式存储表格数据。它用逗号分隔不同的字段,每行代表一个数据记录,类似于电子表格或数据库中的行。由于其格式简单、易于读写且兼容性强,CSV被广泛应用于数据交换、导出和存储,支持几乎所有常见的办公软件和编程语言处理,是数据分析和系统间传输结构化信息时最常用的轻量级格式之一。
5.多线程
QThread 是 PyQt5 提供的线程类,用于在界面程序中安全地执行耗时任务,从而避免界面阻塞和卡顿。它允许将数据处理、模型推理、文件读写等操作放到独立线程中运行,并通过信号与槽机制与主线程进行通信,确保界面更新的稳定性与线程之间的安全交互。使用 QThread 可以显著提升应用程序的响应速度,使界面在后台任务执行期间依旧保持流畅,同时具备良好的扩展性与可维护性,在复杂的桌面端应用开发中尤为常用。
6.摔倒行为
摔倒行为的影响具有明显的多层次性,既涉及身体损伤,也牵动心理状态、家庭负担与社会资源消耗。从健康角度看,摔倒可能导致擦伤、挫伤、骨折乃至脑部损伤等不同程度的创伤,轻则影响日常活动,重则造成长期功能障碍甚至危及生命。除物理伤害外,摔倒还会在心理层面留下阴影,使人产生恐惧、回避行为,尤其是老年人更易发展为“害怕再次摔倒”的长期心理负担,从而减少活动、降低生活质量,形成身体功能退化与心理焦虑的循环。而在家庭与社会层面,摔倒往往意味着医疗费用增加、照护压力上升、生产力下降,并对公共医疗系统和基础设施安全建设提出更高要求。家庭可能因此承受经济与时间的双重成本,社会也需承担因伤病、康复与护理带来的长期支出。总体来看,摔倒并非孤立事件,其影响深远且复杂,预防与干预不仅是个人安全问题,也是公共健康管理的重要议题。
1.对身体健康造成的直接与潜在损伤影响
摔倒最直观、最直接的影响是对身体健康造成的损伤,这类损伤既包括可见的外伤,也包括潜在的深层次生理危害。轻微的摔倒可能只会带来擦伤、挫伤或局部皮下出血,但这些看似简单的损害往往伴随疼痛、局部肿胀以及一定时期的功能受限。更严重的摔倒则可能导致骨折、关节脱位、肌肉或韧带撕裂,尤其是在手腕、髋部、脊柱等结构脆弱或承压集中的部位。对于老年人而言,因骨质疏松导致的髋部骨折甚至可能改变其长期生活方式,引发卧床、感染、血栓等后续并发症。除此之外,摔倒还可能造成器官的潜在损害,例如头部受到撞击时产生脑震荡、硬膜下血肿等隐性危险,这些问题在初期不一定出现明显症状,但却可能在数小时或数天后迅速恶化。某些摔倒发生于湿滑地面、楼梯边缘或高处时,也可能导致全身性的冲击伤害,进而影响呼吸系统或循环系统的稳定性。总体而言,摔倒并不是一个简单的事件,它对人体健康的影响复杂而多维,不仅会带来短期痛苦,也可能留下长期功能障碍,甚至诱发更严重的健康危机,因此在日常生活和工作场景中,对预防摔倒的重视具有十分重要的意义。
2.对心理状态、行为习惯与社会参与的长期影响
摔倒不仅仅是身体层面的受伤事件,它还会对人们的心理状态产生显著影响,从而改变个体的行为模式和社会参与程度。许多人在经历摔倒后,会产生不同程度的恐惧感,例如害怕再次摔倒、担心自身行动的不稳定性,甚至对某些场景如湿滑地面、楼梯、户外活动产生过度规避。这类心理阴影在老年群体中特别明显,他们在摔倒后常会出现“跌倒恐惧综合征”,这种恐惧会导致活动减少、行动迟缓,使身体机能进一步退化,形成恶性循环。心理压力不仅来源于对受伤的担忧,还可能来自对他人眼光的敏感,例如在公共场所摔倒带来的尴尬和自我形象受损。这会促使个体减少社交、避免群体活动,从而影响社交关系与生活质量。对于一些职业人群而言,摔倒可能引发额外的工作焦虑,担心影响职业表现或工作稳定性。更深层次的影响还包括对自我效能感的削弱,让个体产生“自己不再可靠”的认知,降低自信心和自主性。在儿童和青少年中,严重摔倒事件则可能造成对体育活动的恐惧,影响运动参与及身体发展。综上,摔倒行为对心理和社会层面造成的冲击往往不易被及时察觉,但其累积作用可能远比伤口本身更持久、更深刻。
3.破坏建筑与设施
摔倒行为带来的影响还延伸至家庭与社会层面,尤其是在涉及医疗费用、照护需求、生产力损失等方面更为明显。对于受到较严重伤害的人而言,摔倒后的医疗支出往往不止于急诊或治疗费用,还包括后续的康复、理疗、药物、辅助器具乃至长期护理等投入。对于经济条件较为紧张的家庭,这类支出可能形成沉重负担。若伤者在家庭中承担经济支柱或主要照护角色,其暂时或长期失能会导致家庭收入下降,并增加其他成员的照护压力,使家庭结构和生活安排发生显著改变。在社会层面,大规模的摔倒事件(尤其是老年群体)会导致公共医疗体系、紧急救护与康复服务的需求增高,从而增加整体社会医疗成本。此外,因摔倒造成的劳动损失、请假、工伤赔偿等问题,也会对企业和社会生产效率产生影响,特别是在需要体力劳动或高技能工作的行业中更为突出。对于城市与社区管理者而言,摔倒事件频发还意味着公共设施安全性不足,例如道路不平、照明不足、扶手缺失等问题,这要求社会在基础设施建设与公共风险管理方面投入更多资源。长远来看,摔倒行为的社会经济影响不仅仅体现为一次性的医疗费用,更体现在对整个人群健康水平、社会生产力以及家庭稳定性的长期影响,因此预防摔倒不仅是个人责任,也是公共健康与社会治理的重要组成部分。
三.核心功能
1.登录注册
1.登录
软件启动后首先进入登录页面,用户需要输入正确的用户名和密码才能使用本系统的正式功能,登录页面整体采用了垂直布局,局部采用了水平布局,登录界面简约不简单,登录功能后端采用CSV本地文件存储用户信息,每次登录都是通过查库进行验证的,实现了流程标准化。
我们设计了简约的登录注册界面展示与用户交互的所有组件,登录注册界面的标题展示了系统的名称。

2.注册
没有账号的用户需要进行注册,注册操作流程十分简单,用户点击登录界面的注册按钮就跳转到了注册窗口,用户需要输入自定义的用户名和两次匹配的密码才能完成登录,值得一提的是,成功注册的用户软件会自动填写用户名和密码到登录界面,实现了登录流程路径的简化。
2.主界面
用户通过输入自己的用户名和密码登录到本系统后进入主界面,主界面内容十分丰富,我来一一介绍:首先软件整体是垂直布局,顶部是系统的标题,从左到右依次展示了系统的作者信息、系统名称、当前时间以及CPU内存占用情况,下方为水平布局,左侧是系统的导航区域,我们设计了windows风格支持展开与收缩的内容导航区域,右侧是内容核心区域,通过点击导航按钮切换展示内容,主界面主要展示了以日期为维度统计的数据、用户信息操作按钮、系统信息、系统环境信息以及实时CPU、内存可视化折线图

3.图像检测界面
1.检测结果展示
用户通过点击左侧导航栏按钮切换到图像检测界面,在此界面支持选择图像进行输入,用户选择完之后被选择的图像会展示在左侧并且展示图像绝对路径信息,用户可以通过点击右侧的“进行检测”按钮对输入的图像数据进行检测,系统会自动调用YOLOv8相关算法根据指定的参数对输入图像内容进行检测,最后将检测结果展示到右侧,这样用户可以通过比对左右图像的区别得到直观的检测结果,系统自动使用红色边框框选出目标区域并且使用红色文字展示出目标类别以及它的置信度,这些参数和展示效果都可以在设置页面进行详细设置。
2.导出检测结果
我们设置了检测结果区域,包括检测目标数量的展示以及详细检测结果表格,用户可以更加直观地看到检测结果数据,另外当用户检测结束之后右侧的三个按钮自动设置为可以点击,这三个按钮的作用分别是:
导出结果:用户可以将检测结果进行导出,导出的文件格式可以是Excel、CSV、TXT,可以根据情况自行选择导出格式,我截图给大家看下导出的Excel文件内容格式。
3.可视化展示
然后就是可视化展示,用户可以点击进行可视化按钮,查看对于本次检测的可视化效果,系统内置了四种可视化效果:分别是:目标位置热力图、目标面积占比、置信度分布直方图、检测能力柱状图,这些图标通过不同维度对当前数据进行了可视化展示,更便于用户理解,这里指的一体的是,支持可视化图表进行导出操作,用户可以点击紫色的导出按钮,对当前的可视化效果图表进行导出,生成一张本地的PNG图像文件。

4.AI(DeepSeek)智能分析
将YOLOv8球体检测系统与DeepSeek等AI大模型深度融合,能够实现从“单纯检测”到“智能认知”的跨越式升级。该系统在YOLOv8高效精准的球体定位能力基础上,融入了DeepSeek强大的语义理解和推理决策能力,不仅可以实时识别球体位置,还能深度分析场景语义、生成战术策略并提供智能决策支持,从而在体育分析、工业质检和机器人视觉等领域构建出更加智能化、自适应的一体化解决方案。

这里是软件的另外一个核心:AI智能分析,我们的目标检测系统接入了DeepSeek大模型,支持对当前检测结果数据进行AI分析,AI会通过不同维度对当前检测结果进行多角度分析,最后生成检测结果分析报告,用户可以根据这个结果对系统进行调整,不断完善系统功能和目标检测准确度!
在AI分析结束后下方会展示一些按钮,用户可以方便地复制结果、导出文本内容、生成PDF报告、重新生成以及关闭,多重的操作方式给于用户了多种选择!
4.视频检测界面
1.视频文件检测
我们的系统支持视频内容中的球体检测,支持输入的视频类型包括:视频文件、视频流以及摄像头,通过识别视频画面的内容对内容中的目标球体进行检测,试试标注与展示,通过相关帧率控制保证了视频的流畅性,用户可以通过比对左右两侧的画面使用肉眼评估当前检测结果,我们的视频检测界面拥有图像检测界面相同的操作功能,这里不多赘述。
2.摄像头内容检测
用户点击"进行检测"按钮之后系统会自动调用摄像头,打开摄像头展示摄像头画面,实时检测目标画面中的球体,通过左右画面比对让用户看到检测结果,这里本人就不露脸啦~
5.系统设置界面
我们的系统是支持简单的参数设置的,具体可以设置目标检测模型、置信度阈值(Conf)、交并比阈值(IOU)、还有一些检测结果控制参数,比如检测框展示、目标类别展示、目标置信度展示,用户可以点击绿色的刷新按钮刷新可用模型,亦可通过点击退出按钮退出系统或者退出登录,本设置页面实现了目标检测参数的灵活配置!
6.关于软件界面
我们使用富文本html的形式展示了软件相关的信息,包括系统用到的相关技术,对于二维的数据使用二维表进行了展示,最底部放置了四个按钮,分别是:关于YOLO、关于软件、关于作者、关于QT,点击之后都会弹出对应的信息提示框,这个页面的作用是让用户更多的了解软件和创作者信息,跨过技术的鸿沟!
四.数据集
本系统所使用的数据集围绕老鼠目标的多场景、多角度、多状态采集构建而成,旨在提升模型在真实环境中的适应性与鲁棒性。数据来源涵盖实验室、仓储区、地下室、户外夜间监控、粮仓、食品加工车间等多类复杂场景,结合不同光照条件、摄像头分辨率、遮挡程度与背景干扰,使模型能够学习到多样化的外观特征与环境变化。图像中包含站立、奔跑、觅食、半遮挡、远距离、小尺寸目标等多种姿态,并覆盖不同体型、颜色与运动模糊情况下的老鼠样本。数据集中不仅包含清晰标注的边界框,还对类别与置信度进行了严格校验,以确保训练时标签可信度和质量的一致性。经过清洗、去重、增强与格式化处理后,最终数据集能够满足 YOLOv8 等高性能检测模型的训练需求,使模型在实际部署中具备更强的泛化能力,即便在光照不足、目标部分遮挡或背景复杂的情况下,也能保持稳定识别效果。该数据集为系统实现高精度、高实时性的老鼠检测奠定了坚实基础。
1.数据准备
本系统附带9200张摔倒行为图像和9200个数据标注文件,大家可以根据自己的情况自行训练数据自己的模型!

我们使用VOC的格式存储数据标注文件,单数据标注文件内容如下:
<annotation>
<folder>new_images</folder>
<filename>fall_1000.jpg</filename>
<path>D:\FallDataset_A\new_images\fall_1000.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>500</width>
<height>350</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>fall</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>76</xmin>
<ymin>122</ymin>
<xmax>383</xmax>
<ymax>255</ymax>
</bndbox>
</object>
</annotation>
2.数据集处理
1.数据集标注文件类型转换
直接使用VOC格式的数据标注文件进行训练是不行的,需要我们将xml转成txt文件,
这段代码的作用是将指定文件夹中的 Pascal VOC 格式的 XML 标注文件批量转换为 YOLO 格式的 TXT 标注文件。它会先遍历所有 XML 自动统计有效类别并生成类别到 ID 的映射表,忽略类别名为 "not" 的标注,然后读取对应图片的尺寸,将 XML 中的边界框坐标转换为 YOLO 的归一化格式(class_id x_center y_center width height),最后将生成的 TXT 文件保存到指定目录中,便于直接用于 YOLO 训练。
大家首先执行step1_yolo_to_txt.py
import os
import xml.etree.ElementTree as ET
from PIL import Image
# 原始路径
xml_dir = r"E:\thunder_download\useful\跌倒检测混合集\Annotations"
img_dir = r"E:\thunder_download\useful\跌倒检测混合集\JPEGImages"
# YOLO标签输出路径
yolo_txt_dir = r"E:\thunder_download\useful\跌倒检测混合集\labels"
os.makedirs(yolo_txt_dir, exist_ok=True)
# 类别映射
class_map = {
"fall": 0}
# 支持的图像扩展
img_exts = [".jpg", ".jpeg", ".png", ".bmp"]
# 遍历 XML 文件
for xml_file in os.listdir(xml_dir):
if not xml_file.endswith(".xml"):
continue
xml_path = os.path.join(xml_dir, xml_file)
tree = ET.parse(xml_path)
root = tree.getroot()
# --- 以 XML 文件名匹配图像 ---
base = os.path.splitext(xml_file)[0]
img_path = None
for ext in img_exts:
candidate = os.path.join(img_dir, base + ext)
if os.path.exists(candidate):
img_path = candidate
break
if img_path is None:
print(f"Warning: 图像文件与 {xml_file} 同名的图片不存在,跳过")
continue
# 获取图像尺寸
try:
with Image.open(img_path) as img:
w, h = img.size
except Exception as e:
print(f"无法打开图片 {img_path}: {e}")
continue
txt_lines = []
# 遍历目标
for obj in root.findall("object"):
name_node = obj.find("name")
if name_node is None:
continue
label = name_node.text.strip()
if label not in class_map:
continue
class_id = class_map[label]
bndbox = obj.find("bndbox")
if bndbox is None:
continue
xmin = float(bndbox.find("xmin").text)
ymin = float(bndbox.find("ymin").text)
xmax = float(bndbox.find("xmax").text)
ymax = float(bndbox.find("ymax").text)
x_center = ((xmin + xmax) / 2) / w
y_center = ((ymin + ymax) / 2) / h
box_width = (xmax - xmin) / w
box_height = (ymax - ymin) / h
txt_lines.append(
f"{class_id} {x_center:.6f} {y_center:.6f} {box_width:.6f} {box_height:.6f}"
)
# 保存 YOLO txt
txt_file_path = os.path.join(yolo_txt_dir, base + ".txt")
with open(txt_file_path, "w") as f:
f.write("\n".join(txt_lines))
print(f"转换完成!YOLO TXT 文件已保存在: {yolo_txt_dir}")
2.数据集拆分
YOLO 推荐训练集和测试集按 8:2 划分,主要是因为目标检测对样本量非常依赖,需要尽可能多的训练数据来学习特征,同时又必须保留足够的独立测试数据来评估模型的真实泛化能力。8:2 被证明在“训练数据够多”与“测试评估足够稳定”之间取得了较好平衡,因此成为默认且通用的实践比例。
这个脚本的作用是从已有的图片和 YOLO 标注文件中随机抽取 200 张图片,并将它们按照训练集和验证集的比例进行划分,然后将对应的图片和 TXT 标注文件复制到新的数据集目录中,方便直接用于训练 YOLO 模型。脚本会先创建训练集和验证集的图片、标签子目录,然后随机选择 200 张图片,其中 40 张作为验证集,其余 160 张作为训练集,复制过程中会保证每张图片对应的标注文件也被同步复制,如果标注文件不存在,会生成一个空的 TXT 文件,以保持文件结构完整。运行完成后,新的数据集就整理好了,可以直接用于训练和验证。。最终会在目标目录下生成:
执行脚本step2_auto_part.py
import os
import random
import shutil
# 原始数据路径
img_dir = r"E:\thunder_download\useful\跌倒检测混合集\JPEGImages"
label_dir = r"E:\thunder_download\useful\跌倒检测混合集\labels"
# 新数据集路径
dataset_dir = r"E:\thunder_download\useful\跌倒检测混合集\dataset"
train_img_dir = os.path.join(dataset_dir, "train", "images")
train_label_dir = os.path.join(dataset_dir, "train", "labels")
val_img_dir = os.path.join(dataset_dir, "val", "images")
val_label_dir = os.path.join(dataset_dir, "val", "labels")
# 创建目录
for dir_path in [train_img_dir, train_label_dir, val_img_dir, val_label_dir]:
os.makedirs(dir_path, exist_ok=True)
# 获取所有图片文件
all_images = [f for f in os.listdir(img_dir) if f.lower().endswith((".jpg", ".png", ".jpeg"))]
# 随机抽取200张
if len(all_images) < 200:
raise ValueError(f"图片数量不足200张,当前数量: {len(all_images)}")
selected_images = random.sample(all_images, 200)
# 分割训练集和验证集
random.shuffle(selected_images)
val_images = selected_images[:40]
train_images = selected_images[40:]
def copy_files(image_list, target_img_dir, target_label_dir):
for img_file in image_list:
# 复制图片
src_img_path = os.path.join(img_dir, img_file)
dst_img_path = os.path.join(target_img_dir, img_file)
shutil.copy(src_img_path, dst_img_path)
# 对应的txt
label_file = os.path.splitext(img_file)[0] + ".txt"
src_label_path = os.path.join(label_dir, label_file)
if os.path.exists(src_label_path):
dst_label_path = os.path.join(target_label_dir, label_file)
shutil.copy(src_label_path, dst_label_path)
else:
# 如果没有对应txt文件,创建一个空文件
open(os.path.join(target_label_dir, label_file), "w").close()
# 复制训练集
copy_files(train_images, train_img_dir, train_label_dir)
# 复制验证集
copy_files(val_images, val_img_dir, val_label_dir)
print(f"随机抽取完成!训练集: {len(train_images)} 张,验证集: {len(val_images)} 张")
print(f"数据集路径: {dataset_dir}")
3.模型训练
数据集准备好之后就可以开始模型训练了,我们首先准备一个训练的配置文件,比如说是data.yaml
然后就可以开始模型训练了,直接执行我们准备好的train.bat文件,内容就是下面的内容
yolo task=detect mode=train model=../data/model/yolov8n.pt data=./data.yaml epochs=30 imgsz=640 batch=16 lr0=0.01
然后模型就开始训练了
这里我贴一些训练验证结果截图


最后的results.png见下图,训练效果还是可以的!
本次 YOLOv8 摔倒检测模型的训练过程整体呈现稳定收敛趋势,各项损失指标(box、cls、dfl)从前期的高值逐步下降,说明模型成功学习到目标边界、类别特征及空间分布信息。随着训练推进,Precision 从接近 0 上升到 0.53,代表误检率持续降低,模型对“真摔倒”与“假摔倒”的区分能力显著增强。Recall 最终稳定在约 0.52,表明模型具备一定的摔倒捕捉能力。mAP50 从早期的 0.29 提升到 0.44,呈稳步增长态势,说明检测的综合性能持续改进。训练过程中未出现发散或不稳定情况,学习率调度平稳,模型表现出健康的优化轨迹。总体来看,该模型已经达到可用水平,具备基本摔倒识别能力,并展现出持续提升空间。
1. 损失函数整体下降明显
train box / cls / dfl 均持续下降
➡️ 说明模型在稳定、有效地学习特征,收敛性良好。
2. 精度(Precision)大幅提升
从 0.004 → 0.536
➡️ 模型越来越能区分摔倒与非摔倒,误检率显著降低。
3. 召回率(Recall)后期达到较高水平
最终回升并稳定在 0.526
➡️ 模型已经具备较好的摔倒捕捉能力。
4. mAP50 曲线稳步上升
从 0.29 → 0.44
➡️ 模型“检测定位 + 分类”能力在持续增强。
5. 训练过程平稳,无发散现象
学习率调度合理
各项指标稳定提升
➡️ 表示训练流程设计良好,超参选择较为科学。
6. 后期分类损失(cls loss)下降到较低水平
➡️ 说明模型已经学到较清晰的摔倒行为特征表达。
7. 性能趋势说明模型具有进一步提升空间
➡️ 收敛趋势良好,只要继续优化数据或训练轮数,性能还会再提升。

我们的检测系统可以用在的应用场景:
**1. 智慧养老院与老年护理中心
实时监控老人活动状态,在摔倒发生的瞬间自动识别并报警。
融合 DeepSeek 推理模块,对行为进行二次验证,降低误报率。
可通过 PyQt5 可视化界面显示监控画面、告警日志与风险趋势。
- 居家独居老人安全防护
安装轻量化摄像设备后即可运行,无需复杂部署。
当检测到摔倒行为时立即向家属推送通知或语音提醒。
支持本地推理,保护用户隐私,不依赖云端。 - 医院康复病房与术后看护
自动识别患者康复期间的异常跌倒行为,辅助护理人员及时介入。
使用 YOLOv8 对患者姿态进行稳定识别,DeepSeek 模型用于判断行为是否属于“意外事件”。
可接入病房管理系统,实现实时数据共享。 - 工厂、仓库等工业场景安全监控
针对高风险工作区域(如高处作业、搬运区)实时识别作业人员的摔倒事故。
在 PyQt5 控制台中展示多个监控点的状态,管理员可快速定位异常区域。
结合生产安全分析模块,支持后端统计与事故复盘。 - 校园安防与宿舍安全管理
对宿舍楼、教学楼的楼梯间与走廊进行实时监控,发现学生跌倒时即时通知值班人员。
可与校园信息化系统对接,记录事件时间、位置及视频片段。
AI 模型对复杂光照与遮挡情况具有较强鲁棒性,减少误报。 - 智慧城市公共区域监控
在公园、地铁站口、广场等公共区域实现自动化摔倒识别。
提供视频流实时分析,结合警务联动系统实现自动调度。
多摄像头统一接入 PyQt5 界面,便于城市管理部门集中监控。 - 酒店及商业场所安全保障
在酒店走廊、商场扶梯附近对顾客、行人的摔倒行为进行识别与提示。
YOLOv8 模型支持大范围人流检测,DeepSeek 模型提升异常事件分析能力。
可输出风险统计报表,用于优化场所布局及安全防护措施。**
五.项目运行环境
本项目名称为yolov8-fall-detection
1.项目依赖
博主是在Windows电脑上使用Python3.8开发的本系统,建议大家使用的Python版本别太高。
其中项目依赖为:
PyQt5==5.15.11
QtAwesome==1.3.1
torch==2.4.1
torchvision==0.19.1
Pillow==9.3.0
pyqtgraph===0.13.3
PyQtWebEngine==5.15.5
opencv-python==4.10.0.82
ultralytics==8.3.234
Requests==2.32.5
pandas==2.0.3
numpy==1.24.4
Markdown==3.4.4
我已经整理到了requirements.txt,大家直接使用命令pip install -r requirements.txt
即可一键安装项目依赖,其中的torch和torchvision只要匹配即可,不一定非要和博主开发环境的版本一致。
2.项目结构
很多小伙伴担心拿到代码后项目看不懂,这个大家不必担心,我们采用文件+类名对相关功能进行了模块化定义,大家见名知意。
下图博主采用tree命令生成了文件、目录树
tree "D:\projects\gitee\2025\yolov8-fall-detection" /f /a
D:\PROJECTS\GITEE\2025\yolov8-fall-detection
| .gitignore
| main.py(程序入口)
| record.txt(开发记录)
| requirements.txt(项目依赖)
|
|
+---script
| create_qrc.py
|
+---src(源代码核心目录)
| +---conf(配置内容)
| | | icon_conf.py
| | | style_conf.py
| | | system_conf.py
| | | test_data.py
| | | __init__.py
| |
| +---engine(核心引擎)
| | engines.py
| | __init__.py
| |
| +---resource(资源目录)
| | | resource.qrc
| | | resource_rc.py
| | | __init__.py
| | |
| | \---imgs
| | ai.svg
| | bg.jpg
| |
| +---threads(线程、信号总线)
| | main_threads.py
| | signal_bus.py
| | __init__.py
| |
| +---utils(工具方法、工具类)
| | custom_utils.py
| | user_manager.py
| | __init__.py
| |
| \---widgets(组件目录)
| base_widgets.py
| custom_pages.py
| custom_widgets.py
| main_page.py
| unique_widgets.py
| __init__.py

六.总结
基于 PyQt5 + YOLOv8 + DeepSeek 打造的摔倒行为检测系统,是一款面向实际场景的智能视觉安全平台,融合了实时监测、姿态识别、行为判断、数据分析、可视化与智能辅助决策等能力,为养老院、智能家居、医院病房、校园场景以及公共设施的跌倒风险监控提供稳定、高效、自动化的技术支撑。
系统以 PyQt5 构建主界面框架,通过模块化页面管理与人性化布局设计,让用户能够在图像检测、视频检测、实时流识别、摄像头监控等功能之间自由切换。所有操作都在流畅的窗口组件中完成,从模型选择、参数配置到检测结果查看,都具备完整的交互逻辑。
YOLOv8 作为核心行为识别模型,通过多线程架构与 DetectThread 深度适配,实现了对人物姿态、异常行为以及摔倒事件的高速推理。无论输入为本地图片、录制视频,还是 RTSP/RTMP 摄像头流,系统都能保持稳定的帧率输出,在独立播放线程中完成清晰的视频渲染,并实时绘制目标检测框、行为类别标签与置信度,确保摔倒事件能够在第一时间被识别。
除了基础识别功能,系统提供完善的数据记录与导出能力,支持 CSV、Excel、TXT 等格式保存检测日志,使每一次事件检测都可追溯。内置的 DeepSeek 智能分析模块会根据识别信息自动生成结构化评估报告,包括摔倒行为的发生概率、可疑姿态分析、潜在风险点以及处理建议,帮助管理人员快速理解事件,并作出更合理的应对。
系统配套的可视化组件能够将历史识别数据转化为多种统计图表,对摔倒发生时间段、区域风险等级、事件频率趋势等关键指标形成直观展示,便于安全管理人员进行风险评估与资源调配。
此外,系统还拥有用户管理、参数调校、实时画面清理、线程自动控制等配套机制,使得整个平台可在长时间不间断运行的情况下保持稳定性能。整体架构结合多线程与事件驱动的优势,将图形界面、AI 推理、数据处理与智能决策有机融合,形成一套专业、易用、可扩展的摔倒行为检测解决方案,适用于多种场景的智能安防建设。
本次给大家介绍了我使用PyQt5+YOLOv8+DeepSeek的摔倒行为检测系统,本系统功能强大,支持多种数据源输入,包含多种用户交互按钮以及模式,内置数据可视化方案、大模型AI加持,是您学习、工作使用的不错选择!
需要代码的朋友可以点击箭头下方的二维码加我好友,欢迎您了解!
文章目录
一.前言
二.核心技术&知识
1.PyQt5
2.YOLOv8
3.DeepSeek
4.CSV
5.多线程
6.摔倒行为
1.对身体健康造成的直接与潜在损伤影响
2.对心理状态、行为习惯与社会参与的长期影响
3.破坏建筑与设施
三.核心功能
1.登录注册
1.登录
2.注册
2.主界面
3.图像检测界面
1.检测结果展示
2.导出检测结果
3.可视化展示
4.AI(DeepSeek)智能分析
4.视频检测界面
1.视频文件检测
2.摄像头内容检测
5.系统设置界面
6.关于软件界面
四.数据集
1.数据准备
2.数据集处理
1.数据集标注文件类型转换
2.数据集拆分
3.模型训练
五.项目运行环境
1.项目依赖
2.项目结构
六.总结
本系统功能强大!支持对图片、视频、视频流、摄像头中的摔倒行为进行检测,支持多种数据数据源输入并且接入了AI实现了对当前分析结果的评估,欢迎了解!
在这里插入图片描述
一.前言
基于PyQt5+YOLOv8+DeepSeek的摔倒行为检测系统的提出,源于智能安防与智慧养老快速发展的时代背景。随着人口老龄化加剧,独居老人或特殊群体因摔倒造成的伤害与延迟救助问题日益突出,而传统的人工巡查方式不仅耗费大量人力,也难以及时发现紧急情况。与此同时,计算机视觉技术在深度学习浪潮推动下取得突破,尤其是以YOLOv8为代表的目标检测模型在实时性与精度上兼具显著优势,能够高效捕捉人体姿态变化;PyQt5在桌面应用开发领域成熟稳健,为系统提供了可视化友好的交互界面和便捷的业务逻辑组织方式;而DeepSeek类语言模型的加入,让系统在异常判断解释、事件分析报告生成以及智能配置辅助等方面具备更高的智能化水平。三者的协作,不仅让摔倒检测从传统的视频监控识别进化到集检测、分析、交互与可扩展能力于一体的综合系统,也为后续的场景扩展(如养老院、医院、社区安防、工业安全监管等)奠定了技术基础。该系统的意义体现在多个层面:在民生层面,它提升了高危人群的安全保障,实现无人值守条件下的实时预警;在技术层面,它展示了前沿视觉算法与智能人机交互的深度融合实践;在产业层面,它为智能安防产品提供了更高效、更智能的落地方案,推动了智慧养老与公共安全领域的数字化升级;在社会价值层面,它通过减少事故伤害、提高响应效率,为构建更加安全、友好的社会环境提供了可借鉴的解决思路。整体而言,这一系统不仅是技术集成的产物,更是社会需求驱动下的创新回应,具有重要的研究意义与应用前景。
二.核心技术&知识
在这章我将要介绍本系统的核心技术。
1.PyQt5
PyQt5 是一套用于创建跨平台桌面应用程序的 Python GUI 工具包,它是 Qt 应用框架的 Python 绑定。通过 PyQt5,开发者可以使用 Python 编写具有现代图形界面的应用程序,支持丰富的控件、信号与槽机制、窗口管理、事件处理等功能。它兼容主流操作系统(如 Windows、macOS 和 Linux),适用于开发各种规模的桌面软件,常与 Qt Designer 配合使用以加快开发效率。请添加图片描述
2.YOLOv8
YOLOv8(You Only Look Once version 8)是由 Ultralytics 推出的最新一代实时目标检测模型,属于 YOLO 系列的改进版本。相比前代模型,YOLOv8 在精度、速度和灵活性上都有显著提升,支持目标检测、图像分割、姿态估计等多任务处理。它采用了更加高效的网络结构和训练策略,并提供开箱即用的 Python 接口和命令行工具,适用于边缘设备和云端部署,广泛应用于安防监控、自动驾驶、工业检测等场景。
在这里插入图片描述
3.DeepSeek
DeepSeek是由深度求索公司开发的AI大模型助手,作为纯文本模型,我擅长自然语言处理、文档分析和智能对话。当与YOLO(You Only Look Once)实时目标检测系统结合时,可以形成强大的多模态应用架构——YOLO系统负责实时视觉识别和目标检测,快速准确地识别图像或视频流中的物体;而我则对YOLO检测到的结果进行深度语义分析和上下文理解,提供物体属性的详细解读、场景描述、行为分析以及决策建议。这种结合使得计算机视觉的“看到”与AI的“理解”完美融合,可广泛应用于智能监控、自动驾驶、工业质检等领域,实现从视觉感知到智能决策的完整闭环。
在这里插入图片描述
4.CSV
本系统使用CSV进行数据的存储与数据导出。
CSV(Comma-Separated Values)是一种简单通用的文本文件格式,以纯文本形式存储表格数据。它用逗号分隔不同的字段,每行代表一个数据记录,类似于电子表格或数据库中的行。由于其格式简单、易于读写且兼容性强,CSV被广泛应用于数据交换、导出和存储,支持几乎所有常见的办公软件和编程语言处理,是数据分析和系统间传输结构化信息时最常用的轻量级格式之一。在这里插入图片描述
5.多线程
QThread 是 PyQt5 提供的线程类,用于在界面程序中安全地执行耗时任务,从而避免界面阻塞和卡顿。它允许将数据处理、模型推理、文件读写等操作放到独立线程中运行,并通过信号与槽机制与主线程进行通信,确保界面更新的稳定性与线程之间的安全交互。使用 QThread 可以显著提升应用程序的响应速度,使界面在后台任务执行期间依旧保持流畅,同时具备良好的扩展性与可维护性,在复杂的桌面端应用开发中尤为常用。在这里插入图片描述
6.摔倒行为
摔倒行为的影响具有明显的多层次性,既涉及身体损伤,也牵动心理状态、家庭负担与社会资源消耗。从健康角度看,摔倒可能导致擦伤、挫伤、骨折乃至脑部损伤等不同程度的创伤,轻则影响日常活动,重则造成长期功能障碍甚至危及生命。除物理伤害外,摔倒还会在心理层面留下阴影,使人产生恐惧、回避行为,尤其是老年人更易发展为“害怕再次摔倒”的长期心理负担,从而减少活动、降低生活质量,形成身体功能退化与心理焦虑的循环。而在家庭与社会层面,摔倒往往意味着医疗费用增加、照护压力上升、生产力下降,并对公共医疗系统和基础设施安全建设提出更高要求。家庭可能因此承受经济与时间的双重成本,社会也需承担因伤病、康复与护理带来的长期支出。总体来看,摔倒并非孤立事件,其影响深远且复杂,预防与干预不仅是个人安全问题,也是公共健康管理的重要议题。
1.对身体健康造成的直接与潜在损伤影响
摔倒最直观、最直接的影响是对身体健康造成的损伤,这类损伤既包括可见的外伤,也包括潜在的深层次生理危害。轻微的摔倒可能只会带来擦伤、挫伤或局部皮下出血,但这些看似简单的损害往往伴随疼痛、局部肿胀以及一定时期的功能受限。更严重的摔倒则可能导致骨折、关节脱位、肌肉或韧带撕裂,尤其是在手腕、髋部、脊柱等结构脆弱或承压集中的部位。对于老年人而言,因骨质疏松导致的髋部骨折甚至可能改变其长期生活方式,引发卧床、感染、血栓等后续并发症。除此之外,摔倒还可能造成器官的潜在损害,例如头部受到撞击时产生脑震荡、硬膜下血肿等隐性危险,这些问题在初期不一定出现明显症状,但却可能在数小时或数天后迅速恶化。某些摔倒发生于湿滑地面、楼梯边缘或高处时,也可能导致全身性的冲击伤害,进而影响呼吸系统或循环系统的稳定性。总体而言,摔倒并不是一个简单的事件,它对人体健康的影响复杂而多维,不仅会带来短期痛苦,也可能留下长期功能障碍,甚至诱发更严重的健康危机,因此在日常生活和工作场景中,对预防摔倒的重视具有十分重要的意义。
2.对心理状态、行为习惯与社会参与的长期影响
摔倒不仅仅是身体层面的受伤事件,它还会对人们的心理状态产生显著影响,从而改变个体的行为模式和社会参与程度。许多人在经历摔倒后,会产生不同程度的恐惧感,例如害怕再次摔倒、担心自身行动的不稳定性,甚至对某些场景如湿滑地面、楼梯、户外活动产生过度规避。这类心理阴影在老年群体中特别明显,他们在摔倒后常会出现“跌倒恐惧综合征”,这种恐惧会导致活动减少、行动迟缓,使身体机能进一步退化,形成恶性循环。心理压力不仅来源于对受伤的担忧,还可能来自对他人眼光的敏感,例如在公共场所摔倒带来的尴尬和自我形象受损。这会促使个体减少社交、避免群体活动,从而影响社交关系与生活质量。对于一些职业人群而言,摔倒可能引发额外的工作焦虑,担心影响职业表现或工作稳定性。更深层次的影响还包括对自我效能感的削弱,让个体产生“自己不再可靠”的认知,降低自信心和自主性。在儿童和青少年中,严重摔倒事件则可能造成对体育活动的恐惧,影响运动参与及身体发展。综上,摔倒行为对心理和社会层面造成的冲击往往不易被及时察觉,但其累积作用可能远比伤口本身更持久、更深刻。
3.破坏建筑与设施
摔倒行为带来的影响还延伸至家庭与社会层面,尤其是在涉及医疗费用、照护需求、生产力损失等方面更为明显。对于受到较严重伤害的人而言,摔倒后的医疗支出往往不止于急诊或治疗费用,还包括后续的康复、理疗、药物、辅助器具乃至长期护理等投入。对于经济条件较为紧张的家庭,这类支出可能形成沉重负担。若伤者在家庭中承担经济支柱或主要照护角色,其暂时或长期失能会导致家庭收入下降,并增加其他成员的照护压力,使家庭结构和生活安排发生显著改变。在社会层面,大规模的摔倒事件(尤其是老年群体)会导致公共医疗体系、紧急救护与康复服务的需求增高,从而增加整体社会医疗成本。此外,因摔倒造成的劳动损失、请假、工伤赔偿等问题,也会对企业和社会生产效率产生影响,特别是在需要体力劳动或高技能工作的行业中更为突出。对于城市与社区管理者而言,摔倒事件频发还意味着公共设施安全性不足,例如道路不平、照明不足、扶手缺失等问题,这要求社会在基础设施建设与公共风险管理方面投入更多资源。长远来看,摔倒行为的社会经济影响不仅仅体现为一次性的医疗费用,更体现在对整个人群健康水平、社会生产力以及家庭稳定性的长期影响,因此预防摔倒不仅是个人责任,也是公共健康与社会治理的重要组成部分。
三.核心功能
1.登录注册
1.登录
软件启动后首先进入登录页面,用户需要输入正确的用户名和密码才能使用本系统的正式功能,登录页面整体采用了垂直布局,局部采用了水平布局,登录界面简约不简单,登录功能后端采用CSV本地文件存储用户信息,每次登录都是通过查库进行验证的,实现了流程标准化。
我们设计了简约的登录注册界面展示与用户交互的所有组件,登录注册界面的标题展示了系统的名称。
在这里插入图片描述
2.注册
没有账号的用户需要进行注册,注册操作流程十分简单,用户点击登录界面的注册按钮就跳转到了注册窗口,用户需要输入自定义的用户名和两次匹配的密码才能完成登录,值得一提的是,成功注册的用户软件会自动填写用户名和密码到登录界面,实现了登录流程路径的简化。
在这里插入图片描述
2.主界面
用户通过输入自己的用户名和密码登录到本系统后进入主界面,主界面内容十分丰富,我来一一介绍:首先软件整体是垂直布局,顶部是系统的标题,从左到右依次展示了系统的作者信息、系统名称、当前时间以及CPU内存占用情况,下方为水平布局,左侧是系统的导航区域,我们设计了windows风格支持展开与收缩的内容导航区域,右侧是内容核心区域,通过点击导航按钮切换展示内容,主界面主要展示了以日期为维度统计的数据、用户信息操作按钮、系统信息、系统环境信息以及实时CPU、内存可视化折线图
在这里插入图片描述
3.图像检测界面
1.检测结果展示
用户通过点击左侧导航栏按钮切换到图像检测界面,在此界面支持选择图像进行输入,用户选择完之后被选择的图像会展示在左侧并且展示图像绝对路径信息,用户可以通过点击右侧的“进行检测”按钮对输入的图像数据进行检测,系统会自动调用YOLOv8相关算法根据指定的参数对输入图像内容进行检测,最后将检测结果展示到右侧,这样用户可以通过比对左右图像的区别得到直观的检测结果,系统自动使用红色边框框选出目标区域并且使用红色文字展示出目标类别以及它的置信度,这些参数和展示效果都可以在设置页面进行详细设置。
在这里插入图片描述
2.导出检测结果
我们设置了检测结果区域,包括检测目标数量的展示以及详细检测结果表格,用户可以更加直观地看到检测结果数据,另外当用户检测结束之后右侧的三个按钮自动设置为可以点击,这三个按钮的作用分别是:
导出结果:用户可以将检测结果进行导出,导出的文件格式可以是Excel、CSV、TXT,可以根据情况自行选择导出格式,我截图给大家看下导出的Excel文件内容格式。
在这里插入图片描述
3.可视化展示
然后就是可视化展示,用户可以点击进行可视化按钮,查看对于本次检测的可视化效果,系统内置了四种可视化效果:分别是:目标位置热力图、目标面积占比、置信度分布直方图、检测能力柱状图,这些图标通过不同维度对当前数据进行了可视化展示,更便于用户理解,这里指的一体的是,支持可视化图表进行导出操作,用户可以点击紫色的导出按钮,对当前的可视化效果图表进行导出,生成一张本地的PNG图像文件。
在这里插入图片描述
4.AI(DeepSeek)智能分析
将YOLOv8球体检测系统与DeepSeek等AI大模型深度融合,能够实现从“单纯检测”到“智能认知”的跨越式升级。该系统在YOLOv8高效精准的球体定位能力基础上,融入了DeepSeek强大的语义理解和推理决策能力,不仅可以实时识别球体位置,还能深度分析场景语义、生成战术策略并提供智能决策支持,从而在体育分析、工业质检和机器人视觉等领域构建出更加智能化、自适应的一体化解决方案。
在这里插入图片描述
这里是软件的另外一个核心:AI智能分析,我们的目标检测系统接入了DeepSeek大模型,支持对当前检测结果数据进行AI分析,AI会通过不同维度对当前检测结果进行多角度分析,最后生成检测结果分析报告,用户可以根据这个结果对系统进行调整,不断完善系统功能和目标检测准确度!
在AI分析结束后下方会展示一些按钮,用户可以方便地复制结果、导出文本内容、生成PDF报告、重新生成以及关闭,多重的操作方式给于用户了多种选择!
4.视频检测界面
1.视频文件检测
我们的系统支持视频内容中的球体检测,支持输入的视频类型包括:视频文件、视频流以及摄像头,通过识别视频画面的内容对内容中的目标球体进行检测,试试标注与展示,通过相关帧率控制保证了视频的流畅性,用户可以通过比对左右两侧的画面使用肉眼评估当前检测结果,我们的视频检测界面拥有图像检测界面相同的操作功能,这里不多赘述。
在这里插入图片描述
2.摄像头内容检测
用户点击"进行检测"按钮之后系统会自动调用摄像头,打开摄像头展示摄像头画面,实时检测目标画面中的球体,通过左右画面比对让用户看到检测结果,这里本人就不露脸啦~
5.系统设置界面
我们的系统是支持简单的参数设置的,具体可以设置目标检测模型、置信度阈值(Conf)、交并比阈值(IOU)、还有一些检测结果控制参数,比如检测框展示、目标类别展示、目标置信度展示,用户可以点击绿色的刷新按钮刷新可用模型,亦可通过点击退出按钮退出系统或者退出登录,本设置页面实现了目标检测参数的灵活配置!
在这里插入图片描述
6.关于软件界面
我们使用富文本html的形式展示了软件相关的信息,包括系统用到的相关技术,对于二维的数据使用二维表进行了展示,最底部放置了四个按钮,分别是:关于YOLO、关于软件、关于作者、关于QT,点击之后都会弹出对应的信息提示框,这个页面的作用是让用户更多的了解软件和创作者信息,跨过技术的鸿沟!
在这里插入图片描述
四.数据集
本系统所使用的数据集围绕老鼠目标的多场景、多角度、多状态采集构建而成,旨在提升模型在真实环境中的适应性与鲁棒性。数据来源涵盖实验室、仓储区、地下室、户外夜间监控、粮仓、食品加工车间等多类复杂场景,结合不同光照条件、摄像头分辨率、遮挡程度与背景干扰,使模型能够学习到多样化的外观特征与环境变化。图像中包含站立、奔跑、觅食、半遮挡、远距离、小尺寸目标等多种姿态,并覆盖不同体型、颜色与运动模糊情况下的老鼠样本。数据集中不仅包含清晰标注的边界框,还对类别与置信度进行了严格校验,以确保训练时标签可信度和质量的一致性。经过清洗、去重、增强与格式化处理后,最终数据集能够满足 YOLOv8 等高性能检测模型的训练需求,使模型在实际部署中具备更强的泛化能力,即便在光照不足、目标部分遮挡或背景复杂的情况下,也能保持稳定识别效果。该数据集为系统实现高精度、高实时性的老鼠检测奠定了坚实基础。
1.数据准备
本系统附带9200张摔倒行为图像和9200个数据标注文件,大家可以根据自己的情况自行训练数据自己的模型!
在这里插入图片描述
我们使用VOC的格式存储数据标注文件,单数据标注文件内容如下:
new_images
fall_1000.jpg
D:\FallDataset_A\new_images\fall_1000.jpg
Unknown
500
350
3
0
2.数据集处理
1.数据集标注文件类型转换
直接使用VOC格式的数据标注文件进行训练是不行的,需要我们将xml转成txt文件,
这段代码的作用是将指定文件夹中的 Pascal VOC 格式的 XML 标注文件批量转换为 YOLO 格式的 TXT 标注文件。它会先遍历所有 XML 自动统计有效类别并生成类别到 ID 的映射表,忽略类别名为 "not" 的标注,然后读取对应图片的尺寸,将 XML 中的边界框坐标转换为 YOLO 的归一化格式(class_id x_center y_center width height),最后将生成的 TXT 文件保存到指定目录中,便于直接用于 YOLO 训练。
大家首先执行step1_yolo_to_txt.py
import os
import xml.etree.ElementTree as ET
from PIL import Image
原始路径
xml_dir = r"E:\thunder_download\useful\跌倒检测混合集\Annotations"
img_dir = r"E:\thunder_download\useful\跌倒检测混合集\JPEGImages"
YOLO标签输出路径
yolo_txt_dir = r"E:\thunder_download\useful\跌倒检测混合集\labels"
os.makedirs(yolo_txt_dir, exist_ok=True)
类别映射
class_map = {"fall": 0}
支持的图像扩展
img_exts = [".jpg", ".jpeg", ".png", ".bmp"]
遍历 XML 文件
for xml_file in os.listdir(xml_dir):
if not xml_file.endswith(".xml"):
continue
xml_path = os.path.join(xml_dir, xml_file)
tree = ET.parse(xml_path)
root = tree.getroot()
# --- 以 XML 文件名匹配图像 ---
base = os.path.splitext(xml_file)[0]
img_path = None
for ext in img_exts:
candidate = os.path.join(img_dir, base + ext)
if os.path.exists(candidate):
img_path = candidate
break
if img_path is None:
print(f"Warning: 图像文件与 {xml_file} 同名的图片不存在,跳过")
continue
# 获取图像尺寸
try:
with Image.open(img_path) as img:
w, h = img.size
except Exception as e:
print(f"无法打开图片 {img_path}: {e}")
continue
txt_lines = []
# 遍历目标
for obj in root.findall("object"):
name_node = obj.find("name")
if name_node is None:
continue
label = name_node.text.strip()
if label not in class_map:
continue
class_id = class_map[label]
bndbox = obj.find("bndbox")
if bndbox is None:
continue
xmin = float(bndbox.find("xmin").text)
ymin = float(bndbox.find("ymin").text)
xmax = float(bndbox.find("xmax").text)
ymax = float(bndbox.find("ymax").text)
x_center = ((xmin + xmax) / 2) / w
y_center = ((ymin + ymax) / 2) / h
box_width = (xmax - xmin) / w
box_height = (ymax - ymin) / h
txt_lines.append(
f"{class_id} {x_center:.6f} {y_center:.6f} {box_width:.6f} {box_height:.6f}"
)
# 保存 YOLO txt
txt_file_path = os.path.join(yolo_txt_dir, base + ".txt")
with open(txt_file_path, "w") as f:
f.write("\n".join(txt_lines))
print(f"转换完成!YOLO TXT 文件已保存在: {yolo_txt_dir}")
2.数据集拆分
YOLO 推荐训练集和测试集按 8:2 划分,主要是因为目标检测对样本量非常依赖,需要尽可能多的训练数据来学习特征,同时又必须保留足够的独立测试数据来评估模型的真实泛化能力。8:2 被证明在“训练数据够多”与“测试评估足够稳定”之间取得了较好平衡,因此成为默认且通用的实践比例。
这个脚本的作用是从已有的图片和 YOLO 标注文件中随机抽取 200 张图片,并将它们按照训练集和验证集的比例进行划分,然后将对应的图片和 TXT 标注文件复制到新的数据集目录中,方便直接用于训练 YOLO 模型。脚本会先创建训练集和验证集的图片、标签子目录,然后随机选择 200 张图片,其中 40 张作为验证集,其余 160 张作为训练集,复制过程中会保证每张图片对应的标注文件也被同步复制,如果标注文件不存在,会生成一个空的 TXT 文件,以保持文件结构完整。运行完成后,新的数据集就整理好了,可以直接用于训练和验证。。最终会在目标目录下生成:
在这里插入图片描述
执行脚本step2_auto_part.py
import os
import random
import shutil
原始数据路径
img_dir = r"E:\thunder_download\useful\跌倒检测混合集\JPEGImages"
label_dir = r"E:\thunder_download\useful\跌倒检测混合集\labels"
新数据集路径
dataset_dir = r"E:\thunder_download\useful\跌倒检测混合集\dataset"
train_img_dir = os.path.join(dataset_dir, "train", "images")
train_label_dir = os.path.join(dataset_dir, "train", "labels")
val_img_dir = os.path.join(dataset_dir, "val", "images")
val_label_dir = os.path.join(dataset_dir, "val", "labels")
创建目录
for dir_path in [train_img_dir, train_label_dir, val_img_dir, val_label_dir]:
os.makedirs(dir_path, exist_ok=True)
获取所有图片文件
all_images = [f for f in os.listdir(img_dir) if f.lower().endswith((".jpg", ".png", ".jpeg"))]
随机抽取200张
if len(all_images) < 200:
raise ValueError(f"图片数量不足200张,当前数量: {len(all_images)}")
selected_images = random.sample(all_images, 200)
分割训练集和验证集
random.shuffle(selected_images)
val_images = selected_images[:40]
train_images = selected_images[40:]
def copy_files(image_list, target_img_dir, target_label_dir):
for img_file in image_list:
# 复制图片
src_img_path = os.path.join(img_dir, img_file)
dst_img_path = os.path.join(target_img_dir, img_file)
shutil.copy(src_img_path, dst_img_path)
# 对应的txt
label_file = os.path.splitext(img_file)[0] + ".txt"
src_label_path = os.path.join(label_dir, label_file)
if os.path.exists(src_label_path):
dst_label_path = os.path.join(target_label_dir, label_file)
shutil.copy(src_label_path, dst_label_path)
else:
# 如果没有对应txt文件,创建一个空文件
open(os.path.join(target_label_dir, label_file), "w").close()
复制训练集
copy_files(train_images, train_img_dir, train_label_dir)
复制验证集
copy_files(val_images, val_img_dir, val_label_dir)
print(f"随机抽取完成!训练集: {len(train_images)} 张,验证集: {len(val_images)} 张")
print(f"数据集路径: {dataset_dir}")
3.模型训练
数据集准备好之后就可以开始模型训练了,我们首先准备一个训练的配置文件,比如说是data.yaml
在这里插入图片描述
然后就可以开始模型训练了,直接执行我们准备好的train.bat文件,内容就是下面的内容
yolo task=detect mode=train model=../data/model/yolov8n.pt data=./data.yaml epochs=30 imgsz=640 batch=16 lr0=0.01
然后模型就开始训练了
这里我贴一些训练验证结果截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后的results.png见下图,训练效果还是可以的!
本次 YOLOv8 摔倒检测模型的训练过程整体呈现稳定收敛趋势,各项损失指标(box、cls、dfl)从前期的高值逐步下降,说明模型成功学习到目标边界、类别特征及空间分布信息。随着训练推进,Precision 从接近 0 上升到 0.53,代表误检率持续降低,模型对“真摔倒”与“假摔倒”的区分能力显著增强。Recall 最终稳定在约 0.52,表明模型具备一定的摔倒捕捉能力。mAP50 从早期的 0.29 提升到 0.44,呈稳步增长态势,说明检测的综合性能持续改进。训练过程中未出现发散或不稳定情况,学习率调度平稳,模型表现出健康的优化轨迹。总体来看,该模型已经达到可用水平,具备基本摔倒识别能力,并展现出持续提升空间。
- 损失函数整体下降明显
train box / cls / dfl 均持续下降
➡️ 说明模型在稳定、有效地学习特征,收敛性良好。 - 精度(Precision)大幅提升
从 0.004 → 0.536
➡️ 模型越来越能区分摔倒与非摔倒,误检率显著降低。 - 召回率(Recall)后期达到较高水平
最终回升并稳定在 0.526
➡️ 模型已经具备较好的摔倒捕捉能力。 - mAP50 曲线稳步上升
从 0.29 → 0.44
➡️ 模型“检测定位 + 分类”能力在持续增强。 - 训练过程平稳,无发散现象
学习率调度合理
各项指标稳定提升
➡️ 表示训练流程设计良好,超参选择较为科学。 - 后期分类损失(cls loss)下降到较低水平
➡️ 说明模型已经学到较清晰的摔倒行为特征表达。 - 性能趋势说明模型具有进一步提升空间
➡️ 收敛趋势良好,只要继续优化数据或训练轮数,性能还会再提升。
在这里插入图片描述
我们的检测系统可以用在的应用场景:
- 智慧养老院与老年护理中心
实时监控老人活动状态,在摔倒发生的瞬间自动识别并报警。
融合 DeepSeek 推理模块,对行为进行二次验证,降低误报率。
可通过 PyQt5 可视化界面显示监控画面、告警日志与风险趋势。 - 居家独居老人安全防护
安装轻量化摄像设备后即可运行,无需复杂部署。
当检测到摔倒行为时立即向家属推送通知或语音提醒。
支持本地推理,保护用户隐私,不依赖云端。 - 医院康复病房与术后看护
自动识别患者康复期间的异常跌倒行为,辅助护理人员及时介入。
使用 YOLOv8 对患者姿态进行稳定识别,DeepSeek 模型用于判断行为是否属于“意外事件”。
可接入病房管理系统,实现实时数据共享。 - 工厂、仓库等工业场景安全监控
针对高风险工作区域(如高处作业、搬运区)实时识别作业人员的摔倒事故。
在 PyQt5 控制台中展示多个监控点的状态,管理员可快速定位异常区域。
结合生产安全分析模块,支持后端统计与事故复盘。 - 校园安防与宿舍安全管理
对宿舍楼、教学楼的楼梯间与走廊进行实时监控,发现学生跌倒时即时通知值班人员。
可与校园信息化系统对接,记录事件时间、位置及视频片段。
AI 模型对复杂光照与遮挡情况具有较强鲁棒性,减少误报。 - 智慧城市公共区域监控
在公园、地铁站口、广场等公共区域实现自动化摔倒识别。
提供视频流实时分析,结合警务联动系统实现自动调度。
多摄像头统一接入 PyQt5 界面,便于城市管理部门集中监控。 - 酒店及商业场所安全保障
在酒店走廊、商场扶梯附近对顾客、行人的摔倒行为进行识别与提示。
YOLOv8 模型支持大范围人流检测,DeepSeek 模型提升异常事件分析能力。
可输出风险统计报表,用于优化场所布局及安全防护措施。
五.项目运行环境
本项目名称为yolov8-fall-detection
1.项目依赖
博主是在Windows电脑上使用Python3.8开发的本系统,建议大家使用的Python版本别太高。
其中项目依赖为:
PyQt5==5.15.11
QtAwesome==1.3.1
torch==2.4.1
torchvision==0.19.1
Pillow==9.3.0
pyqtgraph===0.13.3
PyQtWebEngine==5.15.5
opencv-python==4.10.0.82
ultralytics==8.3.234
Requests==2.32.5
pandas==2.0.3
numpy==1.24.4
Markdown==3.4.4
我已经整理到了requirements.txt,大家直接使用命令
pip install -r requirements.txt
即可一键安装项目依赖,其中的torch和torchvision只要匹配即可,不一定非要和博主开发环境的版本一致。
2.项目结构
很多小伙伴担心拿到代码后项目看不懂,这个大家不必担心,我们采用文件+类名对相关功能进行了模块化定义,大家见名知意。
下图博主采用tree命令生成了文件、目录树
tree "D:\projects\gitee\2025\yolov8-fall-detection" /f /a
D:\PROJECTS\GITEE\2025\yolov8-fall-detection
| .gitignore
| main.py(程序入口)
| record.txt(开发记录)
| requirements.txt(项目依赖)
|
|
+---script
| create_qrc.py
|
+---src(源代码核心目录)
| +---conf(配置内容)
| | | icon_conf.py
| | | style_conf.py
| | | system_conf.py
| | | test_data.py
| | | init.py
| |
| +---engine(核心引擎)
| | engines.py
| | init.py
| |
| +---resource(资源目录)
| | | resource.qrc
| | | resource_rc.py
| | | init.py
| | |
| | ---imgs
| | ai.svg
| | bg.jpg
| |
| +---threads(线程、信号总线)
| | main_threads.py
| | signal_bus.py
| | init.py
| |
| +---utils(工具方法、工具类)
| | custom_utils.py
| | user_manager.py
| | init.py
| |
| ---widgets(组件目录)
| base_widgets.py
| custom_pages.py
| custom_widgets.py
| main_page.py
| unique_widgets.py
| init.py
在这里插入图片描述
六.总结
基于 PyQt5 + YOLOv8 + DeepSeek 打造的摔倒行为检测系统,是一款面向实际场景的智能视觉安全平台,融合了实时监测、姿态识别、行为判断、数据分析、可视化与智能辅助决策等能力,为养老院、智能家居、医院病房、校园场景以及公共设施的跌倒风险监控提供稳定、高效、自动化的技术支撑。
系统以 PyQt5 构建主界面框架,通过模块化页面管理与人性化布局设计,让用户能够在图像检测、视频检测、实时流识别、摄像头监控等功能之间自由切换。所有操作都在流畅的窗口组件中完成,从模型选择、参数配置到检测结果查看,都具备完整的交互逻辑。
YOLOv8 作为核心行为识别模型,通过多线程架构与 DetectThread 深度适配,实现了对人物姿态、异常行为以及摔倒事件的高速推理。无论输入为本地图片、录制视频,还是 RTSP/RTMP 摄像头流,系统都能保持稳定的帧率输出,在独立播放线程中完成清晰的视频渲染,并实时绘制目标检测框、行为类别标签与置信度,确保摔倒事件能够在第一时间被识别。
除了基础识别功能,系统提供完善的数据记录与导出能力,支持 CSV、Excel、TXT 等格式保存检测日志,使每一次事件检测都可追溯。内置的 DeepSeek 智能分析模块会根据识别信息自动生成结构化评估报告,包括摔倒行为的发生概率、可疑姿态分析、潜在风险点以及处理建议,帮助管理人员快速理解事件,并作出更合理的应对。
系统配套的可视化组件能够将历史识别数据转化为多种统计图表,对摔倒发生时间段、区域风险等级、事件频率趋势等关键指标形成直观展示,便于安全管理人员进行风险评估与资源调配。
此外,系统还拥有用户管理、参数调校、实时画面清理、线程自动控制等配套机制,使得整个平台可在长时间不间断运行的情况下保持稳定性能。整体架构结合多线程与事件驱动的优势,将图形界面、AI 推理、数据处理与智能决策有机融合,形成一套专业、易用、可扩展的摔倒行为检测解决方案,适用于多种场景的智能安防建设。
本次给大家介绍了我使用PyQt5+YOLOv8+DeepSeek的摔倒行为检测系统,本系统功能强大,支持多种数据源输入,包含多种用户交互按钮以及模式,内置数据可视化方案、大模型AI加持,是您学习、工作使用的不错选择!
需要代码的朋友可以点击箭头下方的二维码加我好友,欢迎您了解!
在这里插入图片描述
导出
Markdown 已选中 17108 字数 494 行数 当前行 494, 当前列 0
HTML 14770 字数 347 段落
发布文章




