返回首页

ESP32-P4 边缘 AI 智能门锁

从模型训练到 FreeRTOS 多任务调度的完整边缘 AI 系统

ESP32-P4 esp-dl MobileNetV1 FreeRTOS MQTT LVGL 语音交互
ESP32-P4 智能门锁系统
ESP32-P4 边缘 AI 智能门锁实物图

项目概述

本项目基于乐鑫最新推出的 ESP32-P4 芯片,设计并实现了一套完整的边缘 AI 智能门锁系统。系统集成了人脸检测、活体检测、人脸识别三大核心 AI 功能,同时支持 WiFi 联网、MQTT 智能家居控制、语音交互等多种特性,实现了从端侧推理到云端联动的完整闭环。

我在项目中主要负责以下工作:

  • 活体检测模型的训练与量化部署(MobileNetV1 ×0.5,FP32→INT8)
  • 数据增强策略设计,定向模拟 ESP32-P4 ISP 的 AWB 漂移问题
  • FreeRTOS 多任务调度框架的搭建与优化
  • WiFi/MQTT 网络模块的开发与调试
  • 系统集成测试与性能调优

核心特性

功能 实现方式 技术指标
人脸检测 esp-dl CNN 模型 INT8 量化,实时检测
活体检测 MobileNetV1 ×0.5 ~160KB 模型,~40ms 推理
人脸识别 esp-dl 特征提取 + 余弦匹配 128 维特征向量
语音交互 WakeNet + 流式 ASR + LLM + TTS ESP-SR + 火山引擎
智能家居 MQTT 协议 自建 Broker,JSON 上报
远程监控 JPEG 硬件编码 + HTTP POST 10 FPS 实时传输

3D 外壳设计

门锁外壳采用 3D 打印技术制作,经过多次迭代优化,实现了紧凑美观的外观设计。外壳内部预留了摄像头、显示屏、传感器等模块的安装位,确保所有组件能够稳固装配。

3D外壳设计
门锁 3D 外壳设计图

外壳设计要点:

  • 摄像头窗口:正面预留摄像头开口,确保人脸识别视野无遮挡
  • 显示屏嵌入:LCD 显示屏嵌入外壳,显示识别结果和状态信息
  • 散热设计:关键芯片位置预留散热通道,避免长时间运行过热
  • 安装便利:外壳支持壁挂安装,方便固定在门上

人脸识别模块

人脸识别是整个系统的核心功能之一。系统采用 esp-dl 框架进行端侧推理,通过 MIPI CSI 接口摄像头采集图像,经过人脸检测、活体检测、特征提取三个阶段,最终完成身份验证。

人脸识别模块
人脸识别模块工作流程

人脸识别流程详解:

  1. 图像采集:通过 MIPI CSI 接口摄像头获取 1024×600 RGB565 格式的原始图像
  2. 人脸检测:使用 esp-dl CNN 模型定位图像中的人脸区域,输出边界框坐标
  3. 活体检测:对检测到的人脸区域进行活体判断,防止照片/屏幕攻击
  4. 特征提取:提取 128 维人脸特征向量,与数据库中已注册的特征进行余弦相似度匹配
  5. 身份验证:当相似度超过阈值时,判定为已注册用户,触发开锁动作

活体检测模型训练

活体检测是防止照片、视频等攻击手段的关键环节。我们采用 MobileNetV1 ×0.5(宽度乘数 0.5)作为基础模型,该模型仅有约 37.6K 参数,INT8 量化后约 160KB,非常适合在资源受限的嵌入式设备上运行。

数据增强策略

在模型训练过程中,我们发现 ESP32-P4 的 ISP(图像信号处理器)会对图像产生特定的颜色偏移,特别是 AWB(自动白平衡)模块会导致 R/B 通道增益漂移。为了使模型在实际部署时具有更好的鲁棒性,我们设计了定向模拟 ISP 行为的数据增强策略:

增强方法 是否使用 原因说明
R 通道增益 ✅ 使用 AWB R_gain 漂移是确认的根因,需要定向模拟
B 通道增益 ✅ 使用 AWB B_gain 同步漂移,与 R 通道协同增强
Hue 色相旋转 ❌ 不使用 色相旋转 ≠ AWB 通道增益,机制不同
Saturation 饱和度 ❌ 不使用 ISP ACC 模块不活跃,无需模拟

量化部署流程

模型训练完成后,需要将 FP32 精度的模型量化为 INT8 格式,以适应 ESP32-P4 的硬件加速能力。整个流程如下:

FP32 PyTorch 训练
INT8 ESP-PPQ 量化
~160KB 模型大小
~40ms 单帧推理

WiFi 控制模块

系统集成了完整的 WiFi 连接管理功能,采用单例模式设计,支持 NVS Flash 持久化配置和自动断线重连。通过 WiFi 连接,门锁可以与云端 MQTT Broker 通信,实现远程控制和状态上报。

WiFi 控制模块
WiFi 控制模块界面展示

WiFi 模块主要功能:

  • 连接管理:支持 STA/AP 模式切换,自动保存已连接的 WiFi 配置
  • 状态监控:实时监控连接状态,支持断线自动重连
  • 安全认证:支持 WPA/WPA2/WPA3 等多种加密方式
  • NVS 存储:WiFi 配置持久化到 NVS Flash,重启后自动恢复

控制中枢

整个系统的控制中枢基于 FreeRTOS 实时操作系统构建,采用事件驱动的多任务架构。ESP32-P4 为双核 RISC-V 处理器,我们将不同类型的任务分配到不同核心,充分发挥硬件性能。

控制中枢
FreeRTOS 多任务调度架构

任务分配策略:

任务名称 运行核心 功能描述
WhoFetchNode Core 0 摄像头帧采集,负责从 MIPI CSI 接口获取图像数据
WhoDetect Core 1 人脸检测 CNN 推理,运行 esp-dl 量化模型
WhoRecognitionCore Core 1 人脸识别特征提取,计算 128 维特征向量
WhoFrameLCD Core 0 LCD 显示渲染,实时显示摄像头画面和识别结果
WhoRemoteMonitor Core 0 JPEG 编码 + HTTP 上传,实现远程监控功能
WiFi/MQTT Core 0 网络通信,处理 WiFi 连接和 MQTT 消息收发
VoiceCmd Core 0 语音唤醒 + ASR + LLM,处理语音交互功能

任务间通信机制:

  • FreeRTOS 队列:用于任务间的数据传递,如摄像头帧数据从采集任务传递到检测任务
  • 事件标志组:用于任务状态同步,如通知任务暂停、恢复或停止
  • 互斥锁:保护共享资源,如 LCD 显示缓冲区、MQTT 连接句柄等

通信记录与调试

在开发过程中,我们建立了完善的日志系统和通信记录机制,方便调试和问题定位。系统会记录所有的 MQTT 消息、识别结果、错误信息等,便于后期分析和优化。

通信记录
系统通信记录与调试日志

调试历程与经验总结:

版本 问题现象 根因分析 解决方案
V1 输出结果随机 ESP-PPQ 量化时 Softmax 索引交换 交换 data[0]/data[1] 顺序
V2 真人被误判为假 预处理对齐不一致 统一训练与推理的预处理流程
V2.2 距离变化导致识别漂移 ISP AWB 自动调节引起颜色偏移 采用亮度均值减法进行补偿
V5 鲁棒性显著提升 R/B 通道增益增强策略 定向模拟 AWB 漂移,增强泛化能力

关键教训

  • 每次只改一个变量:V2 版本同时修改了预处理和索引,导致真正根因被掩盖,浪费了大量调试时间
  • 增强要匹配硬件:ISP 不活跃的模块不需要增强,活跃的(如 AWB)要定向模拟,否则会引入噪声
  • 训练-推理一致性:裁剪方式、归一化方式必须完全一致,否则会导致模型在实际部署时性能下降

落地成果

~160KB 模型大小
~40ms 推理延迟
10FPS 远程监控帧率
双核 RISC-V 任务隔离

技术栈

  • 芯片: ESP32-P4(双核 RISC-V, 512KB SRAM)
  • 开发框架: ESP-IDF v5.5.3
  • AI 推理: esp-dl ~3.2.0
  • 活体模型: MobileNetV1 ×0.5, INT8 ~160KB
  • 任务框架: FreeRTOS(事件驱动 + 任务组管理)
  • 云服务: 火山引擎 ASR/LLM + 自建 MQTT Broker