6、测试实验代码
- /*【花雕动手做】AI 视觉传感器 HUSKYLENS 2 之识别人脸输出数据并控制LED模块
- * 使用平台:MindPlus
- * 主控板:Arduino Uno
- * 功能说明:
- * 本程序使用 HUSKYLENS 2 AI 视觉传感器识别画面中的人脸,
- * 并输出人脸的相关数据(ID、尺寸、中心坐标),
- * 根据识别到的人脸 ID 控制 LED 灯的闪烁或关闭状态。
- */
-
- #include "DFRobot_HuskylensV2.h" // 引入 HUSKYLENS 2 的驱动库,用于控制 AI 视觉模块
-
- // 创建 HUSKYLENS 设备对象
- HuskylensV2 huskylens;
-
- // 初始化函数
- void setup() {
- Serial.begin(9600); // 初始化串口通信,波特率为 9600
- Wire.begin(); // 初始化 I2C 通信,用于与 HUSKYLENS 模块连接
-
- // 持续尝试连接 HUSKYLENS,直到连接成功
- while (!huskylens.begin(Wire)) {
- delay(100); // 每次尝试之间延迟 100 毫秒
- }
-
- // 输出初始化成功提示信息
- Serial.println("HUSKYLENS 2 启动成功");
- Serial.println("识别人脸来控制执行器模块");
-
- // 设置数字引脚 13 为输出模式,用于控制 LED 灯
- pinMode(13, OUTPUT);
- }
-
- // 主循环函数
- void loop() {
- // 请求 HUSKYLENS 执行人脸识别算法,处理当前画面
- huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
-
- // 判断是否有识别结果可用
- if (huskylens.available(ALGORITHM_FACE_RECOGNITION)) {
- // 输出当前画面中识别到的人脸数量
- Serial.println("画面中的人脸总数为:" + String(huskylens.getCachedResultNum(ALGORITHM_FACE_RECOGNITION)));
-
- // 输出当前画面中人脸的详细信息(以中心人脸为例)
- Serial.println("人脸ID:" + String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)));
- Serial.println("人脸宽:" + String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, width)));
- Serial.println("人脸长:" + String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, height)));
- Serial.println("人脸中心点X坐标:" + String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, xCenter)));
- Serial.println("人脸中心点Y坐标:" + String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, yCenter)));
- }
-
- // 如果识别到 ID 为 2 的人脸,执行 LED 快闪
- if (huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 2) != NULL) {
- Serial.println(RET_ITEM_STR(huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 2), Result, name) + "LED快闪");
- digitalWrite(13, LOW); // 熄灭 LED
- delay(100); // 延迟 100 毫秒
- digitalWrite(13, HIGH); // 点亮 LED
- delay(200); // 延迟 200 毫秒
- }
-
- // 如果识别到 ID 为 5 的人脸,关闭 LED 灯
- if (huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 5) != NULL) {
- Serial.println(RET_ITEM_STR(huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 5), Result, name) + "LED灯灭");
- digitalWrite(13, LOW); // 熄灭 LED
- delay(1000); // 延迟 1 秒
- }
-
- // 每次识别后延迟 3 秒,控制识别频率
- delay(3000);
- }
复制代码
7、实际测试的代码解读
该程序使用 HUSKYLENS 2 AI 视觉传感器进行人脸识别,并输出识别到的人脸数据(如 ID、尺寸、中心坐标),同时根据特定人脸 ID 控制 LED 灯的闪烁或关闭。适用于智能门禁、人脸交互提示、身份识别等场景。
模块与硬件说明
HUSKYLENS 2:AI 视觉传感器,支持人脸识别、物体识别等功能。
Arduino Uno:主控板,用于处理识别结果并控制执行器。
LED 灯(引脚 13):作为执行器,根据识别结果进行闪烁或关闭。
(1)初始化部分 setup()
cpp
- Serial.begin(9600); // 初始化串口通信
-
- Wire.begin(); // 初始化 I2C 通信
-
- while (!huskylens.begin(Wire)) {
-
- delay(100); // 持续尝试连接 HUSKYLENS
-
- }
-
- Serial.println("HUSKYLENS 2 启动成功");
-
- Serial.println("识别人脸来控制执行器模块");
-
- pinMode(13, OUTPUT); // 设置 LED 控制引脚为输出
复制代码
建立通信并初始化 HUSKYLENS。
设置 LED 控制引脚。
(2)主循环部分 loop()
a. 获取人脸识别结果
cpp
- huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
复制代码
请求 HUSKYLENS 执行人脸识别算法。
cpp
- if (huskylens.available(ALGORITHM_FACE_RECOGNITION)) {
复制代码
判断是否有识别结果。
b. 输出人脸数据
cpp
- Serial.println("画面中的人脸总数为:" + String(huskylens.getCachedResultNum(ALGORITHM_FACE_RECOGNITION)));
-
- Serial.println("人脸ID:" + String(...));
-
- Serial.println("人脸宽:" + String(...));
-
- Serial.println("人脸长:" + String(...));
-
- Serial.println("人脸中心点X坐标:" + String(...));
-
- Serial.println("人脸中心点Y坐标:" + String(...));
复制代码
输出当前画面中识别到的人脸数量。
输出中心人脸的 ID、尺寸、中心坐标等详细信息。
c. 控制 LED 灯逻辑
ID = 2:LED 快闪
cpp
- if (huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 2) != NULL) {
-
- Serial.println(... + "LED快闪");
-
- digitalWrite(13, LOW);
-
- delay(100);
-
- digitalWrite(13, HIGH);
-
- delay(200);
-
- }
复制代码
快速闪烁 LED 灯,表示识别到 ID 为 2 的人脸。
ID = 5:LED 熄灭
cpp
- if (huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 5) != NULL) {
-
- Serial.println(... + "LED灯灭");
-
- digitalWrite(13, LOW);
-
- delay(1000);
-
- }
复制代码
熄灭 LED 灯,表示识别到 ID 为 5 的人脸。
(3)节奏控制
cpp
复制代码
每次识别后延迟 3 秒,避免频繁刷新。
|