楼主: 清麦
88 0

【花雕动手做】HUSKYLENS 2 AI视觉传感器之识别人脸输出相关数据 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-6-29
最后登录
2018-6-29

楼主
清麦 发表于 2025-11-26 07:00:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

一、核心硬件与软件平台介绍

HUSKYLENS 2(二哈识图2)是DFRobot推出的全新AI视觉传感器,内置具备6TOPS算力的Kendryte K230双核RISC-V处理器,配备1GB LPDDR4内存和8GB存储空间。该设备支持人脸识别、物体检测、姿态估计等超过20种预设AI模型,并允许用户通过自定义训练部署专属识别模型。

其硬件配置包含200万像素摄像头、2.4英寸触摸显示屏、可更换镜头模组(支持显微与夜视功能)以及RGB补光灯。设备提供UART/I2C接口,可轻松连接Arduino、树莓派等主流开发板,实现图像实时传输与多模态交互。内置MCP服务打通本地视觉处理与大模型能力,例如在识别餐食图片后自动生成营养建议;同时“模型广场”提供车牌识别、跌倒监测等垂直场景下的即用解决方案。作为教育领域的重要工具,HUSKYLENS 2已融入《中小学人工智能通识教育指南》课程体系,配合Mind+图形化编程环境,显著降低AI学习门槛,广泛应用于创客教育与STEAM实践项目中。

行空板 K10 是一款面向中小学信息科技教学及创客项目设计的国产AIoT开发板,采用ESP32-S3为主控芯片,高度集成2.8英寸全彩LCD屏、摄像头、双麦克风与扬声器、Wi-Fi/蓝牙模块,以及温湿度、光线强度、加速度等多种传感器。无需外接配件即可实现离线语音识别(支持约200词库)、人脸识别、二维码扫描和物联网联动等功能。

它兼容Mind+图形化编程与MicroPython代码编程,兼顾初学者的操作便捷性与高级用户的扩展需求。丰富的扩展接口便于连接各类外部传感器与执行机构,适合开展AI应用与物联网创新项目,是一款性价比高且功能全面的科创实践平台。

Mind+ 是由DFRobot旗下蘑菇云科创教育团队自主研发的青少年编程软件,拥有完全自主知识产权。软件兼容Scratch 3.0操作逻辑,既支持零基础用户使用积木式拖拽编程,也支持进阶者切换至Python/C/C++进行代码编写,且图形化积木可自动转换为对应文本代码,助力学习者平滑过渡到专业编程阶段。

该平台适配行空板M10/K10、Arduino、micro:bit等主流开源硬件,兼容上百种电子模块,集成图像识别、语音识别等AI能力及物联网开发功能。提供实时运行、程序烧录脱机执行等多种模式,并配套大量教学案例,适用于校内外编程教学、科技创新项目与竞赛场景,是一款兼具易用性与拓展性的综合型科创教育工具。

二、设备连接方案

所需材料清单:

  • 行空板K10 × 1
  • HUSKYLENS 2 × 1
  • USB数据线 × 2
  • 4Pin连接线(或杜邦线) × 1

首先,使用一条USB数据线将电脑与行空板K10连接,用于程序上传与调试。接着,利用一根4Pin白色硅胶线将行空板K10与HUSKYLENS 2进行通信对接。由于HUSKYLENS 2对供电要求较高,建议额外使用第二条USB数据线将其Type-C接口连接至独立电源(如USB电源适配器或电脑USB口),以确保稳定运行。

三、人脸识别技术解析

人脸识别(Face Recognition)是一种融合计算机视觉与人工智能的技术,旨在通过摄像头或图像分析系统,自动检测画面中的人脸区域,并进一步识别个体身份、分析面部特征或判断情绪状态。这项技术赋予设备“认出你”的能力,是身份验证、安防监控、智能人机交互等领域的重要支撑。

(1)基本定义

人脸识别是指:基于人脸图像中的几何结构、纹理细节或深度信息,识别个体身份或提取面部特征的过程。它不仅能够判断“是否存在人脸”,更能精确识别“这是谁”。

(2)技术流程

  1. 人脸检测:在输入图像中定位人脸所在区域。
  2. 特征提取:分析眼睛、鼻子、嘴巴等关键点的位置关系与比例特征。
  3. 特征编码:将提取的特征转化为数字向量(如常见的128维特征向量)。
  4. 身份比对:将生成的特征向量与数据库中已注册的人脸数据进行匹配。
  5. 结果输出:返回识别结果,包括姓名、编号、相似度分数等信息。

(3)与其他技术的区别

(4)典型应用场景

  • 门禁系统:实现刷脸开门或考勤打卡
  • 手机解锁与支付身份验证
  • 医疗系统中用于患者身份确认
  • 机场安检与边境出入境核验
  • 教育场景下统计学生出勤情况或注意力分析
  • 社交或游戏平台实现个性化互动体验

(5)常用算法与模型

(6)技术优势与挑战

(7)实际应用示意图

四、【花雕动手做】HUSKYLENS 2 AI视觉传感器实现人脸识别并输出数据

当启用HUSKYLENS 2的人脸识别功能时,只要有人脸进入摄像头视野,设备即可自动检测并在屏幕上框选出人脸区域,同时获取当前画面中的人脸总数及相关详细信息。

系统可读取指定人脸的五官位置与几何参数,具体可获取的数据包括:人脸ID、人脸名称、人脸宽度与高度、人脸中心点X/Y坐标、左眼与右眼的X/Y坐标、左嘴角与右嘴角的X/Y坐标,以及鼻子的X/Y坐标位置。

1、实测样本展示

2、实验测试代码

(此处原内容未提供具体代码,保留标题结构以便后续补充)

/*【花雕动手做】HUSKYLENS 2 AI视觉传感器实现人脸识别并输出对应数据
* 开发环境:MindPlus
* 硬件平台:esp32s3bit
*/

// 包含所需库文件
#include "DFRobot_HuskylensV2.h"   // HUSKYLENS视觉识别模块驱动库
#include "unihiker_k10.h"          // UNIHIKER主控开发板支持库

// 实例化对象
UNIHIKER_K10 k10;                 // 创建UNIHIKER设备对象
HuskylensV2  huskylens;           // 创建HUSKYLENS传感器实例
uint8_t      screen_dir = 2;      // 设定屏幕显示方向为横向(值为2)

// 系统初始化函数
void setup() {
  k10.begin();                    // 启动并初始化UNIHIKER开发板
  Wire.begin();                   // 初始化I2C通信接口

  // 循环尝试连接HUSKYLENS,直到成功为止
  while (!huskylens.begin(Wire)) {
    delay(100);                   // 每次失败后延迟100毫秒重试
  }

  k10.initScreen(screen_dir);     // 配置屏幕方向
  k10.creatCanvas();              // 建立绘图画布用于界面显示

  // 切换HUSKYLENS至人脸识别算法模式
  huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION);

  // 在画布上绘制标题信息(蓝色字体,位于第2行)
  k10.canvas->canvasText("识别人脸数据", 2, 0x0000FF);
}

// 主循环函数
void loop() {
  // 请求获取当前人脸识别结果
  huskylens.getResult(ALGORITHM_FACE_RECOGNITION);

  // 判断是否检测到有效的人脸数据
  if (huskylens.available(ALGORITHM_FACE_RECOGNITION)) {

    // 显示最接近画面中心位置的人脸ID(红色文字,第4行)
    k10.canvas->canvasText(
      String("靠中心的人脸ID: ") + 
      String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)),
      4, 0xFF0000
    );

    // 输出当前识别到的人脸总数(红色文字,第5行)
    k10.canvas->canvasText(
      String("人脸总数: ") + 
      String(huskylens.getCachedResultNum(ALGORITHM_FACE_RECOGNITION)),
      5, 0xFF0000
    );

    // 展示中心人脸的宽度与高度信息(蓝色文字,第6行)
    k10.canvas->canvasText(
      String("人脸宽高: ") + 
      String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, width)) +
      String(",") +
      String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, height)),
      6, 0x0000FF
    );

    // 显示中心人脸在画面中的坐标位置(蓝色文字,第7行)
    k10.canvas->canvasText(
      String("人脸坐标: ") + 
      String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, xCenter)) +
      String(",") +
      String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, yCenter)),
      7, 0x0000FF
    );

    // 再次显示人脸坐标信息(蓝色文字,第8行)——可能存在重复输出
    k10.canvas->canvasText(
      String("人脸坐标: ") + 
      String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, xCenter)) +
      String(",") +
      String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, yCenter)),
      8, 0x0000FF
    );
  }
}
// 主循环中的核心逻辑处理
void loop() {
    // 获取当前人脸识别结果
    huskylens.getResult(ALGORITHM_FACE_RECOGNITION);

    // 判断是否检测到有效的人脸数据
    if (huskylens.available(ALGORITHM_FACE_RECOGNITION)) {

        // 统计当前画面中识别人脸的总数
        int faceCount = huskylens.getReturnBoxes(ALGORITHM_FACE_RECOGNITION);
        
        // 显示人脸总数信息(蓝色文字,第3行)
        k10.canvas->canvasText((String("人脸数量: ") + String(faceCount)), 3, 0x0000FF);

        // 获取位于画面中心区域的人脸ID
        int centerFaceId = RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID);

        // 显示中心人脸的唯一标识(蓝色文字,第4行)
        k10.canvas->canvasText((String("中心人脸ID: ") + String(centerFaceId)), 4, 0x0000FF);

        // 获取并显示中心人脸在画面中的位置坐标(X, Y)
        int xCenter = RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, xCenter);
        int yCenter = RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, yCenter);

        // 显示中心点坐标信息(蓝色文字,第8行)
        k10.canvas->canvasText((String("中心坐标: ") +
            String((String(xCenter) + String(",") + String(yCenter))))),
            8, 0x0000FF);

        // 提取左眼位置数据
        int leye_x = RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), FaceResult, leye_x);
        int leye_y = RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), FaceResult, leye_y);

        // 在屏幕上绘制左眼坐标提示(蓝色文字,第9行)
        k10.canvas->canvasText((String("左眼坐标: ") +
            String((String(leye_x) + String(",") + String(leye_y))))),
            9, 0x0000FF);

        // 获取右眼位置参数
        int reye_x = RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), FaceResult, reye_x);
        int reye_y = RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), FaceResult, reye_y);

        // 输出右眼坐标至屏幕指定位置(蓝色文字,第10行)
        k10.canvas->canvasText((String("右眼坐标: ") +
            String((String(reye_x) + String(",") + String(reye_y))))),
            10, 0x0000FF);
    }

    // 刷新屏幕以更新显示内容
    k10.canvas->updateCanvas();

    // 延迟50毫秒,用于控制画面刷新频率,避免过快重绘
    delay(50);
}

代码结构解析

头文件引入与对象实例化

#include "unihiker_k10.h"           // 引入UNIHIKER开发板底层控制库
#include "DFRobot_HuskylensV2.h"    // 包含HUSKYLENS视觉传感器驱动支持

HuskylensV2 huskylens;              // 创建AI视觉识别模块对象
UNIHIKER_K10 k10;                   // 实例化开发板主控操作对象
uint8_t screen_dir = 2;             // 设定屏幕显示方向为横向模式(值为2)

系统初始化配置(setup函数)

void setup() {
    k10.begin();                    // 启动并初始化开发板硬件资源
    Wire.begin();                   // 初始化I2C通信接口,用于连接外部设备

    // 循环尝试连接HUSKYLENS传感器,确保成功建立通信
    while (!huskylens.begin(Wire)) {
        delay(100);                 // 若连接失败,则等待100ms后重试
    }

    // 屏幕相关初始化设置
    k10.initScreen(screen_dir);     // 根据设定的方向初始化显示屏
    k10.creatCanvas();              // 创建绘图用的画布环境

    // 配置HUSKYLENS运行算法类型
    huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION);  // 切换至人脸识别算法模式

    // 在屏幕上打印标题信息
    k10.canvas->canvasText("识别人脸数据", 2, 0x0000FF);  // 使用蓝色字体显示于第2行
}

主循环功能说明

loop()函数中,程序持续从HUSKYLENS获取最新的人脸识别结果,并判断是否有有效数据返回。当检测到人脸时,执行一系列数据显示操作。

关键数据获取详解:
  • 中心人脸ID提取
    RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)
    此语句用于获取画面中最接近中心位置的人脸唯一编号,可用于区分多个不同个体。
  • 识别人脸数量统计 通过调用getReturnBoxes(ALGORITHM_FACE_RECOGNITION)方法,获得当前帧中被检测出的人脸总数,反映场景内人数。

返回当前画面中检测到的人脸总数,可通过调用 huskylens.getCachedResultNum(ALGORITHM_FACE_RECOGNITION) 实现。

人脸尺寸信息

获取检测到的人脸在图像中的宽度与高度:

RET_ITEM_NUM(..., Result, width)   // 人脸宽度
RET_ITEM_NUM(..., Result, height)  // 人脸高度

该数据反映人脸在画面中的实际大小,可用于估算人脸距离摄像头的远近,尺寸越大通常表示距离越近。

人脸位置坐标

通过以下接口获取人脸中心点在画面中的位置:

RET_ITEM_NUM(..., Result, xCenter)  // 中心点X坐标
RET_ITEM_NUM(..., Result, yCenter)  // 中心点Y坐标

用于定位人脸在图像中的具体位置,坐标系原点一般位于画面左上角,向右为X轴正方向,向下为Y轴正方向。

眼部特征点坐标

可获取左右眼的精确位置信息:

RET_ITEM_NUM(..., FaceResult, leye_x/leye_y)  // 左眼坐标
RET_ITEM_NUM(..., FaceResult, reye_x/reye_y)  // 右眼坐标

实现对眼睛位置的精准识别,支持视线追踪、眨眼检测等高级视觉应用功能。

技术特性

  • 实时性:每50ms刷新一次数据,确保信息更新及时;
  • 多维度输出:同时提供人脸ID、数量、尺寸、位置及特征点等多项参数;
  • 图形化显示:识别结果可在UNIHIKER屏幕中直观呈现;
  • 容错能力强:初始化过程具备重试机制,提升系统运行稳定性。

典型应用场景

  • 基于人脸识别的门禁控制系统
  • 具备追踪能力的智能摄像头
  • 人机交互式界面设计
  • 智能安防与监控系统
  • 教学用途的演示实验项目

4、MInd+图形化编程测试实验

5、实验场景图展示

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:KYLE 相关数据 lens 关数据 Sky

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

本版微信群
扫码
拉您进交流群
GMT+8, 2026-2-7 16:34