• 4
    回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【2025 DigiKey 杯】 基于Yolo的老人跌倒检测

项目简介

本项目基于 YOLO(You Only Look Once)实时目标检测算法,构建了一套能够在室内环境中实时识别老人跌倒行为的智能监控系统。YOLO 具备速度快、精度高、部署简单的优点,不需要学习复杂的深度学习框架即可上手,非常适合教学、竞赛和初学者实践。本项目源于对深度学习的兴趣以及 2025 DigiKey 杯的创新挑战,希望通过技术手段为老龄化社会贡献一份力量,减少独居老人跌倒后无人发现的风险。

该系统能够通过摄像头实时采集画面,使用训练好的 YOLO 模型识别人体姿态状态,一旦检测到疑似跌倒行为,系统可进行声音报警或触发短信提醒(由于运营商的限制,现在腾讯云和阿里云如果想配置短信服务必须企业签名,否则的话只能使用固定格式的模版),为老人提供及时的安全保障。

二、项目背景

随着社会老龄化程度不断加深,独居或半独居老人的安全问题逐渐凸显。跌倒是老年人最常见且最危险的意外之一,如果不能及时得到帮助,可能导致严重伤害甚至生命危险。因此,一个稳定、可靠、成本低廉且部署简单的跌倒检测系统具有重要的现实意义。

与此同时,YOLO 系列目标检测模型近年来不断发展,易用性非常高,新手无需深入研究 TensorFlow 或 PyTorch 的底层细节,也能快速完成训练与部署。在学习深度学习的过程中,我结合比赛主题与实际需求,萌生了利用 YOLO 训练跌倒检测模型的想法,最终形成了本项目。

物料简介

1- 树莓派5 8GB

作为系统核心计算平台,负责运行轻量化的 PyTorch 模型,利用 CPU 完成实时推理,对摄像头画面中的人体姿态进行判断。

2- MX219摄像头

用于图像采集,但由于接口适配与调试问题,未能成功与 YOLO 推理流程稳定连接。后改为虚拟摄像头方案或 USB 摄像头方案。

3- USB摄像头

即插即用、驱动简单,稳定兼容 OpenCV,能够实时采集画面并输入 YOLO 模型,是目前最推荐的硬件方案。

4- 扬声器或者蜂鸣器(项目中未包括,可以用于检测到摔倒之后)

用于在检测到跌倒后发出声光警报。该部分目前在项目中未实现,但未来计划加入短信或物联网提醒功能。

系统特点

实时检测:基于 YOLO 模型,可在树莓派上实现实时推理。模型准确率可以到达80%

轻量部署:硬件成本低,软件安装简单,适合家庭环境部署。

可扩展性强:可加入短信通知、摄像头推流、云端监控等功能。

场景适应性好:模型经过专门训练,在固定场景下识别跌倒状态准确度高。

如上图所示:训练数据,跌倒的检测精度在88%左右、站立Person的精度在72左右。总体精度在80%左右。

功能框图

首先树莓派驱动USB摄像头获取帧,然后将数据输入到模型进行推理,获得结果之后触发后续的通知服务。

软件流程图

项目的具体实现步骤

1、获取数据集

我这里测试和使用了两种数据集,第一个数据集是百度飞浆Ai-Studio中的摔倒检测(FallDown)数据集,这个数据集一共包括了7782张图片,其中有部分图片和标签存在问题,经数据清洗和标签数据重写后,可用数据为7773个,不可用数据为9个。

我原本使用的就是这个数据集,但是其中的数据集的标注格式不是我想要的,我也不知道具体该怎么转换。 因此在项目的前期,我尝试使用这个数据集内的图片进行手动标注。并且进行训练,如下图所示。数据的标注工具采用的是LableStudio。

然后对数据进行标注, 一个是普通的人,另一个是跌倒的。

但是训练之后的模型准确率非常低,只有60%左右。 而且这个标注实在是太累了。 眼睛根本看不过来。

后来决定稍微使用一点钞能力,在某宝搜索了下数据集,但是价格偏贵。在某鱼上2.5元买到了7000多张已经标注好的Yolo数据集

都已经标注好了。

2、清洗数据

上面使用的数据集比较干净因此不需要清洗。 可以如果训练结果不好的话可以适当移除复杂标记的图像,尤其是那种框选重叠在一起的。或者是移除图像质量不好的。

3、训练模型

train: D:\Projects\pyproject\yolo\FallDown\images\train
val: D:\Projects\pyproject\yolo\FallDown\images\val



# number of classes
nc: 2

# class names
names: ['fall down','stand person']

首先创建好对应的yaml文件指向对应的训练和验证文件,以及分类的种类等。

from ultralytics import YOLO

def main():
    model = YOLO("yolo11n.pt")

    results = model.train(
        data="D:/Projects/pyproject/yolo/FallDown/data.yaml",
        epochs=150,
        batch=32,
        imgsz=416,
        project="runs/detect",
        name="falldown_train",
        exist_ok=True,
        amp=False,
        mosaic=1,
        mixup=1,
        lr0=0.001,
        lrf=0.0001,
        device=0,
        workers=4
    )

if __name__ == "__main__":
    main()

使用上述的代码进行训练,由于我这个显卡是1660super 所以不支持AMP如果好的显卡的话可以尝试开启AMP并且增加batch的值。我一共训练了150轮(其实总共一共训练了超过300轮, 首先是尝试的50然后是100,最后选择的是150,这个精度也可以接受)

训练后的模型精度到达了80% ,总共耗时快三个小时。

模型:

weights.zip

上述的模型中包括了最好的模型:即精确率到达80%的和其中的训练参数,可以根据上述的参数复刻出来一个一模一样的模型。

4、进行验证

import cv2
from ultralytics import YOLO

model = YOLO("runs/detect/falldown_train/weights/best.pt")

# 打开摄像头(0 表示默认摄像头)
cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("无法打开摄像头")
    exit()

while True:
    ret, frame = cap.read()
    if not ret:
        print("无法读取帧")
        break

    # YOLO 预测
    results = model(frame)

    # 渲染结果到帧
    annotated_frame = results[0].plot()

    # 显示
    cv2.imshow("YOLO Prediction", annotated_frame)

    # 按 'q' 键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

使用上述代码,通过OpenCV 打开摄像头然后部署摄像头的输入,属于到模型,这样系统将会调用电脑的USB摄像头。

可以从上图中看到,效果还是不错的。

这个右侧红色标注的摔倒的老人也可以检测出来。

5、部署在树莓派

觉得没有什么问题的话,就可以把这个模型拷贝到树莓派上了(使用上述的代码)。然后在树莓派上安装对应的依赖。使用下述代码既可运行

import cv2
from ultralytics import YOLO

# 加载模型
model = YOLO("best.pt")

def main():
    cap = cv2.VideoCapture(8)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

    if not cap.isOpened():
        print("无法打开摄像头")
        return

    while True:
        ret, frame = cap.read()
        if not ret:
            print("无法读取摄像头")
            break

        # YOLO 推理
        results = model.predict(frame, imgsz=320, device="cpu", verbose=False)

        annotated_frame = results[0].plot()  # 绘制框

        # 输出类别和置信度
        boxes = results[0].boxes  # Boxes object
        for box in boxes:
            cls_id = int(box.cls[0])           # 类别ID
            conf = float(box.conf[0])          # 置信度
            name = model.names[cls_id]         # 类别名称
            print(f"类别: {name}, 置信度: {conf:.2f}")

        # 显示画面
        cv2.imshow("YOLO Fall Detection", annotated_frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

注意上述代码中我使用的是CAM8,有可能你插一个摄像头到你的树莓派上这个编号可能是其他的数字,我这里是通过使用插拔法来确定哪一个摄像头的。

每次这个摄像头插上去之后这个编号是一样的,可以通过ls /dev/video* 的方式进行插拔看看哪一次什么少了或者多了,那么那个设备大概率就是摄像头。

可以在上图中看到,摄像头在左侧进行输入,右侧树莓派窗口已经成功检测到了摔倒的路人。

视频演示:

 

项目总结

本项目基于 YOLO 实时目标检测算法,构建了室内老人跌倒检测系统。通过摄像头采集画面并进行模型推理,系统能够实时识别跌倒行为并可根据检测结果进行后续的处理从而保障独居老人的安全。

项目流程包括数据收集与清洗、模型训练与验证,以及在树莓派上的部署。最终模型在固定场景下精度约 80%,实现了轻量、低成本、可扩展的实时检测方案。也同时感谢得捷电子和电源网提供的参赛机会!

全部回复(4)
正序查看
倒序查看
lospring
LV.1
2
2025-12-09 00:03

谢谢分享

0
回复
旻旻旻
LV.8
3
03-15 22:58

【DigiKey杯点评】这个方案的选题具有重要的社会意义吗,随着老年化社会,独居老人跌倒后的及时救助问题会很多的,所以方案应用价值明确,值得关注。

采用YOLO目标检测算法与树莓派作为核心,其中YOLO适合实时检测,而树莓派便于部署,整套方案硬件成本可控,软件生态成熟,非常适合作为原型验证和初学者实践。

不过这个模型训练依赖从非官方渠道购买的已标注数据集。虽然经济高效,但这可能导致模型在复杂家庭环境下的能力存疑,是系统可靠性的最大潜在短板。目前没有看出设计者有其他方式提高识别精度,严重依赖网络数据。模型也缺乏自我的学习能力,在出现没有标识的情况就无法识别出来,还是存在漏洞风险。

0
回复
fzwwj95
LV.7
4
03-24 17:25

【DigiKey杯点评】这个题目很有现实意义,真正是在解决一个高频且重要的家庭安全问题。YOLO 做实时跌倒检测是比较合理的技术路线,后面如果再把复杂背景、遮挡、多人场景下的误报漏报情况测一下,作品价值会更突出。

0
回复
abc9981
LV.3
5
03-31 14:51

【DigiKey杯点评】

1.选题贴合刚需,社会价值突出

项目聚焦独居老人跌倒后无人及时发现的核心痛点,切中老龄化社会的高频家庭安全需求,用技术手段为老人安全保驾护航,相比纯技术型竞赛项目,更具实际应用价值和人文关怀,设计初衷值得肯定。

2.技术路线适配,落地性拉满

选用 YOLO 算法作为核心检测方案,充分利用其速度快、精度高、部署简单的优势,适配跌倒检测的实时性要求;硬件以树莓派 5 8GB 为计算平台、USB 摄像头为图像采集设备,成本低、易获取且即插即用,无需复杂的硬件调试,适合家庭场景快速部署,同时软件基于 OpenCV 和 Ultralytics 框架开发,生态成熟、上手门槛低,便于后续的二次开发和推广。

3.开发流程完整,实操性强

项目完整呈现了从数据集获取与清洗、手动标注尝试、模型训练调参、本地验证到树莓派轻量化部署的全流程,不仅详细记录了数据集问题(如标注格式不匹配、部分数据失效)的解决思路,还给出了具体的代码实现、参数设置(如 epochs=150、imgsz=416)和硬件调试技巧(如树莓派摄像头编号确认方法),步骤清晰、细节详实,对初学者具有极强的参考和实操价值。

4.系统设计兼具实用性与扩展性

最终实现的系统在固定室内场景下检测精度达 80%,满足基础的跌倒识别需求;同时预留了丰富的功能扩展空间,如未实现的声光报警、短信 / 物联网提醒,以及可拓展的摄像头推流、云端监控等功能,可根据实际需求灵活升级,让系统的实用性进一步提升。

5.现存短板明确,仍有优化空间

一是数据集来源存在局限性,主要依赖非官方购买的标注数据集,缺乏针对复杂家庭环境(如家具遮挡、光线昏暗)、多人共存、老人不同跌倒姿态的专属训练数据,可能导致实际场景中误报、漏报率偏高;

二是核心功能未完全落地,声光报警、远程提醒等关键的应急功能仅为规划项,尚未融入系统,降低了检测后的实际应急价值;

三是模型轻量化优化不足,在树莓派 CPU 上的推理效率未做针对性调优,未提及对检测帧率、延迟的测试,可能影响实时检测体验。

整体而言,该项目是深度学习技术落地民生场景的优秀尝试,完整的开发流程、低门槛的部署方案让其具备较强的推广潜力。若后续能补充多样化的实际家庭场景训练数据、完善应急提醒功能,并对模型做针对性轻量化优化,同时增加复杂场景下的检测精度、帧率测试,系统的可靠性和实用价值将得到质的提升。

1
回复