低成本家用老人摔倒监控:普通摄像头 + 飞牛 fnOS + AI 检测实战


用普通摄像头 + 飞牛fnOS + YOLO AI,在家就能搭建老人摔倒监控,零成本、本地运行、隐私安全。

前言

家里老人独自居家,最怕的就是没人看着时意外摔倒。市场上那些专业的摔倒检测摄像头,要么贵得肉疼,要么数据得上传云端,隐私和成本都让人纠结。

花了一周时间,总算搭好了一套零成本、本地运行的老人摔倒监控方案。用家里现成的普通摄像头,搭配飞牛fnOS跑Docker容器,借助YOLOv8 AI算法,检测到摔倒自动保存截图。不用花一分钱,不用泄露监控画面,居家看护完全够用。


一、先理清:普通摄像头就能用,不用换设备

一开始我也以为,只有带专用AI算法的智能摄像头才能做摔倒检测。实际测试后发现,只要支持RTSP视频流输出,任何品牌摄像头都能用,完全不用重新买设备。

适配摄像头品牌参考

  • 主流安防:海康威视、大华、萤石、TP-LINK
  • 家用高性价比:水星、迅捷、小米(部分型号开启RTSP即可)
  • 其他家用摄像头:只要能查到RTSP地址,都能适配

懒人直接选购(自带摔倒检测)

如果不想折腾部署,也可以选成品机型:

  • 萤石C6WI:家用性价比款,本地AI跌倒检测,手机可接收提醒
  • 海康威视康养系列:专业老人看护,误报率极低
  • TP-LINK智能云台摄像头:支持人形检测+姿态识别,操作简单

二、我的整套方案优势

对比市面上的成品设备,这套自建方案优点很明显:

  1. 零成本:现成硬件复用,不花额外钱,无年费、无订阅
  2. 隐私安全:全程本地运行,画面不上传云端
  3. 不占资源:仅检测到摔倒时截图,平时不占用存储空间
  4. 稳定省心:部署后后台自动运行,重启设备也能自启
  5. 易上手:全程复制配置+命令,不用懂复杂代码

所需硬件

  • 飞牛fnOS设备(已开启Docker、SSH功能)
  • 支持RTSP流的普通家用摄像头
  • 摄像头与飞牛设备连接同一局域网

三、前期准备工作

部署前先做好这几步:

  1. 开启飞牛fnOS的SSH和Docker服务,在系统设置里一键开启即可

  2. 获取摄像头RTSP地址,家用摄像头通用格式:

Text
1
rtsp://摄像头账号:摄像头密码@摄像头IP:554/stream1
  1. 在飞牛文件管理器,新建层级文件夹,用于存放配置和截图:
Text
1
2
/vol1/1000/docker/yolo
/vol1/1000/docker/yolo/output

output文件夹专门用来保存摔倒后的截图,方便后续查看。


四、一键部署:复制即用,无需改复杂代码

在新建的/vol1/1000/docker/yolo目录下,新建docker-compose.yml文件,将以下代码完整复制进去,只需要替换自己的摄像头RTSP地址即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
version: '3'
services:
fall_detect:
container_name: fall_detect
image: ultralytics/ultralytics:latest
restart: unless-stopped
volumes:
- /vol1/1000/docker/yolo/output:/tmp/output
command:
- python
- -c
- |
import cv2
import time
import os
from ultralytics import YOLO

# 截图保存路径
save_path = "/tmp/output"
os.makedirs(save_path, exist_ok=True)

# 此处替换为你的摄像头RTSP地址
rtsp_url = "rtsp://admin:你的摄像头密码@192.168.31.107:554/stream1"
cap = cv2.VideoCapture(rtsp_url)

# 加载YOLOv8轻量模型
model = YOLO("yolov8n.pt")
last_save = 0
# 截图间隔,避免重复保存
save_interval = 2

while True:
ret, frame = cap.read()
if not ret:
# 摄像头拉流失败,自动重连
time.sleep(2)
cap = cv2.VideoCapture(rtsp_url)
continue

# 仅检测人体,排除其他物体干扰
results = model(frame, classes=[0], verbose=False)
is_fall = False

# 通过人体宽高比判断摔倒状态
for r in results:
for box in r.boxes:
x1, y1, x2, y2 = map(int, box.xyxy[0])
person_width = x2 - x1
person_height = y2 - y1
# 过滤过小识别框,避免误判
if person_height< 10:
continue
# 宽度大于高度,判定为摔倒
if person_width / person_height > 1.1:
is_fall = True
break
if is_fall:
break

# 检测到摔倒,保存截图
if is_fall:
now_time = time.time()
if now_time - last_save >= save_interval:
fall_img = f"{save_path}/fall_{int(now_time)}.jpg"
cv2.imwrite(fall_img, frame)
last_save = now_time

time.sleep(0.3)

五、启动服务,一键运行

  1. 用SSH工具连接飞牛fnOS,输入命令进入配置目录:
1
cd /vol1/1000/docker/yolo
  1. 执行启动命令,开始部署:
1
2
docker-compose down
docker-compose up -d

首次启动会自动下载YOLOv8模型和依赖镜像,耐心等待2-5分钟,部署完成后就会自动开始检测。


六、实际使用效果

  • 正常行走、站立、坐着:不触发检测,不保存截图
  • 摔倒、平躺、俯卧:立即自动保存监控截图
  • 截图存放路径:飞牛/vol1/1000/docker/yolo/output
  • 截图命名:fall_时间戳.jpg,方便查看摔倒时间

实际居家测试了一周,正常活动不会误触发,摔倒姿态识别精准,完全满足老人居家看护需求。


七、踩坑总结:常见问题解决办法

折腾过程中遇到不少问题,把高频坑整理出来:

  1. 不生成截图:大概率是路径挂载问题,一定要用飞牛绝对路径,不要用相对路径
  2. 摄像头拉流失败:检查RTSP地址、账号密码、IP是否正确,确保设备同网段
  3. 误报率高:将代码中1.1改为1.21.3,提高摔倒判断阈值,降低误报
  4. 服务无法启动:检查飞牛Docker是否正常开启,重启Docker后重新部署

八、写在最后

给家里老人做摔倒监控,真的没必要盲目追求高价智能设备。利用现成的普通摄像头+飞牛fnOS,就能搭建一套稳定、安全、零成本的AI检测方案。

全程本地运行,不用依赖云端服务,既不用担心隐私泄露,也不用承担额外费用。部署好之后就能长期稳定运行,出门在外也能更放心。

如果家里有闲置摄像头,正好也在用飞牛fnOS,完全可以照着这份教程动手试试。花十几分钟,给老人多一份安全保障。