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