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的连接及人脸检测功能。 ![]() 一、环境准备 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库封装了复杂的通信协议和算法逻辑,使开发者能够专注于应用场景的实现。除了人脸识别,该库还支持多种其他视觉算法,读者可根据实际需求进行扩展开发。 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed