基于FireBeetle 2 ESP32-C5实现HuskylensV2人脸检测
本帖最后由 星星老师 于 2025-10-10 14:50 编辑前言FireBeetle 2 ESP32-C5 是一款搭载乐鑫 ESP32-C5 模组的低功耗 IoT 开发板,面向智能家居和广泛物联网场景,集高性能计算、多协议支持与智能电源管理于一体。
HuskylensV2是DFRobot推出的一款集成了多种AI视觉算法的智能传感器,支持人脸识别、物体追踪、手势识别等功能。本文将详细介绍如何在Arduino IDE中配置DFRobot_User_HuskylensV2库,并实现与HuskylensV2的连接及人脸检测功能。
一、环境准备
1. 硬件清单- HuskylensV2 AI视觉传感器
- Arduino兼容开发板(本文以FireBeetle 2 ESP32-C5为例)
- 杜邦线若干
- USB数据线
2. 软件环境- Arduino IDE(建议版本1.8.19及以上)
- DFRobot_User_HuskylensV2库
- 对应开发板的核心支持包(如ESP32-C5需要安装ESP32核心)
二、库文件安装
1. 下载库文件首先,将所需要的库文件准备好,下载DFRobot_User_HuskylensV2库文件
2. 安装库到Arduino然后,复制到 默认文件夹:C:\Users\XXX\Documents\Arduino\libraries目录下
三、硬件连接
HuskylensV2支持I2C和UART两种通信方式,本文分别介绍两种连接方法:
1. I2C通信连接(推荐)| HuskylensV2 | ESP32-C5 |
|-------------|----------|
| VCC | 3.3V |
| GND | GND |
| SDA | 9(可自定义) |
| SCL | 10(可自定义) |
2. UART通信连接| HuskylensV2 | ESP32-C5 |
|-------------|----------|
| VCC | 3.3V |
| GND | GND |
| TX | 11(RX,可自定义) |
| RX | 12(TX,可自定义) |
注意:HuskylensV2的工作电压为3.3V,请勿连接5V电源,以免损坏设备四、示例代码实现
1. I2C通信方式示例```cpp
#include <DFRobot_HuskylensV2.h>
#include <Wire.h>
// 初始化HuskylensV2对象
HuskylensV2 huskylens;
void setup() {
Serial.begin(115200);
// 初始化I2C通信(SDA=9, SCL=10,可根据实际接线修改)
Wire.begin(9, 10);
// 初始化Huskylens设备
while (!huskylens.begin(Wire)) {
Serial.println("Failed to connect to Huskylens! Please check the connection.");
delay(1000);
}
Serial.println("Connected to Huskylens successfully!");
// 切换到人脸识别算法
if (huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION)) {
Serial.println("Switched to Face Recognition mode");
} else {
Serial.println("Failed to switch algorithm");
}
}
void loop() {
// 获取识别结果
int8_t resultCount = huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
if (resultCount > 0) {
Serial.print("Detected ");
Serial.print(resultCount);
Serial.println(" faces:");
// 遍历所有结果
for (int i = 0; i < resultCount; i++) {
Result* face = huskylens.getCachedResultByIndex(ALGORITHM_FACE_RECOGNITION, i);
if (face) {
Serial.print("Face ");
Serial.print(i + 1);
Serial.print(": ID=");
Serial.print(face->ID);
Serial.print(", Center=(");
Serial.print(face->xCenter);
Serial.print(", ");
Serial.print(face->yCenter);
Serial.print("), Size=(");
Serial.print(face->width);
Serial.print("x");
Serial.print(face->height);
Serial.println(")");
}
}
} else if (resultCount == 0) {
Serial.println("No faces detected");
} else {
Serial.println("Failed to get results");
}
delay(500); // 500ms刷新一次
}
```
2. UART通信方式
示例
```cpp
#include <DFRobot_HuskylensV2.h>
#include <HardwareSerial.h>
// 定义硬件串口
HardwareSerial huskySerial(2); // 使用UART2
HuskylensV2 huskylens;
void setup() {
Serial.begin(115200);
// 初始化串口通信(波特率115200,RX=12, TX=11)
huskySerial.begin(115200, SERIAL_8N1, 12, 11);
// 初始化Huskylens设备
while (!huskylens.begin(huskySerial)) {
Serial.println("Failed to connect to Huskylens! Please check the connection.");
delay(1000);
}
Serial.println("Connected to Huskylens successfully!");
// 切换到人脸识别算法
if (huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION)) {
Serial.println("Switched to Face Recognition mode");
} else {
Serial.println("Failed to switch algorithm");
}
}
void loop() {
// 获取识别结果(与I2C版本代码相同)
int8_t resultCount = huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
if (resultCount > 0) {
Serial.print("Detected ");
Serial.print(resultCount);
Serial.println(" faces:");
for (int i = 0; i < resultCount; i++) {
Result* face = huskylens.getCachedResultByIndex(ALGORITHM_FACE_RECOGNITION, i);
if (face) {
Serial.print("Face ");
Serial.print(i + 1);
Serial.print(": ID=");
Serial.print(face->ID);
Serial.print(", Center=(");
Serial.print(face->xCenter);
Serial.print(", ");
Serial.print(face->yCenter);
Serial.print("), Size=(");
Serial.print(face->width);
Serial.print("x");
Serial.print(face->height);
Serial.println(")");
}
}
} else if (resultCount == 0) {
Serial.println("No faces detected");
} else {
Serial.println("Failed to get results");
}
delay(500);
}
```
五、代码解析
1. 库初始化
- 通过`HuskylensV2 huskylens;`创建对象
- 根据通信方式选择`begin(Wire)`(I2C)或`begin(Serial)`(UART)进行初始化
2. 算法切换
- 使用`switchAlgorithm(ALGORITHM_FACE_RECOGNITION)`切换到人脸识别模式
- 库支持多种算法,如`ALGORITHM_OBJECT_TRACKING`(物体追踪)、`ALGORITHM_HAND_RECOGNITION`(手势识别)等
3. 结果获取
- `getResult()`:获取检测到的目标数量
- `getCachedResultByIndex()`:通过索引获取具体目标信息
- 每个目标信息包含ID、中心坐标、宽高尺寸等参数
六、运行结果
成功运行后,串口监视器将输出类似以下信息:
- `ID=0`表示未学习过的人脸,可通过`learn()`函数进行人脸学习并分配唯一ID
- `Center`为目标在画面中的中心坐标
- `Size`为目标的宽高尺寸,可反映目标与镜头的距离
七、常见问题解决
1. 连接失败
- 检查接线是否正确,确保电源电压为3.3V
- 确认通信引脚是否与代码中一致
- 尝试更换通信方式(I2C和UART互换测试)
2. CPU锁定错误(CPU_LOCKUP)
- 通常是I2C通信冲突,可尝试修改I2C引脚或降低通信频率
- 建议改用UART通信方式,稳定性更高
3. 识别结果不稳定
- 确保光线充足,避免逆光环境
- 调整Huskylens与识别目标的距离(建议50-150cm)
结语
通过本文介绍的方法,我们可以快速实现HuskylensV2与Arduino开发板的连接及人脸检测功能。DFRobot_User_HuskylensV2库封装了复杂的通信协议和算法逻辑,使开发者能够专注于应用场景的实现。除了人脸识别,该库还支持多种其他视觉算法,读者可根据实际需求进行扩展开发。
		页: 
[1]