一、相关知识点
1、HUSKYLENS 2(二哈识图2)是DFRobot推出的新一代AI视觉传感器,搭载6TOPS算力的Kendryte K230双核RISC-V芯片,集成1GB LPDDR4内存与8GB存储,支持人脸识别、物体检测、姿态估计等20余种预置AI模型,同时允许用户通过自训练模型部署实现定制化识别
。其硬件配置包括200万像素摄像头、2.4英寸触摸屏、可更换镜头模组(支持显微/夜视)及RGB补光灯,搭配UART/I2C接口可无缝连接Arduino、树莓派等开发板,实现实时图传与多模态交互。内置MCP服务打通本地视觉与大模型能力,例如识别午餐图片后可生成膳食建议,而模型广场提供车牌识别、跌倒检测等垂直领域即用型方案。作为教育利器,它已融入《中小学人工智能通识教育指南》课程体系,通过Mind+图形化编程工具降低AI开发门槛,助力创客教育与STEAM实践。

2、行空板 K10 是一款专为中小学信息科技教学和创客项目设计的国产 AIoT 开发板,以 ESP32-S3 为核心,高度集成 2.8 英寸全彩 LCD 屏、摄像头、双麦扬声器、WiFi 蓝牙模块及温湿度、光线、加速度等多种传感器,无需额外配件即可实现离线语音识别(支持 200 词库)、人脸识别、二维码读取、物联网联动等功能,支持 Mind + 图形化编程与 MicroPython 代码编程,兼顾入门便捷性与功能扩展性,丰富的扩展接口还能连接外部传感器、执行器,轻松落地 AI、物联网类创意项目,是编程学习与科创实践的高性价比选择。

3、Mind + 是 DFRobot 旗下蘑菇云科创教育团队研发的、拥有自主知识产权的国产青少年编程软件,它兼容 Scratch3.0,既支持零基础学习者拖拽图形化积木编程,也能切换至 Python/C/C++ 代码编程,且积木可自动转换为对应代码助力进阶学习,同时适配行空板M10\ K10、Arduino、micro:bit 等众多主流开源硬件与上百种电子模块,集成图像识别、语音识别等 AI 功能及物联网开发能力,还搭配实时交互、程序烧录脱机运行等模式与丰富教学案例,适配校内外编程教学、创客项目及竞赛等场景,是兼顾低入门门槛与高拓展性的科创教育工具。
二、硬件连接
准备材料
行空板K10 x 1
HUSKYLENS 2 x 1
USB数据线 x 2
4pin连接线(或杜邦线)x 1
准备一根USB数据线和一根4Pin白色硅胶线。使用USB数据线连接电脑与行空板K10,使用4Pin黑胶先连接行空板K10与HuskyLens 2,再使用额外的USB数据线n连接示意图如下连接HUSKYLENS 2的Type-C接口与电源,为HUSKYLENS 2进行额外供电。接线图可参考下图。



三、人脸识别(Face Recognition)是一种基于计算机视觉与人工智能的识别技术,其核心目标是:通过摄像头或图像分析系统,自动检测并识别图像中的人脸,并判断其身份、特征或情绪状态。人脸识别是让设备“认出你”的关键一步。它让设备具备“认出你”的能力,是身份验证、安全监控、智能交互等领域的重要技术支撑。
(1)人脸识别的基本定义
人脸识别是指:
利用人脸图像中的几何结构、纹理特征或深度信息,判断个体身份或进行特征分析。
它不仅识别“这是一个人脸”,更能判断“这是谁”。
(2)人脸识别的技术流程
人脸检测:在图像中定位人脸区域。
特征提取:分析眼睛、鼻子、嘴巴等关键点位置与比例。
特征编码:将人脸特征转换为向量或编码(如128维特征向量)。
身份比对:与数据库中的人脸进行匹配,判断是否为同一人。
结果输出:返回识别结果,如姓名、编号、相似度等。
(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 "unihiker_k10.h" // UNIHIKER开发板的库
#include "DFRobot_HuskylensV2.h" // HUSKYLENS视觉传感器的库
// 创建对象
HuskylensV2 huskylens; // HUSKYLENS传感器对象
UNIHIKER_K10 k10; // UNIHIKER开发板对象
uint8_t screen_dir=2; // 屏幕方向设置(2表示横向)
// 主程序开始
void setup() {
k10.begin(); // 初始化UNIHIKER开发板
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行
}
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((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, width))) +
String((String(",") +
String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, height)))))))),
6, 0x0000FF);
// 显示人脸中心坐标(蓝色文字,第7行)
k10.canvas->canvasText((String("人脸坐标: ") +
String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, xCenter))) +
String((String(",") +
String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, yCenter)))))))),
7, 0x0000FF);
// 重复显示人脸中心坐标(蓝色文字,第8行) - 可能是冗余代码
k10.canvas->canvasText((String("人脸坐标: ") +
String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, xCenter))) +
String((String(",") +
String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, yCenter)))))))),
8, 0x0000FF);
// 显示左眼坐标(蓝色文字,第9行)
k10.canvas->canvasText((String("左眼坐标: ") +
String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), FaceResult, leye_x))) +
String((String(",") +
String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), FaceResult, leye_y)))))))),
9, 0x0000FF);
// 显示右眼坐标(蓝色文字,第10行)
k10.canvas->canvasText((String("右眼坐标: ") +
String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), FaceResult, reye_x))) +
String((String(",") +
String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), FaceResult, reye_y)))))))),
10, 0x0000FF);
}
// 更新屏幕显示
k10.canvas->updateCanvas();
delay(50); // 延迟50ms,控制刷新频率
}3、解读代码的各个部分:
代码结构分析
1. 头文件引入和对象创建
cpp
#include "unihiker_k10.h" // UNIHIKER开发板控制库
#include "DFRobot_HuskylensV2.h" // HUSKYLENS传感器驱动库
HuskylensV2 huskylens; // AI视觉传感器对象
UNIHIKER_K10 k10; // 开发板控制对象
uint8_t screen_dir=2; // 屏幕方向(2=横向显示)
2. 初始化设置(setup函数)
cpp
void setup() {
k10.begin(); // 初始化开发板硬件
Wire.begin(); // 启动I2C通信
// 连接HUSKYLENS传感器(带重试机制)
while (!huskylens.begin(Wire)) {
delay(100); // 连接失败时等待重试
}
// 屏幕初始化
k10.initScreen(screen_dir); // 设置屏幕方向
k10.creatCanvas(); // 创建绘图画布
// 配置AI算法
huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION); // 切换为人脸识别模式
// 显示界面标题
k10.canvas->canvasText("识别人脸数据", 2, 0x0000FF); // 蓝色文字显示
}
3. 主循环(loop函数)核心逻辑
数据获取与检测判断
cpp
huskylens.getResult(ALGORITHM_FACE_RECOGNITION); // 获取人脸识别结果
if ((huskylens.available(ALGORITHM_FACE_RECOGNITION))) {
// 当检测到人脸时执行以下显示操作
}
显示的人脸信息详解:
① 中心人脸ID
cpp
RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)
获取最靠近画面中心的人脸的唯一标识符
用于区分不同的人脸
② 人脸数量统计
cpp
huskylens.getCachedResultNum(ALGORITHM_FACE_RECOGNITION)
返回当前画面中检测到的总人脸数
③ 人脸尺寸信息
cpp
RET_ITEM_NUM(..., Result, width) // 人脸宽度
RET_ITEM_NUM(..., Result, height) // 人脸高度
反映人脸在画面中的大小
可用于判断人脸距离摄像头的远近
④ 人脸位置坐标
cpp
RET_ITEM_NUM(..., Result, xCenter) // 人脸中心X坐标
RET_ITEM_NUM(..., Result, yCenter) // 人脸中心Y坐标
定位人脸在画面中的位置
坐标原点通常在画面左上角
⑤ 眼部特征点坐标
cpp
RET_ITEM_NUM(..., FaceResult, leye_x/leye_y) // 左眼坐标
RET_ITEM_NUM(..., FaceResult, reye_x/reye_y) // 右眼坐标
精确定位眼睛位置
可用于视线追踪、眨眼检测等高级应用
技术特点
实时性:50ms的刷新间隔保证数据实时更新
多信息输出:同时输出ID、数量、尺寸、位置、特征点等多种数据
图形化界面:在UNIHIKER屏幕上直观显示识别结果
错误容错:初始化时的重试机制增强稳定性
应用场景
人脸识别门禁系统
人脸追踪摄像头
互动式人机界面
智能监控系统
教育演示项目
4、测试实验MInd+图形编程

5、实验场景图







返回首页
回到顶部

评论