12浏览
查看: 12|回复: 4

[试用测评] 【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据

[复制链接]
一、相关知识点
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实践。

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图2

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

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图1

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

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图3
【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图4

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图5

驴友花雕  高级技神
 楼主|

发表于 5 小时前

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据

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

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

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

(3)与相关技术的区别

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图1

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

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

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图2

(6)技术优势与挑战

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图3

(7)人脸识别的场景

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图4

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图5

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 3 小时前

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据

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

1、实际测试的几个范本

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图2

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图1

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图3


【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图4



回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 3 小时前

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据

2、测试实验代码

  1. /*【花雕动手做】HUSKYLENS 2 AI视觉传感器之识别人脸输出相关数据
  2. * MindPlus
  3. * esp32s3bit
  4. */
  5. // 引入必要的库文件
  6. #include "unihiker_k10.h"          // UNIHIKER开发板的库
  7. #include "DFRobot_HuskylensV2.h"   // HUSKYLENS视觉传感器的库
  8. // 创建对象
  9. HuskylensV2  huskylens;           // HUSKYLENS传感器对象
  10. UNIHIKER_K10 k10;                 // UNIHIKER开发板对象
  11. uint8_t      screen_dir=2;        // 屏幕方向设置(2表示横向)
  12. // 主程序开始
  13. void setup() {
  14.         k10.begin();                    // 初始化UNIHIKER开发板
  15.         Wire.begin();                   // 初始化I2C通信
  16.        
  17.         // 尝试连接HUSKYLENS传感器,如果失败则等待重试
  18.         while (!huskylens.begin(Wire)) {
  19.                 delay(100);                 // 等待100ms后重试
  20.         }
  21.        
  22.         k10.initScreen(screen_dir);     // 初始化屏幕,设置方向
  23.         k10.creatCanvas();              // 创建画布用于显示信息
  24.        
  25.         // 设置HUSKYLENS使用人脸识别算法
  26.         huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION);
  27.        
  28.         // 在屏幕上显示标题
  29.         k10.canvas->canvasText("识别人脸数据", 2, 0x0000FF);  // 蓝色文字,第2行
  30. }
  31. void loop() {
  32.         // 获取人脸识别结果
  33.         huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
  34.        
  35.         // 检查是否检测到人脸
  36.         if ((huskylens.available(ALGORITHM_FACE_RECOGNITION))) {
  37.                 // 显示最靠近中心的人脸ID(红色文字,第4行)
  38.                 k10.canvas->canvasText((String("靠中心的人脸ID: ") +
  39.                         String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)))),
  40.                         4, 0xFF0000);
  41.                
  42.                 // 显示检测到的人脸总数(红色文字,第5行)
  43.                 k10.canvas->canvasText((String("人脸总数: ") +
  44.                         String((huskylens.getCachedResultNum(ALGORITHM_FACE_RECOGNITION)))),
  45.                         5, 0xFF0000);
  46.                
  47.                 // 显示人脸区域的宽度和高度(蓝色文字,第6行)
  48.                 k10.canvas->canvasText((String("人脸宽高: ") +
  49.                         String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, width))) +
  50.                         String((String(",") +
  51.                         String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, height)))))))),
  52.                         6, 0x0000FF);
  53.                
  54.                 // 显示人脸中心坐标(蓝色文字,第7行)
  55.                 k10.canvas->canvasText((String("人脸坐标: ") +
  56.                         String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, xCenter))) +
  57.                         String((String(",") +
  58.                         String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, yCenter)))))))),
  59.                         7, 0x0000FF);
  60.                
  61.                 // 重复显示人脸中心坐标(蓝色文字,第8行) - 可能是冗余代码
  62.                 k10.canvas->canvasText((String("人脸坐标: ") +
  63.                         String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, xCenter))) +
  64.                         String((String(",") +
  65.                         String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, yCenter)))))))),
  66.                         8, 0x0000FF);
  67.                
  68.                 // 显示左眼坐标(蓝色文字,第9行)
  69.                 k10.canvas->canvasText((String("左眼坐标: ") +
  70.                         String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), FaceResult, leye_x))) +
  71.                         String((String(",") +
  72.                         String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), FaceResult, leye_y)))))))),
  73.                         9, 0x0000FF);
  74.                
  75.                 // 显示右眼坐标(蓝色文字,第10行)
  76.                 k10.canvas->canvasText((String("右眼坐标: ") +
  77.                         String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), FaceResult, reye_x))) +
  78.                         String((String(",") +
  79.                         String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), FaceResult, reye_y)))))))),
  80.                         10, 0x0000FF);
  81.         }
  82.        
  83.         // 更新屏幕显示
  84.         k10.canvas->updateCanvas();
  85.         delay(50);  // 延迟50ms,控制刷新频率
  86. }
复制代码

3、解读代码的各个部分:

代码结构分析
1. 头文件引入和对象创建
cpp
  1. #include "unihiker_k10.h"          // UNIHIKER开发板控制库
  2. #include "DFRobot_HuskylensV2.h"   // HUSKYLENS传感器驱动库
  3. HuskylensV2  huskylens;           // AI视觉传感器对象
  4. UNIHIKER_K10 k10;                 // 开发板控制对象
  5. uint8_t      screen_dir=2;        // 屏幕方向(2=横向显示)
复制代码

2. 初始化设置(setup函数)
cpp
  1. void setup() {
  2.         k10.begin();                    // 初始化开发板硬件
  3.         Wire.begin();                   // 启动I2C通信
  4.        
  5.         // 连接HUSKYLENS传感器(带重试机制)
  6.         while (!huskylens.begin(Wire)) {
  7.                 delay(100);                 // 连接失败时等待重试
  8.         }
  9.        
  10.         // 屏幕初始化
  11.         k10.initScreen(screen_dir);     // 设置屏幕方向
  12.         k10.creatCanvas();              // 创建绘图画布
  13.        
  14.         // 配置AI算法
  15.         huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION);  // 切换为人脸识别模式
  16.        
  17.         // 显示界面标题
  18.         k10.canvas->canvasText("识别人脸数据", 2, 0x0000FF);  // 蓝色文字显示
  19. }
复制代码

3. 主循环(loop函数)核心逻辑
数据获取与检测判断
cpp
  1. huskylens.getResult(ALGORITHM_FACE_RECOGNITION);  // 获取人脸识别结果
  2. if ((huskylens.available(ALGORITHM_FACE_RECOGNITION))) {
  3.         // 当检测到人脸时执行以下显示操作
  4. }
复制代码

显示的人脸信息详解:
① 中心人脸ID

cpp
  1. RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)
复制代码

获取最靠近画面中心的人脸的唯一标识符
用于区分不同的人脸

② 人脸数量统计

cpp
  1. huskylens.getCachedResultNum(ALGORITHM_FACE_RECOGNITION)
复制代码

返回当前画面中检测到的总人脸数

③ 人脸尺寸信息

cpp
  1. RET_ITEM_NUM(..., Result, width)   // 人脸宽度
  2. RET_ITEM_NUM(..., Result, height)  // 人脸高度
复制代码

反映人脸在画面中的大小
可用于判断人脸距离摄像头的远近

④ 人脸位置坐标

cpp
  1. RET_ITEM_NUM(..., Result, xCenter)  // 人脸中心X坐标
  2. RET_ITEM_NUM(..., Result, yCenter)  // 人脸中心Y坐标
复制代码

定位人脸在画面中的位置
坐标原点通常在画面左上角

⑤ 眼部特征点坐标

cpp
  1. <p>RET_ITEM_NUM(..., FaceResult, leye_x/leye_y)  // 左眼坐标</p><p>RET_ITEM_NUM(..., FaceResult, reye_x/reye_y)  // 右眼坐标</p>
复制代码

精确定位眼睛位置
可用于视线追踪、眨眼检测等高级应用

技术特点
实时性:50ms的刷新间隔保证数据实时更新
多信息输出:同时输出ID、数量、尺寸、位置、特征点等多种数据
图形化界面:在UNIHIKER屏幕上直观显示识别结果
错误容错:初始化时的重试机制增强稳定性

应用场景
人脸识别门禁系统
人脸追踪摄像头
互动式人机界面
智能监控系统
教育演示项目

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 3 小时前

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据

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

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图1

5、实验场景图

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图2

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图3

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图4

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图5

【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图6


【花雕动手做】AI 视觉传感器二哈识图2之识别人脸数据图7

回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail