Event VisionFive:家庭智能异常事件监护相机

基于 VisionFive 2 与 Hailo-8L 的隐私优先型室内异常监护边缘终端。系统在 RISC-V 端侧结合人体姿态与轻量时序算法检测跌倒等异常,默认仅呈现骨架以保护隐私,并配合MCU 拓展板提供本地按键求助与状态交互闭环。

Event VisionFive:家庭智能异常事件监护相机封面
jf_260558912026-11-12 09:02:25GPL-3.0
4
Star

PCBA

设计文件

KiCad图标starfive_exp_board.zip1.35MB(0次下载)

生产BOM

其他附件

EDA查看器

复制嵌入代码

详细介绍

摘要

面向独居居家照护与室内安全监测中“传统视频监护侵犯隐私”与“单帧视觉算法频繁误报”的问题,本项目研发了一套以 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 异构流水线

监护系统在算力不足时,若按顺序积压旧帧,画面虽然持续更新,告警却可能针对数秒前的动作。远望采用最新帧优先的有界处理方式:

  1. 采集端独占摄像头,将最新 NV12 及序号、时间戳发布到匿名共享区。

  2. 预处理端取得可复用槽位,GPU 生成模型需要的 RGB 输入。

  3. 推理端取得槽位所有权,Hailo 完成推理后归还槽位。

  4. 未消费的旧准备帧可被替换;推理正在使用的槽位禁止覆盖。

调度设为双槽,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 实际体验效果

总结

本系统的应用价值在于让家属更少地依赖持续观看原始视频,让使用者能够回应提示,并让设备运行状态可见。