居家看护监控盒子

Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.


本项目是一个基于 Quectel Pi M2 智能主控板实现的居家看护监控示例。

系统通过 USB 摄像头采集实时画面,在板端 NPU 上运行 YOLOv8n-Pose 人体姿态模型进行多人骨骼检测与跌倒判定,结合板载麦克风声音能量监测、声光告警与事件录像,完整展示"视频采集 → NPU 推理 → 跌倒判定 → 声光告警/事件录像"的端到端链路。检测到跌倒时,板载红灯点亮、扬声器播放警笛,并自动保存事件前后带音频标注的录像片段;图形界面实时显示画面骨骼、帧率、推理耗时、人数与声音强度等指标。

../../../_images/image_O1o4biSjGoXeSNxso2HcubgSnAc.webp

开发资源汇总

开发配件清单

Note: tips

开发配件只是作为参考,不同的开发环境可能会有所差异

配件名称

数量

规格参数

Quectel Pi M2 智能主控板

1 块

-

USB 摄像头(含麦克风)

1 个

UVC 协议,支持 720p MJPG

扬声器

1 个

2030腔体喇叭8Ω 2W方形喇叭高音质小体积扬声器

HDMI 显示器(可选)

1 个

有 HDMI 显示器也可,无屏可运行无界面模式

网线

1 根

用于 SSH 登录与代码拉取

Type-C 电源适配器

1 个

主控板供电

杜邦线/螺丝刀

若干

-

配件实物参考

../../../_images/image_CPYWbiA7HoQSJJxXUBZcc1PAnuf.webp

快速上手

开发准备

Quectel Pi M2 智能主控板出厂默认搭载 Debian 13 系统镜像,因此无需再次烧录镜像,仅需按照如下步骤操作即可。NPU 运行时库、Python 3.12 环境及全部依赖由项目自带的一键部署脚本自动完成安装。

硬件连接

完成以下所有硬件连接操作:

  1. 摄像头连接:将 USB 摄像头接入主控板 USB-A 口。可用 v4l2-ctl --list-devices 确认设备序号(示例机型为 PC Camera = /dev/video73),后续在配置文件中填写。

  2. 拾音连接:默认使用摄像头内置麦克风拾音(arecord -l 中对应 plughw:1,0),无需额外接线;板载 es8389 麦克风作为备用。

  3. 扬声器连接:将扬声器接至板载 es8389 声卡音频输出座(对应 plughw:0,0),功放使能由内核自动完成,无需软件干预。

  4. 显示连接(可选):接入 HDMI 显示器用于本地查看图形界面;无显示器时可运行无界面(Headless)模式,通过 SSH 远程查看事件日志与录像。

  5. 网络与供电:接入网线,最后连接 Type-C 电源上电。

Note: tips

连接完成后可用 v4l2-ctl --list-devices 验证摄像头在位、arecord -l 与 aplay -l 验证录音/播音设备在位。若摄像头设备号与配置不一致,修改 config.yaml 中的 camera.index 即可。

项目实现

获取代码

在智能主控板上打开终端,使用 git 克隆项目代码。

sudo apt update
sudo apt install -y git
git clone https://github.com/Quectel-Pi/demo_fall_detect.git
cd demo_fall_detect

执行完成后,进入 fall_detect_demo 目录,该目录即为本项目的全部源码。

环境部署

运行项目自带的一键部署脚本,自动完成 Python 3.12 独立环境、推理依赖、RKNN 运行时库的安装:

sudo bash deploy/board_setup.sh

脚本支持 在线/离线双模式:在线模式下通过 uv 自动安装 Python 3.12 与 pip 依赖;离线模式下使用随包分发的 wheels 与 Python 离线包。同时会将 NPU 运行时 librknnrt.so 安装至系统目录,并将代码部署到 /opt/fall_detect_demo。

自检测试

首次运行前建议依次执行内置自检,确认软硬件链路正常:

/opt/py312/bin/python3.12 selftest.py   # 离线自测: 后处理/跌倒判定/警笛生成等, 无需摄像头与 NPU
sudo bash run.sh --test-alarm           # 声光告警测试: 红灯 + 警笛 5 秒
sudo bash run.sh --test-audio           # 声音标定: 实时打印环境底噪与声音强度 (dB)

--test-audio 可用于按现场环境标定声音触发阈值(config.yaml 中 audio 段),避免误触发或漏触发。

Note: tips

板端依赖均安装于部署脚本创建的 /opt/py312 独立环境,请勿直接使用系统自带 python3 运行本项目(会报 ModuleNotFoundError);run.sh 会自动定位该环境,日常运行一律通过 run.sh 启动。

运行程序

sudo bash run.sh

run.sh 会自动定位部署目录与 Python 环境、补全桌面显示授权后启动程序。若程序正常启动,会弹出"跌倒检测监控系统"窗口,左侧为带人体骨骼标注的实时画面,右侧为状态指标与控制面板。

无显示器场景可运行无界面模式:

sudo bash run.sh --no-ui

界面与功能

程序正常运行后,窗口顶部状态徽标为绿色"●正常监控";检测到跌倒时变为红色"⚠检测到跌倒!",同时触发声光告警与事件录像。

界面元素

功能说明

实时画面(左侧)

带人体骨骼关键点标注的视频预览,实测约 13~16fps(摄像头采集为 30fps,显示帧率受 NPU 推理耗时限制)

状态徽标(顶栏)

绿色"正常监控" / 红色"检测到跌倒"

帧率 / 推理耗时

实时 FPS 与单帧 NPU 推理耗时(约 60ms)

画面人数

当前画面中检测到的人数,每人独立判定

环境底噪 / 声音强度

麦克风实时 dB 读数与进度条,用于标定声音阈值

测试告警按钮

手动触发 5 秒声光告警

静音/取消按钮

停止当前正在进行的告警

手动录像按钮

立即保存一段事件录像

事件日志(底部)

按时间戳记录跌倒/声音事件

工作原理

系统数据流:摄像头 720p@30fps 采集 → letterbox 缩放至 640×640 → RK3576 NPU 运行 YOLOv8n-Pose(fp16,约 60ms/帧)→ 后处理输出多人 17 关键点 → 跌倒判定 → 触发告警/录像。

跌倒判定 采用打分制,对画面中每个检测到的人独立判定:

  • 前提条件:该人可信骨骼节点比例 ≥ 70%;

  • 特征打分:躯干倾角、腿部水平、身体长宽比横向、关键点贴地、横向分布等特征加权累计,总分 ≥ 3 判为"倒地姿态";

  • 硬门槛:躯干直立(倾角不足阈值 0.6 倍,约 33°)时直接否决,过滤坐姿、蹲姿、弯腰捡物等直立躯干场景的误报;

  • 辅助判定:髋部观察窗内快速下坠且倾角超标时直接判定;

  • 去抖:连续 15 帧(约 0.9 秒)保持倒地姿态才触发告警,连续 30 帧恢复正常姿态才解除。

事件触发后:板载红灯点亮、扬声器循环播放警笛(默认 10 秒,跌倒未恢复期间持续告警),并自动保存事件前 4 秒回溯 + 共 10 秒的带音频录像至 records/日期/ 目录,索引写入 records/events.jsonl。异常声音事件(音量突增)只触发录像,不拉响警笛。

判定阈值、摄像头参数、声音阈值、录像时长等均可在 config.yaml 中调整;可使用 tools/fall_feat_debug.py 实时打印躯干倾角等特征值,辅助现场标定。

应用演示

fall_detect_demo

常见问题及解决方案

程序找不到摄像头

现象:

Camera open failed

解决方案:

  • 使用命令确认摄像头设备号:v4l2-ctl --list-devices;

  • 修改 config.yaml 中 camera.index 为实际设备序号(本项目示例机型为 73)。

有人出现但检测不到 / 坐姿误报

现象:画面中有人但人数为 0,或正常坐姿被判定为跌倒。

解决方案:

  • 适当调低 model.conf_threshold / model.kpt_threshold(默认 0.35 / 0.40);

  • 距离过远导致关键点不可见时,判定会被"可见节点 ≥ 70%"门槛拦截,属正常保护逻辑;

  • 坐姿误报场景可运行 tools/fall_feat_debug.py,实时查看 torso_angle 与各项得分,必要时微调 fall.torso_angle_threshold(默认 55°,直立硬门槛为 0.6 倍即 33°)。

声音误触发或一直不触发

现象:环境安静时频繁录像,或拍手、呼喊无反应。

解决方案:

  • 运行 sudo bash run.sh --test-audio,观察环境底噪与拍手时的实时 dB 读数;

  • 按现场环境调整 config.yaml 中 audio.abs_threshold_db(默认 -10 dBFS,另有高于底噪 15dB 的相对阈值联动);

  • 默认拾音设备为摄像头内置麦克风(plughw:1,0),若被桌面音频服务占用,程序会自动回切板载麦克风(plughw:0,0)。

图形界面无法启动

现象:桌面环境下运行后无窗口弹出,程序回退到命令行模式。

解决方案:

  • 确认通过 sudo bash run.sh 启动,脚本已自动处理 Wayland 桌面下的显示授权(DISPLAY / XAUTHORITY);

  • 若日志提示 Qt xcb 插件加载失败,安装缺失的系统库:sudo apt install -y libxcb-cursor0(部署脚本已内置自动安装兜底);

  • 无显示器场景请直接使用 sudo bash run.sh --no-ui。

NPU 推理报错或模型加载失败

现象:

RKNN run error / librknnrt version mismatch

解决方案:

  • 确认 librknnrt.so 与板端 rknn-toolkit-lite2 版本匹配(重新执行 sudo bash deploy/board_setup.sh 可自动对齐);

  • 确认模型文件为 RK3576 目标平台编译的 .rknn(项目 models/ 目录自带);调试阶段也可临时改用 .onnx 走 CPU 推理(--model 参数指定)。

技术支持与贡献

如在使用过程中遇到问题,欢迎在移远官方论坛提交技术咨询,我们的技术支持团队将及时为您解答。

项目开源地址: https://github.com/Quectel-Pi/demo_fall_detect

欢迎提交 Issue 反馈问题或 Pull Request 贡献代码改进!