摘要
面向独居居家照护与室内安全监测中“传统视频监护侵犯隐私”与“单帧视觉算法频繁误报”的问题,本项目研发了一套以 RISC-V 架构 SoC(VisionFive 2)为主控、Hailo-8L 为端侧深度学习加速核心、STM32F103 为物理交互节点的边缘智能监护终端原型。
系统打通了从 MIPI-CSI 传感器接入、GPU(Vulkan)硬件预处理、DMA-BUF 零内存拷贝到 Hailo-8L NPU 的低延迟异构加速流水线。
算法采用“姿态骨架 + 空间时序”双流融合架构:前端由 YOLOv8s-Pose 提取 17 处人体关键点,经 CPU 轻量因果 TCN(6,289 参数)快速提取时序动态特征;后端由 Hailo-8L 执行带有 10 级时序状态缓存的在线 TSM 视频时序分析,共同实现跌倒异常的高时效确认。在交互与隐私机制上,系统采用“默认仅呈现骨架态、原图需经服务端 60 秒限时双向鉴权”的分级保护机制,并配合MCU 拓展板实现声光告警、一键求助与现场消警的闭环交互。
实机测试表明,系统在板端实现了姿态检测 9.88 FPS 的稳定吞吐,采集至决策的 P95 端到端延迟控制在 199.5 ms 内,AI 进程峰值内存仅占用 176.8 MiB。项目以完成了传感器底层时钟与内存布局对齐、异构双缓冲防争用设计及两层硬件拓展板开发,形成了具备可复现性的端侧 AI 软硬件参考实现。
1. 从“看视频”到“处理异常事件”
居家看护需要及时发现异常,但长期开放室内视频会暴露生活细节,也增加家属持续查看画面的负担。仅凭一帧中的人体角度或宽高比判断跌倒,又容易把坐下、弯腰、地面活动等日常动作当成危险。即使算法产生提示,现场使用者若无法求助或取消误报,系统仍停留在“检测演示”阶段。
系统面向独居者家属及小型家庭,聚焦固定机位、单人全身可见区域的跌倒相关异常。设计目标是让设备在本地理解动作变化,以尽量少的图像暴露给出可处置提示,并保留现场主动求助的入口。
问题 | 系统设计 | 预期效果 |
|---|---|---|
日常查看暴露室内细节 | 默认骨架与事件摘要,原图独立授权 | 降低常态监护中的画面暴露 |
静态姿态难以判断动作过程 | 姿态 TCN+外观 TSM 双时序分析 | 同时利用运动趋势与外观变化 |
高负载下提示越来越滞后 | 最新帧优先、限频、丢弃过期输入 | 让决策围绕当前场景进行 |
算法提示缺少处置入口 | Web 确认/取消,自研板预留实体按键 | 将识别结果连接到实际交互 |
用户安装设备并检查全身覆盖后,日常只查看骨架、运行状态和告警时间线。出现疑似异常时,系统生成候选提示,显示在web界面同时也通过MQTT发送;满足时序与覆盖条件后形成告警,值守者可以确认或取消,必要时短时授权查看原图。MCU拓展板的求助键、取消/确认键与状态灯用于把这套交互延伸到现场。
首版围绕单人场景设计。画面遮挡、出画或关键点不足时,界面提示“覆盖不足”,使“无法判断”成为明确状态。
2. 系统方案
2.1 整机架构
系统架构如下:

VisionFive 2 运行 Linux,承担采集管理、调度和事件服务;GPU 处理图像缩放与填充;Hailo-8L 执行计算密集的视觉网络;CPU 执行参数量较小的 TCN、关键点处理与业务逻辑。H.265 硬件编码提供独立的鉴权调参预览通道。STM32 拓展板将低速交互从 Linux 视觉主循环中分离。
2.2 CMOS 移植
选择 MIPI-CSI 的主要目的,是把传感器曝光、ISP 与采集缓冲纳入同一条可控制链路。项目完成了设备树与传感器驱动适配、Media Controller 格式贯通以及 NV12 共享采集,使相机能够同时服务推理和调参预览。
图像适配采用“先确认传感器输出,再调整 ISP”的方法:修正 WR RAW 缓冲的存储布局,用固色模式验证像素解释,再做同曝光、同增益的 RAW/NV12 对照。由此把数据布局问题与曝光问题分开,避免用 ISP 增益掩盖输入错误。OV5647 最终接入片内 AEC/AGC 与 50 Hz 抗频闪配置。
查看原理图可知,VisionFive2 board板载mipi-csi接口兼容Raspberry Pi Camera模组,这意味着无需设计转接板或者camera模组,可以直接使用Raspberry Pi Camea模组,在此,本文使用OV5647模组,模组自带25MHz晶振,无需SoC提供mclk。

Linux目前已有OV5647 sensor驱动,因此我们不需要从零编写sensor驱动,仅需匹配源码、编译模块、适配设备树和媒体链路。
参照已移植的VisionBoard IMX219,首先修改设备树,注册sensor:
```dts
fragment@0 {
target-path = "/";
__overlay__ {
ov5647_xclk: ov5647-xclk {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <25000000>;
clock-output-names = "ov5647-xclk";
};
};
};
fragment@1 {
target = <&ov4689>;
__overlay__ {
compatible = "ovti,ov5647";
clocks = <&ov5647_xclk>;
clock-names = "xclk";
/* Raspberry Pi-compatible module enable is driven high while on.
* OV5647 driver deasserts its logical pwdn to power the module.
*/
pwdn-gpios = <&sysgpio 18 1>; /* GPIO_ACTIVE_LOW */
rotation = <0>;
orientation = <1>;
status = "okay";
};
};
```
启用内核:
```sh
SLOT=/sys/bus/i2c/devices/6-0036
OVERLAY=/sys/kernel/config/device-tree/overlays/fall-monitor-ov5647
if [ -L "$SLOT/driver" ]; then
test "$(basename "$(readlink "$SLOT/driver")")" = ov5647
echo 'OV5647 already bound'
exit 0
fi
if [ ! -d "$OVERLAY" ]; then
mkdir "$OVERLAY"
cat ov5647-live.dtbo >"$OVERLAY/dtbo"
fi
test "$(cat "$OVERLAY/status")" = applied
if [ ! -d /sys/module/ov5647 ]; then
/sbin/insmod driver/ov5647.ko
fi
if [ ! -L "$SLOT/driver" ]; then
printf '%s\n' 6-0036 >/sys/bus/i2c/drivers/ov5647/bind
fi
test "$(basename "$(readlink "$SLOT/driver")")" = ov5647
echo 'OV5647 bound; live overlay only, boot files unchanged'
```3. 软件核心设计
3.1 隐私控制
日常监护只需要回答“人是否可见、动作是否异常、设备是否正常”。系统默认用骨架表达姿态,以时间线表达事件,以健康信息表达设备状态,减少用户持续查看原始视频的必要。
隐私控制同时落实在服务端与前端:登录后仍需单独授权原图,租约为 60 秒;撤销或到期后停止原图访问并清空 JPEG 缓存。主循环仅在授权有效时生成用于 Web 的 JPEG。下面的实际实现说明,权限控制覆盖了图像提供环节:
int portal_raw_active(void) {
pthread_mutex_lock(&mu);
int v = raw_until > monitor_us() && session_until > monitor_us();
if (!v)
jpeg_size = 0;
pthread_mutex_unlock(&mu);
return v;
}Web 将实时状态、事件时间线和设备健康放在同一界面。确认和取消针对具体事件编号,记录操作后的状态,保留历史,便于区分“出现候选”“已人工处理”和“设备无法判断”。


系统健康信息包含温度、内存、推理速率和输入时效。人体不可见、输入过期或模型无有效输出时显示覆盖或运行问题,避免把“没有结果”表现为“安全”。
3.2 时序推理
跌倒是动作过程。身体倾斜既可能来自异常失衡,也可能来自弯腰取物;低姿态既可能来自跌倒,也可能来自坐下或地面锻炼。因此系统先提取人体姿态,再用历史变化和人体局部外观补充单帧判断。
系统以 TCN 捕捉几何运动趋势,TSM 捕捉外观时序变化。这是一种面向误报问题的互补设计,其效果通过单分支对照、板端数值检查及组合策略评价逐层验证。
分支 | 输入与时域 | 执行位置 | 提供的信息 |
|---|---|---|---|
YOLOv8s-Pose | 640×640 RGB,17 个关键点 | Hailo-8L | 人体位置、可见性与骨架 |
因果 TCN | 97 维特征;29 步、约 2.8 秒历史 | CPU,6,289 参数 | 姿态变化、躯干方向、垂直运动趋势 |
在线 TSM | 224×224 人体裁剪;目标 5 Hz | Hailo-8L,完整 MobileNetV2 骨干+分类头 | 连续人体外观变化 |
97 维特征由关键点相对位置与置信度、运动速度及全局几何量组成。位置相对人体中心与尺度归一化,速度采用真实时间戳计算,使模型输入更适应人物远近及采样间隔的变化。
TSM 在 10 个位置保留上一时刻的部分特征,状态共 108,192 字节 float32,无需等待完整视频片段。模型移植包含骨干、分类头和状态反馈;状态输出先按各自量化参数解量化,再供下一次输入使用,从而保持递归语义。
当前策略要求 TCN 连续两次有效观测高于 0.8 形成候选;自动告警还需 TSM 连续两次高于 0.8、结果新鲜且全身覆盖通过。失去人体、关联突变或时间间隔过长会重置时序历史。告警锁存后,低分持续 3 秒恢复,事件间隔至少 30 秒。
这里有三个不同职责:模型描述动作证据,覆盖与时效门控判断证据是否可用,事件状态机负责避免重复触发并支持人工处置。双分支联合门控仍需完成量化后完整留出集评价;第 7 节分别呈现已测结果,避免混用不同阶段的准确率。
3.3 异构流水线
监护系统在算力不足时,若按顺序积压旧帧,画面虽然持续更新,告警却可能针对数秒前的动作。远望采用最新帧优先的有界处理方式:
采集端独占摄像头,将最新 NV12 及序号、时间戳发布到匿名共享区。
预处理端取得可复用槽位,GPU 生成模型需要的 RGB 输入。
推理端取得槽位所有权,Hailo 完成推理后归还槽位。
未消费的旧准备帧可被替换;推理正在使用的槽位禁止覆盖。
调度设为双槽,GPU 和 Hailo 各最多一个任务在途。超过 150 ms 的待推理帧丢弃,超过 250 ms 的姿态结果不触发当前事件。由此将吞吐压力转化为受控丢帧,防止无界排队。
GPU 完成 resize/letterbox 后,通过 DMA-BUF 将输入交给 Hailo,省去 GPU 输出回读到 CPU、再复制进 Hailo 输入缓冲的步骤。共享前验证紧密 RGB 布局、行跨度和有效字节数;GPU fence 确认写入完成,Hailo 同步执行完成后才允许复用。
该共享覆盖 GPU 输出到 Hailo 输入。采集发布与人体裁剪环节仍有 CPU 复制,因此报告采用“输入共享”描述这项成果。当前调度以所有权和同步正确性为先,后续再依据完整对照决定并行重叠方式。
4. MCU拓展板
4.1 电路组成
Web 服务解决远程查看问题,自研板解决现场用户如何主动求助、如何回应告警以及如何感知设备状态的问题。STM32 承担低速交互,使按键、灯效和测距的处理不必进入视觉推理主循环。
拓展板采用约 100×55 mm、1.6 mm 厚的两层 PCB,包含 STM32F103C8T6、3.3 V 稳压、8 MHz 与 32.768 kHz 时钟、两颗 WS2812B-V5、两个按键及 ToF 模组接口。。

功能 | 设计连接 | 系统作用 |
|---|---|---|
主机→MCU | GPIO51 UART TX → R10 33 Ω → PB11/USART3_RX | 下发事件与设备状态 |
MCU→主机 | PB10/USART3_TX → R9 33 Ω → GPIO54 UART RX | 上报按键、测距与状态 |
双按键 | K1→PC13,K2→PA0 | 规划为求助、取消/确认 |
双状态灯 | WS2812B-V5 | 用颜色及节奏区分运行、候选、告警与故障 |
ToF | VL53L0X 模组接口 | 规划为区域占用或遮挡辅助信息 |
5. 测试结果
5.1 数据集测试结果
模型 | 序列准确率 | 及时事件命中 | ADL 误报 | 及时命中延迟中位数 |
|---|---|---|---|---|
逐帧几何 MLP | 80.00% | 12/15(80.0%) | 7/20 | 0.361 s |
因果 TCN | 77.14% | 13/15(86.7%) | 8/20 | 0.404 s |
静态 RGB 头 | 68.57% | 14/15(93.3%) | 11/20 | 0.409 s |
在线 RGB TSM | 77.14% | 14/15(93.3%) | 8/20 | 0.515 s |

5.2 资源占用与性能实测

指标 | 已测结果 | |
|---|---|---|
采集帧率 | 30.01 FPS | 摄像头采集 |
姿态处理速率 | 9.88 FPS | 测试窗口处理速率 |
姿态 Hailo API 均值/P95 | 73.66/83.02 ms | 含调度、传输及输出转换 |
采集完成→决策均值/P95 | 154.9/199.5 ms | 从采集完成时间戳至程序决策 |
AI 进程 CPU 均值 | 46.5% | 一个核心满载计 100% |
AI 进程峰值 RSS | 176.8 MiB | 进程驻留内存 |
芯片温度 | 38~39 °C | 当时环境与散热条件 |
缓冲所有权错误 | 0 | 该窗口内 |
Hailo 错误日志 | 未发现 | 该窗口内 |
5.3 实际体验效果
总结
本系统的应用价值在于让家属更少地依赖持续观看原始视频,让使用者能够回应提示,并让设备运行状态可见。
