2025-10-10 14:50:08 [显示全部楼层]
20浏览
查看: 20|回复: 0

[ESP8266/ESP32] 基于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的连接及人脸检测功能。
基于FireBeetle 2 ESP32-C5实现HuskylensV2人脸检测图1

一、环境准备
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目录下
基于FireBeetle 2 ESP32-C5实现HuskylensV2人脸检测图2

三、硬件连接
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、中心坐标、宽高尺寸等参数




六、运行结果
基于FireBeetle 2 ESP32-C5实现HuskylensV2人脸检测图4
成功运行后,串口监视器将输出类似以下信息:
基于FireBeetle 2 ESP32-C5实现HuskylensV2人脸检测图3

- `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库封装了复杂的通信协议和算法逻辑,使开发者能够专注于应用场景的实现。除了人脸识别,该库还支持多种其他视觉算法,读者可根据实际需求进行扩展开发。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail