基于 YOLO26 的跌倒检测预警系统 | 附完整源码分享

简介: 本项目基于轻量级YOLO26n模型,打造端到端跌倒检测预警系统,专为智慧养老与独居监护设计。支持图片、视频、摄像头及批量输入,Streamlit界面开箱即用,CPU单帧推理<100ms,隐私离线部署。精准识别“跌倒”单类目标(mAP@0.5达0.848),实现7×24实时告警,助力抢占黄金抢救时间。(239字)

基于 YOLO26 的跌倒检测预警系统:从模型到 Streamlit 全流程实战

关键词:YOLO26、跌倒检测、智慧养老、独居监护、目标检测、Streamlit、Ultralytics

一、背景

1.1 行业痛点

跌倒被称为老年人的"隐形杀手"——对 65 岁以上人群而言,一次无人发现的跌倒往往意味着错过最佳抢救窗口。但监护环节长期依赖人力,存在三个结构性难题:

  1. 人工盯屏不可持续:护士站一台监控常常对着多间病房,值班人员不可能 7×24 逐画面注视,漏看往往就是几分钟、甚至十几分钟的事;
  2. 事后查证滞后:传统视频方案只能回放录像,跌倒已经发生后才能发现,处置完全跟不上"黄金抢救时间";
  3. 独居监护无手段:老人独居场景下,家属与社区最需要的"跌倒即告警"能力恰恰最缺失,可穿戴手环又有佩戴率低、误触高的问题。

把摄像头 + AI 视觉感知接入监护场景后,用一台普通工控机就能 7×24 实时框出画面中的跌倒人员并给出置信度与位置,进而对接到护士站看板、家属短信 / 电话、社区告警平台。本项目就是这条路线下的一个完整落点:基于 YOLO26n,识别「跌倒」单类目标,并提供一个开箱即用的 Streamlit 可视化界面。

视频演示与源码下载

https://www.bilibili.com/video/BV1krJ96kEkK/

在这里插入图片描述

包含: 📦完整项目源码 📦 预训练 模型权重

🗂️数据集

1.2 项目运行效果

  • *Web 界面总览

在这里插入图片描述

  • *单张图片识别效果

    在这里插入图片描述

  • *批量图片合规检查

    在这里插入图片描述

1.3 项目介绍

核心创新点:

维度 设计
类目设计 只检「跌倒」一个目标(nc=1),正样本聚焦、语义清晰,告警链路短、误报可控
模型选型 YOLO26n,Anchor-Free 轻量架构,CPU 单图 < 100 ms,可部署在病房 / 养老院边缘盒子
部署形态 Streamlit 单页应用 + 本地 best.pt,零依赖中间件,便于离线现场部署
输入兼容 图片 / 批量图片(含 zip)/ 视频 / 摄像头四种输入复用同一推理引擎
适配场景 养老院、医院病房、独居监护、公共场所四类场景均已覆盖

功能概览:

  • 🚨 单图检测:上传监护画面 → 实时返回带框图 + 类别 / 置信度 / 坐标明细
  • 📚 批量检测:单次最多 200 张,输出汇总表 + 检出分布 + zip 下载
  • 🎬 视频检测:mp4 / avi / mov / mkv 通通可读,逐帧推理后落盘新视频
  • 📷 摄像头实时检测:可对接病房 / 走廊 IPC 的 RTSP 流,做实时跌倒感知

1 种目标类别:

类别 描述
跌倒 人员倒地、滑倒、从站立 / 坐姿跌落等倒地姿态

技术栈:

层 选型
模型框架 Ultralytics + PyTorch
视觉算法 YOLO26n(Anchor-Free,C2f Backbone,Decoupled Head + DFL)
Web 前端 Streamlit + 自定义 HTML 主题(紫金配色,呼应安全预警风)
视频 / 图像 OpenCV、imageio-ffmpeg
数据可视化 Streamlit 原生 chart / Pandas
配置管理 单一 configs/project.yaml,行业话术 / UI / 推理阈值统一收口

二、设计框架

2.1 系统架构

            ┌──────────────────────────────────────────┐
            │      Streamlit Web 前端(单页 SPA)       │
            │  · 监护控制台 / 单图 / 批量 / 视频 / 摄像头 │
            │  · 侧栏 · 阈值 · 目标图鉴 · 模型缓存        │
            └────────────────────┬─────────────────────┘
                                 │ Python 调用
                                 ▼
            ┌──────────────────────────────────────────┐
            │   推理服务层(infer_image_path 等)       │
            │  · bytes / Path / frame → tensor          │
            │  · 推理结果 → 标注图 + DataFrame          │
            └────────────────────┬─────────────────────┘
                                 │
                                 ▼
            ┌──────────────────────────────────────────┐
            │    YOLO26n 推理引擎(model/best.pt)      │
            │  Backbone (C2f+SPPF) → Neck (FPN/PAN)     │
            │   → Decoupled Head(DFL + cls)           │
            └────────────────────┬─────────────────────┘
                                 │
                                 ▼
                (可对接:护士站看板 / 家属告警 / 社区平台)

2.2 YOLO26 网络结构

输入 640×640×3
   │
   ▼
[Backbone]
  Conv → C2f → Conv → C2f → Conv → C2f → Conv → C2f → SPPF
        多尺度卷积 + 跨阶段特征融合,对姿态多变的人体目标更稳
   │
   ▼
[Neck]   FPN 上采样 + PAN 下采样:P3 / P4 / P5 三级金字塔
        近处倒地人体 → P3 层;远景 / 站立 → P4/P5
   │
   ▼
[Head]  Decoupled Head(cls 头 / reg 头解耦)
        回归头采用 DFL(Distribution Focal Loss)
        Anchor-Free,输出 (cx, cy, w, h, cls × 1)
   │
   ▼
[NMS]    iou=0.7, conf=0.30  → 最终检测框

2.3 检测流程

监护摄像头帧 / 单张图片
        │
        ▼
   Letterbox 640×640 + RGB
        │
        ▼
    YOLO26n forward
        │
        ▼
   Detect Head 输出 (cls × 1)
        │
        ▼
   conf 过滤 + NMS
        │
        ▼
result.plot() 画框 + "跌倒"
        │
        ▼
Streamlit 双列展示 + DataFrame + 置信度分析
        │
        ▼
(可扩展:时间线告警 → 护士站 / 家属 / 社区联动)

三、代码结构(核心 50 行 + 解析)

项目目录:

跌倒检测系统/
├── app/streamlit_app.py        # Web 入口
├── configs/project.yaml         # 行业话术 / UI / 训练 / 推理参数
├── model/best.pt                # 训练好的 YOLO26n 权重
├── dataset/                     # train / valid / test 数据集
├── train/                       # 训练产物(results.csv / 曲线图 / 混淆矩阵)
└── scripts/                     # train / validate / export 等通用脚本

最核心的 50 行——模型加载 + 单图推理 + 批量 / 视频复用同一引擎:

# === 1. 配置驱动:置信度 / iou / 批量上限全部从 project.yaml 读取 ========
PROJECT_ROOT = Path(__file__).resolve().parent.parent
APP_CONFIG = load_yaml(PROJECT_ROOT / "configs" / "project.yaml")
DEFAULT_CONF = float(APP_CONFIG.get("inference", {
   }).get("conf", 0.30))

# === 2. 模型加载(带 streamlit 资源缓存,避免每次刷新重载)============
@st.cache_resource(show_spinner=False)
def load_model(model_path: str) -> YOLO:
    return YOLO(model_path)

# === 3. 单图推理:路径 → 标注图 + 检测明细 DataFrame ===================
def infer_image_path(model: YOLO, image_path: Path, conf: float) -> tuple:
    result = model.predict(str(image_path), conf=conf, verbose=False)[0]
    annotated = result.plot()                         # BGR ndarray,已画框
    rows = []
    if result.boxes is not None:
        for box in result.boxes:
            cls_id = int(box.cls.item())
            x1, y1, x2, y2 = [float(v) for v in box.xyxy[0].tolist()]
            rows.append({
   
                "class_id": cls_id,
                "class_name": result.names[cls_id],   # "跌倒"
                "confidence": round(float(box.conf.item()), 4),
                "x1": round(x1, 1), "y1": round(y1, 1),
                "x2": round(x2, 1), "y2": round(y2, 1),
            })
    # BGR → RGB 给 Streamlit;rows 转 DataFrame 给表格组件
    return annotated[:, :, ::-1], pd.DataFrame(rows)

# === 4. bytes → 临时文件 → 复用同一函数 ================================
def run_image_inference(model: YOLO, image_bytes: bytes, conf: float, suffix: str = ".jpg"):
    with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as f:
        f.write(image_bytes); tmp = Path(f.name)
    try:
        return infer_image_path(model, tmp, conf)
    finally:
        tmp.unlink(missing_ok=True)

5 段解析:

  1. project.yaml + get("conf", 0.30) 把置信度、iou、批量上限全部从配置读取,运营侧针对养老院 / 医院 / 社区分别标定阈值时不用改一行代码。
  2. @st.cache_resource 把 YOLO(model_path) 的耗时锁在第一次访问,对 7×24 长时间运行的监护场景尤其重要——一次启动一直跑,单图响应稳定在百毫秒级。
  3. result.plot() 直接返回带颜色框 + 类别 + 置信度的 BGR ndarray,[:, :, ::-1] 转回 RGB 喂给 Streamlit,一条链路上完成"推理 + 可视化"。
  4. 把每个 box 的 cls / conf / xyxy 拍成 dict 再拼成 DataFrame——后续表格、CSV 下载、时间线趋势全部复用同一份结构。
  5. run_image_inference 走临时文件而非 numpy 数组,是为了让 Ultralytics 内部的 EXIF / orientation 处理逻辑生效,对顶装 / 侧装摄像头不同朝向都更稳;批量、视频、摄像头三个入口复用同一套 infer_image_path。

四、训练效果

模型在自建的跌倒场景 数据集上训练 (YOLO26n、640 输入、batch 16、200 epoch 早停),best.pt 对应指标如下:

指标 数值
Precision 0.882
Recall 0.763
mAP@0.5 0.848
mAP@0.5:0.95 0.499

从训练曲线看,box / cls / dfl 三路 loss 在前 50 epoch 快速收敛,之后稳步下降;mAP@0.5 稳定在 0.85 左右。单类检测下 Precision 0.882 说明误报抑制能力在线,适合直接做告警触发;而 mAP@0.5:0.95 约为 0.5,符合跌倒检测这一任务本身的特性——人体倒地姿态高度非刚性、遮挡与俯拍视角多变,严格 IoU 阈值下检测框中心回归难度天然偏高。这正是后续引入姿态估计 / 时序判定的切入点。

(原文此处为 PR 曲线截图 / 归一化混淆矩阵截图 / 训练曲线截图)

五、项目总结

做对了什么:

  • 只检「跌倒」一个目标,把"盯监控"升级为"检跌倒",语义清晰、告警链路短,适合作为监护系统的触发模块;
  • 选择 YOLO26n 而非更大的 v8s/v8m,模型轻量、CPU 单图百毫秒内完成推理,可在病房 / 养老院边缘盒子离线运行,敏感画面不出户,兼顾隐私合规;
  • 用一份 project.yaml 把"行业话术 / UI 主题色 / 训练超参 / 推理阈值 / 类别定义"全部收口,迁移到摔倒、离床、越界等其他监护事件只需替换数据集与重新训练。

还能怎么做:

  • 引入时序模型(LSTM / SlowFast)做行为序列判定,把单帧"跌倒框"汇聚成"倒地持续 10 秒"等高置信事件,抑制单帧误报;
  • 结合人体关键点(姿态估计)判断跌倒的持续状态与人员身份,区分"跌倒"与"蹲下系鞋带 / 俯身捡物";
  • 告警联动:检测到跌倒后对接短信 / 电话 / 护士站看板,形成"检出—通知—处置"闭环,这是当前智慧养老最有商业价值的方向之一。
相关文章
|
3天前
|
云安全 安全 网络安全
|
3天前
|
JavaScript 安全 前端开发
Nodejs Brotli decoder 代码执行漏洞 (CVE-2026-111497)10629
Node.js发布安全更新修复Brotli解码器高危RCE漏洞(CVE-2026-111497),建议受影响版本用户立即升级。
1739 1
|
9天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
1536 33
|
3天前
|
安全 应用服务中间件 Go
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
PHP2Shell 双 RCE 已遭在野利用:WordPress、Drupal 全在射程内,nginx 其实另有洞。拆成因与修复顺序
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
|
11天前
|
安全 Linux 芯片
【万字长文】Ollama下载、安装、配置、使用保姆级教程(2026最新图解)
Ollama 是一款免费开源的本地大模型运行工具,支持 DeepSeek、Qwen 等主流模型,一条命令即可下载运行。2026 最新版 v0.35.1 官方安装包(1.47GB)已提供国内直连下载,纯本地、离线可用、无广告、无隐私泄露风险。
996 2
|
14天前
|
存储 人工智能 安全
千问办公官网入口网页版登录:qwenwork.cn 注册送2000积分、登录送100积分
阿里云千问办公(QwenWork)是AI智能工作平台,支持一句话生成PPT、表格、网页、视频及数据分析。个人免费版送2000积分+每日登录赠100分,含1GB存储、5个发布页;企业版198元/席/月起。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
|
9天前
|
人工智能 开发者
Qoder CN 大使计划正式开启|无限创造,等你一起
全年免费积分、优先内测、活动支持与更多共创机会,邀请用 Qoder 把想法变成现实的你。
657 6
|
6天前
|
Web App开发 人工智能 前端开发
2026 年 AI 浏览器怎么选?Ego Lite、Tabbit、Chrome DevTools MCP 深度对比,开发者到底该用哪个?
2026年AI浏览器选型指南:Ego Lite专注多Agent协同(Mac优先),Tabbit国产首选,原生支持Windows与Codex控制;Chrome DevTools MCP非浏览器而是开发者利器,深度集成Console/Network/Performance调试能力,让AI真正“看懂并验证”前端代码。
563 2
|
10天前
|
JSON 程序员 数据格式
最新版Notepad++下载、安装、配置保姆级教程(附官网安装包)
Notepad++ 是一款免费开源、轻量快速的 Windows 文本编辑器,支持多标签、语法高亮、代码折叠与宏录制,体积小、启动快、资源占用低,兼容 x64/x32/ARM 架构,是程序员和文字工作者的高效利器。
908 0