一、核心硬件与软件平台介绍
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)技术流程
- 人脸检测:在输入图像中定位人脸所在区域。
- 特征提取:分析眼睛、鼻子、嘴巴等关键点的位置关系与比例特征。
- 特征编码:将提取的特征转化为数字向量(如常见的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 "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、实验场景图展示



雷达卡


京公网安备 11010802022788号







