项目简介
本项目基于 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% ,总共耗时快三个小时。
模型:
上述的模型中包括了最好的模型:即精确率到达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%,实现了轻量、低成本、可扩展的实时检测方案。也同时感谢得捷电子和电源网提供的参赛机会!

