居家看护监控盒子¶
Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.
本项目是一个基于 Quectel Pi M2 智能主控板实现的居家看护监控示例。
系统通过 USB 摄像头采集实时画面,在板端 NPU 上运行 YOLOv8n-Pose 人体姿态模型进行多人骨骼检测与跌倒判定,结合板载麦克风声音能量监测、声光告警与事件录像,完整展示"视频采集 → NPU 推理 → 跌倒判定 → 声光告警/事件录像"的端到端链路。检测到跌倒时,板载红灯点亮、扬声器播放警笛,并自动保存事件前后带音频标注的录像片段;图形界面实时显示画面骨骼、帧率、推理耗时、人数与声音强度等指标。
开发资源汇总¶
开发配件清单¶
Note: tips
开发配件只是作为参考,不同的开发环境可能会有所差异
配件名称 |
数量 |
规格参数 |
|---|---|---|
Quectel Pi M2 智能主控板 |
1 块 |
- |
USB 摄像头(含麦克风) |
1 个 |
UVC 协议,支持 720p MJPG |
扬声器 |
1 个 |
|
HDMI 显示器(可选) |
1 个 |
有 HDMI 显示器也可,无屏可运行无界面模式 |
网线 |
1 根 |
用于 SSH 登录与代码拉取 |
Type-C 电源适配器 |
1 个 |
主控板供电 |
杜邦线/螺丝刀 |
若干 |
- |
配件实物参考¶
快速上手¶
开发准备¶
Quectel Pi M2 智能主控板出厂默认搭载 Debian 13 系统镜像,因此无需再次烧录镜像,仅需按照如下步骤操作即可。NPU 运行时库、Python 3.12 环境及全部依赖由项目自带的一键部署脚本自动完成安装。
硬件连接¶
完成以下所有硬件连接操作:
摄像头连接:将 USB 摄像头接入主控板 USB-A 口。可用
v4l2-ctl --list-devices确认设备序号(示例机型为 PC Camera =/dev/video73),后续在配置文件中填写。拾音连接:默认使用摄像头内置麦克风拾音(
arecord -l中对应 plughw:1,0),无需额外接线;板载 es8389 麦克风作为备用。扬声器连接:将扬声器接至板载 es8389 声卡音频输出座(对应 plughw:0,0),功放使能由内核自动完成,无需软件干预。
显示连接(可选):接入 HDMI 显示器用于本地查看图形界面;无显示器时可运行无界面(Headless)模式,通过 SSH 远程查看事件日志与录像。
网络与供电:接入网线,最后连接 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 实时打印躯干倾角等特征值,辅助现场标定。
应用演示¶
常见问题及解决方案¶
程序找不到摄像头¶
现象:
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 贡献代码改进!