回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【花雕动手做】HUSKYLENS 2 AI视觉传感器之识别人脸输出相关数据 简单

头像 驴友花雕 2025.11.24 2 0

一、相关知识点
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实践。

 

13.jpg


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

 

13-.jpg


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进行额外供电。接线图可参考下图。

 

01.jpg01-.jpg02.jpg
 

三、人脸识别(Face Recognition)是一种基于计算机视觉与人工智能的识别技术,其核心目标是:通过摄像头或图像分析系统,自动检测并识别图像中的人脸,并判断其身份、特征或情绪状态。人脸识别是让设备“认出你”的关键一步。它让设备具备“认出你”的能力,是身份验证、安全监控、智能交互等领域的重要技术支撑。

(1)人脸识别的基本定义
人脸识别是指:
利用人脸图像中的几何结构、纹理特征或深度信息,判断个体身份或进行特征分析。
它不仅识别“这是一个人脸”,更能判断“这是谁”。

(2)人脸识别的技术流程
人脸检测:在图像中定位人脸区域。
特征提取:分析眼睛、鼻子、嘴巴等关键点位置与比例。
特征编码:将人脸特征转换为向量或编码(如128维特征向量)。
身份比对:与数据库中的人脸进行匹配,判断是否为同一人。
结果输出:返回识别结果,如姓名、编号、相似度等。

(3)与相关技术的区别

 

58.jpg


(4)应用场景举例
门禁系统:刷脸开门或考勤打卡
手机解锁与支付验证
医疗系统识别患者身份
机场安检与边境身份核验
教育系统识别学生出勤与专注度
游戏或社交平台个性化互动

(5)常见人脸识别算法与模型

 

59.jpg

 

(6)技术优势与挑战

 

60.jpg

 

(7)人脸识别的场景

 

63.gif
64.gif
65.gif

四、【花雕动手做】HUSKYLENS 2 AI视觉传感器之识别人脸输出相关数据
在人脸识别功能下,当人脸出现在HuskyLens 2屏幕中时,可以被检测和框出,从而获取检测到的人脸总数、指定人脸的相关数据。可以获取指定人脸的五官、位置数据,可以读取的人脸数据有:人脸ID、人脸名称、宽度、高度以及人脸中心点的X坐标位置和Y坐标位置、左/右眼X坐标、左/右眼Y坐标、左/右嘴角X坐标、左/右嘴角Y坐标、鼻子X/Y坐标位置。

1、实际测试的几个范本

 

07 (2).jpg
07 (3).jpg
07 (4).jpg
07 (5).jpg
07 (6).jpg

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+图形编程

 

07--.jpg

 

5、实验场景图

 

08-1.jpg
08-2.jpg
08-3.jpg
08-4.jpg
08-5.jpg
08-6.jpg

评论

user-avatar
icon 他的勋章
    展开更多