akshaykulgod/ElderProof

GitHub: akshaykulgod/ElderProof

基于双路 YOLOv8 检测与 Depth Anything V2 深度估计的 AI 流水线,自动分析房间图像并输出结构化的老年人居家安全评估报告。

Stars: 0 | Forks: 0

# ElderAssist — 驱动养老院居家安全评估的 AI ElderAssist 是一个替代老年人护理人工上门居家安全检查的 AI 流水线。用户通过移动应用程序对房间进行拍照或录像,系统会自动检测与安全相关的物体,通过深度估计进行验证,并生成结构化的 **PASS / WARN / FAIL**(通过/警告/不通过)安全报告——无需人工检查员介入。 ## 功能介绍 传统的老年人居家安全评估需要训练有素的检查员亲临现场,排查潜在危险。ElderAssist 通过将上传的图像或视频送入四阶段的 AI 流水线来实现这一流程的自动化: 1. **深度估计 (Depth Anything V2)** — 单目深度模型 (`depth-anything/Depth-Anything-V2-Small-hf`) 为输入图像生成逐像素的相对深度图,用于在后续阶段进行检测结果的几何验证。 2. **双重 YOLO 检测** — 两个模型并行运行: - **自定义 YOLOv8m** (6 个安全类别): `staircase` (楼梯)、`grab_bar` (扶手)、`floor_mat` (地垫)、`lamp` (灯具)、`shower_chair` (淋浴椅)、`bedside_table` (床头柜) — 基于精选的 Roboflow 数据集 (`elderassist`, v11) 训练。 - **预训练 YOLOv8m (COCO)** — 检测常规家居物品,并筛选出与安全相关的子集:`chair` (椅子)、`bed` (床)、`toilet` (马桶)、`couch` (沙发)、`tv` (电视)、`sink` (水槽)、`dining table` (餐桌)、`bottle` (瓶子)、`cup` (杯子)、`knife` (刀具)、`clock` (时钟)、`rug` (地毯) 等。 3. **深度-YOLO 融合** — 每个检测结果都会根据其所在的深度区域进行验证。深度范围低于 `0.05`(平坦背景)或深度标准差 超出各类别阈值的检测将被拒绝。这作为主要的误报过滤器,允许 YOLO 在低至 `0.15` 的置信度阈值下运行,以实现最大召回率。 4. **房间上下文感知安全引擎** — 确认的检测结果将经过基于规则的清单验证。该引擎首先解析房间类型(支持别名,如 `washroom` → `bathroom`、`stairs` → `staircase_area`),并仅触发与该房间相关的规则。支持的房间包括:`bathroom` (浴室)、`bedroom` (卧室)、`living_room` (客厅)、`kitchen` (厨房)、`staircase_area` (楼梯区)、`entrance` (入口)。每条规则会产生一个 `PASS`、`WARN` 或 `FAIL` 的输出,而最终结论是所有规则中最差的状态。 ## 各房间安全规则 | 房间 | 检查规则 | |--------------------|---------------| | **浴室** | 马桶/淋浴附近的安全扶手及其位置、防滑垫、淋浴椅、马桶、水槽 | | **卧室** | 床、靠近床的床头柜、灯/夜灯、地垫、时钟、附近的补水用品 | | **客厅** | 座椅、防滑垫 | | **厨房** | 水槽、座椅、暴露的刀具检测、防滑垫 | | **楼梯区** | 楼梯有效性检查、扶手提醒、陡峭度提醒、地垫距离隐患 | | **入口** | 扶手、防滑垫 | ## 系统架构 ``` Mobile App (React Native + Expo) │ │ POST /analyze (multipart image or video + room label) ▼ FastAPI Backend (running in Google Colab) │ │ exposes port 8000 via ngrok tunnel ▼ AI Pipeline ├── Depth Anything V2 Small → per-pixel depth map ├── YOLOv8m Custom → 6 safety classes ├── YOLOv8m COCO → general household objects ├── Depth-YOLO Fusion → reject implausible detections └── Safety Checklist Engine → room-aware PASS/WARN/FAIL rules │ ▼ JSON Response { "overall": "PASS | WARN | FAIL", "findings": [ { object, verdict, note }, ... ], "annotated_image_base64": "..." } ``` **异步任务模式:** `POST /analyze` 立即返回一个 `job_id`。流水线在后台线程中运行。应用程序持续轮询 `GET /result/{job_id}`,直到状态变为 `done`。 ## API 端点 | 方法 | 端点 | 描述 | |---|---|---| | `GET` | `/health` | 健康检查 — 返回 `{"status": "ok"}` | | `POST` | `/analyze` | 提交图像或视频以进行分析。接受包含 `file` (jpeg/png/mp4/mov/avi) 和 `room` (字符串) 的 `multipart/form-data`。返回 `{"job_id": "..."}` | | `GET` | `/result/{job_id}` | 轮询结果。返回 `{"status": "queued|processing|done|error", "result": {...}}` | ## 项目结构 ``` elderassist/ ├── app/ # React Native + Expo mobile app │ ├── App.js │ ├── config.js # API_BASE_URL goes here │ └── screens/ ├── pipeline/ │ └── colab.py # Full pipeline + FastAPI server (runs in Colab) └── README.md ``` ## 配置指南 ### 前置条件 - Python 3.9+ (在 Google Colab 内运行 — 无需本地安装) - Node.js 18+ 和 npm (本地机器) - 手机上的 Expo Go 应用 (iOS 或 Android) - Google Colab 帐号(免费套餐即可;建议使用 GPU 运行时) - ngrok 帐号 — 免费套餐请访问 [ngrok.com](https://ngrok.com) - YOLOv8m 自定义权重 (`best.pt`) 已保存到 Google 云端硬盘 ### 1. 克隆仓库 ``` git clone https://github.com/your-username/elderassist.git cd elderassist ``` ### 2. 在 Google Colab 中运行流水线 **a. 上传或打开 notebook** 在 Google Colab 中打开 `pipeline/colab.py`(或将单元格复制粘贴到新的 notebook 中)。将运行时设置为 **GPU** (运行时 → 更改运行时类型 → T4 GPU)。 **b. 单元格 1 — 安装依赖项** ``` !pip install fastapi uvicorn pyngrok nest-asyncio python-multipart !pip install torch torchvision ultralytics !pip install transformers accelerate !pip install opencv-python-headless pillow numpy ``` **c. 单元格 2 — 设置您的 ngrok 身份验证令牌** 从 [dashboard.ngrok.com/authtokens](https://dashboard.ngrok.com/authtokens) 获取免费令牌并粘贴到此处: ``` from pyngrok import ngrok ngrok.set_auth_token("YOUR_NGROK_AUTH_TOKEN") ``` **d. 单元格 3 — 挂载云端硬盘并加载模型** ``` from google.colab import drive drive.mount('/content/drive') ``` 确保您的自定义 YOLOv8m 权重保存在以下路径: ``` MyDrive/elder_safety_checkpoints/best.pt ``` 预训练的 COCO 模型 (`yolov8m.pt`) 会自动下载(约 50MB)。Depth Anything V2 会在首次运行时从 HuggingFace 下载。 **e. 单元格 4 & 5 — 定义流水线和 FastAPI 应用** 按顺序运行这些单元格。它们定义了: - 深度估计、双重 YOLO 检测、深度融合和安全检查清单逻辑 - 包含 `/health`、`/analyze` 和 `/result/{job_id}` 端点的 FastAPI 应用 **f. 单元格 6 — 启动服务器并通过 ngrok 暴露服务** ``` import nest_asyncio, uvicorn, threading from pyngrok import ngrok nest_asyncio.apply() ngrok.kill() def run(): uvicorn.run(app, host="0.0.0.0", port=8000, log_level="warning") threading.Thread(target=run, daemon=True).start() public_url = ngrok.connect(8000).public_url print(f"API URL: {public_url}") print(f"Health: {public_url}/health") ``` 复制打印出的 `API URL` — 接下来您将把它粘贴到移动应用中。 ### 3. 设置移动应用 **a. 安装依赖项** ``` cd app npm install ``` **b. 配置 API 端点** 打开 `app/config.js` 并粘贴上一步获取的 ngrok URL: ``` export const API_BASE_URL = "https://your-ngrok-id.ngrok-free.app"; ``` **c. 启动 Expo 开发服务器** ``` npx expo start ``` 使用手机上的 Expo Go 应用扫描二维码,或在模拟器上运行。 ### 4. 运行评估 1. 在您的设备上打开应用并选择房间类型。 2. 拍摄或上传照片 (jpeg/png) 或视频 (mp4/mov)。 3. 应用将文件和房间标签发送至 `POST /analyze`。 4. 返回一个 `job_id`;应用持续轮询 `GET /result/{job_id}` 直到完成。 5. 流水线运行:深度图 → 双重 YOLO → 深度融合 → 安全检查清单。 6. 应用展示带有标注的图像以及每条规则的 PASS / WARN / FAIL 报告。 ## 关键工程决策 | 决策 | 原因 | |----------------------------------------|----------------------------------------------------------------------------------------------------------| | 双重 YOLO (自定义 + COCO) | 自定义模型涵盖 6 个训练过的安全类别;COCO 模型涵盖训练集中没有的常见物品(床、马桶、刀具等) | | YOLO 置信度阈值 = 0.15 | 最大化召回率;深度融合作为下游的误报过滤器 | | Depth Anything V2 Small | 相对深度足以进行基于几何的合理性检查;不需要度量深度 | | `DEPTH_STD_MAX["grab_bar"]` = 2.5 | 在诊断出深度拒绝(而非 YOLO 误分类)是主要失败原因后,从 1.2 上调 | | 深度范围下限 = 0.05 | 任何深度范围低于此值的检测都被视为平坦背景误报 | | 楼梯陡峭度 → 静态提醒 | 使用相对深度进行度量角度计算不可靠;替换为物理检查清单提醒 | | 异步任务模式 (`job_id` + 轮询) | 图像/视频处理可能需要数秒钟;异步模式可防止移动端发生超时错误 | | 视频流水线:每 60 帧采样一次 | 平衡覆盖范围与处理速度;使用覆盖范围最全面的帧进行标注 | | 房间别名解析 | 接受自然语言输入(`washroom`、`stairs`、`lounge`)并将其映射到规范房间类型 | | ngrok (非 Cloud Run) | 用于演示规模的部署;云部署计划在未来版本中实现 | ## 深度验证阈值 **自定义模型类别:** | 类别 | STD 最小值 | STD 最大值 | |---|---|---| | `staircase` | 0.15 | 99.0 (无上限) | | `grab_bar` | 0.05 | 2.5 | | `floor_mat` | 0.02 | 1.3 | | `lamp` | 0.05 | 1.5 | | `shower_chair` | 0.05 | 1.5 | | `bedside_table` | 0.05 | 1.5 | **COCO 类别** (床、马桶、椅子、水槽等):每个类别有不同的 STD 最小值;所有类别的 STD 最大值 = 3.0。 无论属于哪个类别,所有深度范围低于 `0.05` 的检测都会直接作为平坦背景被拒绝。 ## 数据集 - **平台:** Roboflow - **工作区:** `elderassist` - **项目:** `elderassist` - **版本:** 11 - **格式:** YOLOv8 - **类别:** 6 — `staircase`、`grab_bar`、`floor_mat`、`lamp`、`shower_chair`、`bedside_table` 标注标准:每个物体实例对应一个紧凑的边界框;当物体延伸出画面时,边界框可扩展至图像边缘;不使用破碎或过大的边界框。 ## 计划改进 - 通过 Google Cloud Run 进行云部署(替代 ngrok) - Firebase Auth + Firestore 用于保存持久化的报告历史记录 - 扩展自定义物体类别和房间类型 - 引入度量深度以实现精确的陡峭度和距离测量 ## 技术栈 | 层级 | 技术 | |---|---| | 移动应用 | React Native, Expo | | 后端 API | FastAPI | | AI 运行时 | Google Colab (GPU) | | 隧道 | ngrok | | 物体检测 | YOLOv8m — 自定义 (6 个类别) + COCO (80 个类别,已过滤) | | 深度估计 | Depth Anything V2 Small (HuggingFace) | | 数据集管理 | Roboflow | | 模型存储 | Google Drive |
标签:AI分析, AI检测, Apex, COCO数据集, CodeQL, Depth Anything V2, Roboflow, YOLOv8, 云计算, 人工智能, 假阳性过滤, 养老辅助, 几何验证, 凭据扫描, 单目深度估计, 卫浴安全, 合成孔径雷达, 图像识别, 子域名暴力破解, 安全报告生成, 安全评估工具, 家居安全, 居家安全评估, 居家安防, 房间分类, 扶手检测, 无障碍设计, 智慧养老, 智慧医疗, 智慧家居, 智能养老, 机器学习, 楼梯安全, 深度估计, 深度学习, 环境危险识别, 用户模式Hook绕过, 目标检测, 移动应用, 老年人跌倒预防, 自动化检测, 规则引擎, 视频分析, 计算机视觉, 跌倒检测, 跌倒预防, 跌倒风险评估, 软件物料清单, 适老化改造, 逆向工具, 障碍物检测