Skip to main content

AI 视觉人存在感知开关

概览

本项目基于 Seeed Studio reComputer R2000 和 Hailo-8 AI 算力加速模块,实现了基于人脸特征的人脸识别功能,并搭建了一个视觉感知系统,将其作为人体存在的感知检测器。通过摄像头对一个区域的检测,可实现对人的存在感知。这里会将其与权限管理场景结合应用。具体表现为,当有权限的人被摄像头识别到后,设备才允许被使用;否则设备将无法被使用。同时,本方案会将监测结果接入 Home Assistant 进行展示。

demonstration

1. 设备与软件清单

核心组件详细清单备注
智能边缘计算平台Seeed Studio reComputer R2000 (内置 Raspberry Pi 5 和 Hailo-8 AI 加速模块)这是整个项目的核心硬件,负责AI推理和系统运行。
图像数据来源Grove Vision AI v2一款集成AI视觉功能的摄像头模块,可作为图像输入来源。
XIAO ESP32S3 Sense用于 Wi-Fi 透传数据,通常和 Grove Vision V2 搭配一起用
智能家居中枢Home Assistant用于集中管理智能设备和自动化
硬件配置电源适用于 R2000 的 USB-C PD 电源,至少 27W
网络可选择网线连接或已配置好的 WiFi。
软件环境主机操作系统R2000 预装的 Raspberry Pi OS
通信协议MQTT Broker (通常作为 Home Assistant 的 Add-on 安装)。
代码编辑工具VS Code with Remote-SSH Extension (强烈推荐,方便远程编辑代码)。

2. 连接与基础环境检查

note

在进行软件安装前,请确保你的硬件已正确启动,并完成基础环境配置。

  1. 如果你的 R2000 还没有配置 Hailo 模块,此时请拔掉电源,然后安装 Hailo-8 模组。
  2. 插上网线(如果你配置了 Wi-Fi 连接,可以省略此步)。
  3. 接入电源,启动设备。

如果你没有安装树莓派系统,可以根据 Wiki 文档来进行,Flash OS - Wiki

这里将采用 SSH 方式远程连接 reComputer R2000 进行软件安装,其他方式不再赘述。

目前测试的 R2000 设备上安装的树莓派发行版本是 Debian GNU/Linux 12 (bookworm),即 Raspberry Pi OS (64-bit)

ssh 连接指令:

ssh <USER_NAME>@<IP_ADDRESS>

例如我的要连接的设备的用户名为 recomputer,IP 地址为 192.168.10.179:

(base) ➜  ~ ssh [email protected]
[email protected]'s password:
Linux rpi 6.12.25+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.12.25-1+rpt1 (2025-04-30) aarch64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue May 13 08:17:57 2025
recomputer@rpi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm

出现类似上述的信息说明通过 SSH 的方式连接到了远程 R2000 设备中。

2.1 环境准备

info

对于中国大陆用户,你可以先用此脚本来配置你的镜像源,以提升你的下载速度。

# 因为需要更高的权限,所以拆分运行
curl -sSL https://linuxmirrors.cn/main.sh -o gnu_linux_mirror.sh
sudo bash gnu_linux_mirror.sh

# 安装 docker,因为我们会需要用到 Docker
curl -sSL https://linuxmirrors.cn/docker.sh -o install_docker.sh
sudo bash install_docker.sh
# 设置 Docker 用户
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
sudo groupadd docker
sudo usermod -aG docker $USER

详情请访问脚本提供官方:linuxmirrors

更新系统软件

为了确保你的 Raspberry Pi 系统运行最新的软件,请执行如下命令进行更新:

# ensure that your Raspberry Pi runs the latest software. Run the following command to update:
sudo apt update && sudo apt full-upgrade

确保你的 Raspberry Pi 的固件是最新的。运行以下命令来查看你正在使用的固件:

sudo rpi-eeprom-update

比如如下就是一个最新固件的标志信息:

recomputer@rpi:~ $ sudo rpi-eeprom-update
BOOTLOADER: up to date
CURRENT: Thu 8 May 14:13:17 UTC 2025 (1746713597)
LATEST: Thu 8 May 14:13:17 UTC 2025 (1746713597)
RELEASE: default (/usr/lib/firmware/raspberrypi/bootloader-2712/default)
Use raspi-config to change the release.

对比参数后,可以发现是最新的固件。

2.2 项目拉取

下载 GitHub 项目 Face recognition api.

note

本项目采用 uv 进行 Python 项目的管理, 可以通过如下指令进行安装 uv:

# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
# On Windows.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
git clone https://github.com/Seeed-Solution/face-recognition-api
cd face-recognition-api

uv sync

通过 uv sync 来同步下载 Python 项目所需的库依赖。

2.3 安装 HailoRT

HailoRT 是 Hailo 设备(如 Hailo-8 加速棒)的“操作系统”,负责和硬件通信、加载模型、执行推理等。

没有 HailoRT,其他软件(无论是 Python、C++ 还是 Docker 容器)都无法直接调用 Hailo 加速棒进行 AI 推理。

在本项目中,HailoRT 的安装会用到三个文件来进行安装:

  • hailort_<version>_<arch>.deb - HailoRT 安装包
  • hailort-pcie-driver_<version>_all.deb - HailoRT PCle 驱动,通过 PCle 连接的 Hailo 设备需要此驱动
  • hailort-<version>-<python-tag>-<abi-tag>-<platform-tag>.whl - PyHailoRT,通过 Python API 来访问 Hailo 功能
hailo 版本说明

如上三个文件,本仓库已经提供了 4.21.0 的版本文件,如果需要下载特定的其他版本,请访问 Software Downloads - Developer Zone。请注意,下载这些文件需要注册账号并登录。

hailo-packages-install

安装 DKMS

因为 HailoRT 依赖的 PCIe 驱动需要针对当前运行内核的版本动态编译和加载,所以需要安装 DKMS。

sudo apt-get install dkms

安装 HailoRT

安装 HailoRT, 以及需要通过 PCle 进行通信的驱动:

sudo dpkg --install hailort-4.21.0/hailort_4.21.0_arm64.deb hailort-4.21.0/hailort-pcie-driver_4.21.0_all.deb

其中 PyHailoRT 4.21.0 已经由 uv sync 在本项目中进行安装,无需另外操作;PyHailoRT 是与 Python 项目绑定的。

安装完后,你还需要在 /etc/modprobe.d/hailo_pci.conf 添加一行配置项。

echo "options hailo_pci force_desc_page_size=4096" | sudo tee /etc/modprobe.d/hailo_pci.conf

然后,重启设备

sudo reboot

检查安装是否成功

重启后,你可以用 hailortcli 检查设备是否被识别:

hailortcli scan

这个扫描命令应该能找到设备。

再运行下面的命令,从设备获取序列号:

hailortcli fw-control identify

出现如下类似的信息,说明你的驱动安装成功了:

hailortcli fw-control identify

Executing on device: 0001:01:00.0
Identifying board
Control Protocol Version: 2
Firmware Version: 4.21.0 (release,app,extended context switch buffer)
Logger Version: 0
Board Name: Hailo-8
Device Architecture: HAILO8
Serial Number: <N/A>
Part Number: <N/A>
Product Name: <N/A>

3. 运行项目

在本项目的根目录下直接运行 API 服务:

PYTHONPATH=src uv run uvicorn app:app --host 0.0.0.0 --port 8000
nohup - 后台运行

nohup 是一个常用的工具,可以让命令在后台运行,即使你关闭终端也不会终止进程。

PYTHONPATH=src nohup uv run uvicorn app:app --host 0.0.0.0 --port 8000 &
  • nohup 会将命令的输出重定向到 nohup.out 文件中。
  • & 符号让命令在后台运行。
  • 你可以通过查看 nohup.out 文件来检查日志:cat nohup.out
  • 要停止进程,可以使用 ps aux | grep uvicorn 找到进程 ID (PID),然后用 kill <PID> 终止它。

通过如下指令,可以动态看服务器运行日志:

tail -f nohup.out

注意这无法让你重新后自动启动。

Grove Vision V2

前往 SenseCraft AI 网站,配置 Vision v2 的网路连接和 MQTT 配置信息。

  1. 访问 SenseCraft AI 平台:https://sensecraft.seeed.cc。登录后,点击“视觉工作空间”下的“Grove Vision AI V2”并选择连接
  2. 在弹出的窗口中,选取你希望连接的 Grove Vision V2 设备。

connect-grove-vision-v2

烧录模型

选择人脸检测并确认部署。

sensecraft-model-face-detection

双击模型,确认后,进行烧录部署。

配置网络信息

  1. 在主面板右侧点击网络配置
  2. 输入你需要连接的 Wi-Fi 信息和 MQTT Broker 服务器地址。比如这里我们会直接连接到 Home Assistant 上的 MQTT Broker,地址为 192.168.10.70
  3. 点击保存
important

务必记录这个客户端 ID(你也可以重新定义客户端 ID) 以便后续使用。

sensecraft-wifi-configuration

应用搭建

此时,你需要确保用到的接下来用到的 Grove Vision V2 连接到了你的 MQTT Broker 上。

在本项目中,我们会直接在 NodeRED 上搭建我们所需要的工作流。

拷贝本 NodeRED Flow 并导入到的 NodeRED 中。

ai-presence-nodered-flow

Node: Global Config

在节点 Global Config 代码配置项中:

flow.set('hailo_host', '192.168.10.179');
flow.set('hailo_port', '8000');

请将 192.168.10.179 编辑为你的 Hailo 设备所在的 IP 地址。


绿色的 Grove Vision V2 的节点会单独对应一个设备,不能支持对多个 V2 设备的接入,但可以复制多个 Grove Vision AI v2 节点,并注意同时复制前后的处理节点。

修改如下的 Inject 节点中的 msg.topic 为前面要你记录的客户端 ID:

  • Start
  • Set Camera Resolution

修改 Start 的 inject 节点中的 msg.topic 为前面要你记录的客户端 ID。

vision-v2-start-id

然后点击 Deploy (全部署模式)。

nodered-deploy

点击 Start 后,你就可以在右边侧边栏中的调试窗口中,看到是否有用户被检测到的消息。

ai-presence-start-initial

录入人脸

但是,此时由于还没有录入人脸信息,所以你需要将摄像头 Vision v2, 对着需要被识别、认证的人的脸,进行录入步骤。

首先,编辑 Face Enroll 这个 inject 节点。

msg.payload

{"name":"Jane Smith","action":"start","collection":"office_entrance"}

这里有两个参数需要根据你的偏好来进行修改:

  • name,录入人脸用户的名字
  • collection,在数据库中位于的集合位置
nodered-face-enroll-env

msg.topic

access/enroll/grove_vision_ai_v2_eb9e4d18

修改 grove_vision_ai_v2_eb9e4d18 为你实际 Vision v2 的设备客户端 ID

对着需要录入的人脸,然后点击 Face Enroll,等待 10 秒钟后,你就会发现它是识别到你了。

如下是一个示例操作:

加载中...

接入 Home Assistant

在此章节,会将外部的身份验证事件(如本仓库中的人脸识别)接入Home Assistant,实现一个"刷脸开机,倒计时关机"的自动化应用场景。

  • 自动识别触发:当系统检测到授权用户时,自动开启设备,并重新计时。
  • 定时管理:设备会在使用时间到期后自动关闭,确保安全和节能。
  • 灵活计时:默认使用时长为15分钟,可根据需要自由调整。
  • 实时状态显示:在控制面板上实时查看剩余使用时间。
  • 管理员功能:管理员可通过专属控制按钮手动延长使用时间、暂停或终止设备运行。

你可以根据这个仓库下的内容进行开展: HA_CountDown_Control

1
复制蓝图文件

复制项目中的 blueprints/automation/countdown_control.yaml 内容。

如果没有 File editor,请前往 设置 -> 加载项 (Settings - Addons) 中的商店进行下载。

通过 File editor 导航到 /blueprints/automation/ 路径下。

创建一个名为 countdown_control.yaml 的文件,并将拷贝的内容粘贴进去。

ha-blueprints-create

完成后,请重启 Home Assistant,或者在开发者工具中选择重载自动化,以便让 HA 识别新的蓝图。

2
创建 Timer 助手

这是倒计时的核心。

  1. 前往 设置 -> 设备与服务 -> 辅助元素(Helper) 或者访问 http://homeassistant.local:8123/config/helpers
  2. 点击 创建辅助元素,然后选择 计时器 (Timer)
  3. 命名:给它一个清晰的名字,例如 人脸识别授权计时器。其实体ID将自动生成(例如 timer.face_auth_timer),请记下这个实体ID
  4. 其他选项(图标、恢复)可留空,直接点击 创建

ha-timer-created

3
基于蓝图创建自动化
  1. 前往 设置 -> 自动化与场景 -> 蓝图 或者访问 http://homeassistant.local:8123/config/blueprint/dashboard
  2. 找到名为 Robust Countdown Control (MQTT triggered) 的蓝图,点击 创建自动化

blueprint-create-automation 3. 配置自动化:

  • MQTT Topic:填写您的人脸识别系统发布成功消息的主题(默认为 access/verify)。
  • Target Device:点击选择实体,选择您想要控制的设备,例如一个 switch.smart_plug
  • Timer Helper:点击选择实体,选择您在第2步中创建的那个计时器助手
  • Duration (minutes):根据需要设置授权时长,默认为15分钟。
  1. 点击 保存(可以采用默认的名称进行脚本保存)。

blueprint-create-automation

4
添加脚本配置

为了便于系统识别到认证的人之后,可以直接延时授权时间,此项目包含一个用于"+"5分钟"功能的脚本。请将 scripts/timer_controls.yaml 文件中的内容添加到您 Home Assistant 的脚本配置中。这通常意味着将其内容复制粘贴到您的 scripts.yaml 文件里。

ha-script-5-mins

重要:添加后,请务必将脚本中所有的 timer.your_timer_entity_id 替换为您在第2步中创建的计时器的真实实体ID

配置完成后,请在开发者工具中重载脚本或重启 Home Assistant。

5
添加Lovelace仪表盘视图
  1. 打开您想要添加监控卡片的仪表盘。
  2. 点击右上角的 三个点 -> 编辑仪表盘
  3. 点击右下角的 "+" 按钮添加一个新视图,或在现有视图中点击 "添加卡片"
  4. 如果您想快速搭建,可以进入 原始配置编辑器,将dashboards/countdown_example.yaml中的内容复制进去。
  5. 重要:在卡片配置中,您需要修改以下占位符:
    • 将所有 timer.your_timer_entity_id 替换为您在第2步中创建的计时器的真实实体ID
    • YOUR_USER_ID_HERE 替换为您自己的管理员用户ID,以确保控制按钮对您可见。

测试

现在,通过 MQTT 向您配置的主题发布一条消息,例如:

  • Topic: access/verify
  • Payload: {"result": true, "user": "test"}

您应该能在 HA 的仪表盘上看到倒计时开始,并且您选择控制的设备会自动开启。等待倒计时结束后,设备会自动关闭。

Loading Comments...