6浏览
查看: 6|回复: 6

[K10教程] 【花雕动手做】K10 实验之AB按键控制学习人脸与识别人脸

[复制链接]
【花雕动手做】K10 实验之AB按键控制学习人脸与识别人脸图2

行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。

主要特点
集成摄像头&内置算法,可进行离线图像检测
集成麦克风&内置算法,可进行离线语音识别
集成扬声器&内置算法,可进行离线语音合成
2.8寸彩色屏幕,数据展示更清晰
集成度高,利于教学
接口丰富,兼容软件多,扩展性好


【花雕动手做】K10 实验之AB按键控制学习人脸与识别人脸图1

驴友花雕  高级技神
 楼主|

发表于 2 小时前

【花雕动手做】K10实验之AB按键控制学习人脸与识别人脸

主打:人工智能模块

【花雕动手做】K10 实验之AB按键控制学习人脸与识别人脸图1

人脸检测相关说明

【花雕动手做】K10 实验之AB按键控制学习人脸与识别人脸图2

【花雕动手做】K10 实验之AB按键控制学习人脸与识别人脸图3

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10实验之AB按键控制学习人脸与识别人脸

辅助:屏幕显示相关积木

【花雕动手做】K10 实验之AB按键控制学习人脸与识别人脸图1

LED控制模块

【花雕动手做】K10 实验之AB按键控制学习人脸与识别人脸图2

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10实验之AB按键控制学习人脸与识别人脸

知识点:行空板 K10 人脸检测

一、什么是行空板人脸检测
行空板 K10 内置 ESP32-S3 AI 硬件加速 NPU,搭配板载摄像头,依托unihiker_k10.h内置 AI 视觉库,本地离线完****脸检测,不需要联网、不需要云端运算,设备单独就能识别画面里是否存在人脸、输出人脸坐标。
区别于人脸识别:人脸检测只找 “人脸区域”,不区分是谁;人脸识别会比对人脸特征区分不同人。
核心硬件基础
主控:ESP32-S3 内置 AI 加速器,专门处理图像识别算法;
外设:板载前置摄像头,实时采集画面;
输出载体:K10 彩色显示屏、RGB 彩灯、扬声器、按键;
存储:TF 卡可保存人脸截图、训练模型。

二、核心基础功能
1、离线实时检测
摄像头持续刷新画面,AI 实时框选画面内所有人脸,输出人脸左上角、右下角坐标,能获取人脸宽度、高度。
2、画面可视化标记
画布直接绘制红色矩形框,把识别到的人脸圈出来,直观展示检测结果。
3、状态联动反馈
检测到人脸 / 无人脸可联动硬件:
RGB 彩灯:有人脸亮绿灯、无人脸亮红灯;
音频:检测到人脸播放提示音;
屏幕文字:实时打印「检测到人脸」「未识别人脸」;
4、配套拓展功能
人脸抓拍:检测到人脸自动保存截图到 TF 卡;
延时计数:持续 3 秒检测到人脸再触发动作,过滤瞬间路过干扰;
多人脸识别:支持同时识别画面内多张人脸。

三、底层运行逻辑
摄像头采集图像数据流;
NPU 硬件加速运行轻量化人脸检测模型;
算法输出人脸矩形坐标数据;
程序读取坐标,在屏幕画布绘制方框;
循环持续采集 + 推理,实现实时动态追踪人脸。

【花雕动手做】K10 实验之AB按键控制学习人脸与识别人脸图1

四、两种编程实现方式(Mind+)

方式 1:图形化积木(新手首选,无编译报错)
扩展库加载「AI 视觉 - 人脸检测」,积木逻辑:
初始化摄像头、AI 人脸检测;
循环采集画面;
判断是否检测到人脸;
分支:有人脸→画框、亮绿灯、播放提示音;无人脸→清框、红灯;
优势:不用处理库冲突、无多重定义报错,课堂教学首选。

方式 2:C/C++ 代码(进阶自主开发)
依托unihiker_k10.h内置 AI 接口,核心流程:
初始化摄像头 AI 模块 k10.initAI();
循环调用人脸检测函数获取人脸数组;
判断人脸数量大于 0,遍历所有人脸坐标;
画布绘制矩形框标记人脸;
联动灯光、音频、存储。

五、典型落地应用场景
1、人脸门禁提醒装置
检测到人脸自动亮绿灯、播放欢迎音效,无人时红灯待机;可拓展继电器控制门锁。
2、课堂人脸考勤记录仪
持续检测画面内人脸,检测到人脸自动抓拍保存照片到 TF 卡,记录到场人员画面。
3、桌面智能护眼监测
检测人脸距离屏幕过近时,屏幕弹出提示文字、蜂鸣器报警,提醒保持观看距离。
4、智能人体感应灯光
识别到人脸自动开启 RGB 氛围灯,人脸离开几秒后自动关灯。
5、互动趣味装置
对准屏幕人脸触发特效、播放音乐,人脸消失特效关闭。

六、使用优缺点
优势
完全离线本地运行,不用 WiFi、不用物联网平台,断网也能用;
ESP32-S3 硬件 AI 加速,画面流畅不卡顿,不占用 CPU;
配套 K10 屏幕、灯光、音频、TF 卡全套硬件,拓展简单;
Mind + 图形化 + 代码双模式,零基础、进阶学员都适配;
接口高度封装,不用学习复杂 AI 算法,直接调用现成函数。
局限
仅支持人脸检测,原生不自带人脸比对(区分不同人),如需人脸识别需要额外训练模型;
光线过暗、侧脸、遮挡口罩会降低识别准确率;
高帧率连续抓拍会小幅占用内存,多 AI 任务(人脸 + 物体识别)同时运行会卡顿;
抓拍图片默认覆盖存储,如需多图存档需要自定义命名逻辑。

七、实操关键注意事项
光线充足:暗光环境识别率大幅下降,建议室内正常灯光下实验;
人脸正对摄像头:侧脸、低头、口罩遮挡容易漏检;
硬件初始化顺序:必须先k10.begin()、初始化摄像头,再开启 AI 人脸检测;
不要叠加多余图形库(TFT_eSPI),避免多重定义编译报错;
循环内减少delay()阻塞延时,否则人脸画面卡顿、检测失效;
抓拍保存照片需提前执行k10.initSDFile()初始化 TF 卡。

【花雕动手做】K10 实验之AB按键控制学习人脸与识别人脸图2

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 半小时前

【花雕动手做】K10实验之AB按键控制学习人脸与识别人脸

【花雕动手做】行空板 K10 系列实验之通过A\B按键动态控制学习人脸与识别人脸
实验开源代码

  1. // 引入行空板K10硬件驱动库,封装屏幕、按键、RGB彩灯、摄像头、画布全部硬件接口
  2. #include "unihiker_k10.h"
  3. // 引入AI视觉识别库,提供人脸录入、人脸比对识别、AI模式切换相关接口
  4. #include "AIRecognition.h"
  5. // 全局状态变量,volatile修饰:按键回调修改,防止编译器缓存优化,主循环实时读取识别ID
  6. volatile float mind_n_OK;
  7. // A/B按键按下回调函数前置声明,setup绑定按键事件时编译器需提前识别函数
  8. void onButtonAPressed();
  9. void onButtonBPressed();
  10. // 实例化行空板全局硬件主对象,所有屏幕、灯光、摄像头操作均通过k10调用
  11. UNIHIKER_K10  k10;
  12. // 屏幕显示方向参数2,代表正向正常显示,可修改0/1/2/3切换屏幕横竖翻转
  13. uint8_t       screen_dir=2;
  14. // AI视觉识别实例,负责人脸模型初始化、人脸录入、人脸比对识别
  15. AIRecognition ai;
  16. // 上电/复位仅执行一次的硬件初始化函数
  17. void setup() {
  18.         // 初始化行空板底层总线、屏幕、摄像头、按键等全部硬件
  19.         k10.begin();
  20.         // 根据设定参数初始化显示屏驱动
  21.         k10.initScreen(screen_dir);
  22.         // 初始化ESP32-S3内置NPU AI硬件加速器,加载AI底层推理资源
  23.         ai.initAi();
  24.         // 初始化摄像头背景画面渲染功能,支持摄像头画面实时投屏到屏幕
  25.         k10.initBgCamerImage();
  26.         // 初始化阶段先关闭摄像头实时取景画面
  27.         k10.setBgCamerImage(false);
  28.         // 创建屏幕绘图缓存画布,所有文字绘制先存入缓存,统一刷新消除屏幕闪烁
  29.         k10.creatCanvas();
  30.         // 临时切换AI为无识别模式,清空上一轮残留AI模型,避免模式冲突
  31.         ai.switchAiMode(ai.NoMode);
  32.         // 给A按键绑定按下回调函数,按下A自动执行人脸录入逻辑
  33.         k10.buttonA->setPressedCallback(onButtonAPressed);
  34.         // 给B按键绑定按下回调函数,按下B自动开启人脸比对识别
  35.         k10.buttonB->setPressedCallback(onButtonBPressed);
  36.         // 开启摄像头实时画面投屏,屏幕持续显示摄像头取景画面
  37.         k10.setBgCamerImage(true);
  38.         // 切换AI工作模式为人脸识别模式,加载人脸检测+人脸特征比对模型
  39.         ai.switchAiMode(ai.Face);
  40.         // 设置RGB彩灯全局亮度为3,亮度区间0~255,数值越小灯光越柔和
  41.         k10.rgb->brightness(round(3));
  42.         // 在画布坐标(0,0)绘制红色24号中英文字体提示文字,开启自动换行,透明度50
  43.         k10.canvas->canvasText("A键学习 B键识别", 0, 0, 0xFF0000, k10.canvas->eCNAndENFont24, 50, true);
  44.         // 将画布缓存文字刷新到实体屏幕,开机提示文字完成显示
  45.         k10.canvas->updateCanvas();
  46. }
  47. // 主循环函数,初始化完成后无限循环,实时检测人脸识别结果
  48. void loop() {
  49.         // 判断AI成功比对识别到已录入人脸
  50.         if (ai.isRecognized()) {
  51.                 // 获取当前识别到的人脸编号ID,存入全局状态变量
  52.                 mind_n_OK = ai.getRecognitionID();
  53.                 // 画布坐标(0,30)蓝色24号字体打印拼接字符串:人脸ID+编号
  54.                 k10.canvas->canvasText((String("人脸ID: ") + String(mind_n_OK)), 0, 30, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
  55.                 // 画布坐标(0,60)再次打印人脸ID数字,强化识别结果展示
  56.                 k10.canvas->canvasText(ai.getRecognitionID(), 0, 60, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
  57.                 // 刷新画布,将识别ID文字同步到屏幕
  58.                 k10.canvas->updateCanvas();
  59.                 // 识别完成后关闭全部RGB彩灯,-1代表控制所有板载灯珠,0x000000为熄灭
  60.                 k10.rgb->write(-1, 0x000000);
  61.         }
  62. }
  63. // A按键按下回调函数:人脸录入学习功能
  64. void onButtonAPressed() {
  65.         // 全部RGB灯点亮绿色,作为人脸录入视觉状态提示
  66.         k10.rgb->write(-1, 0x00FF00);
  67.         // 发送AI指令:ENROLL 执行人脸特征采集、录入存储人脸模型
  68.         ai.sendFaceCmd(ENROLL);
  69.         // 屏幕左上角红色文字提示当前操作:学习人脸
  70.         k10.canvas->canvasText("学习人脸", 0, 0, 0xFF0000, k10.canvas->eCNAndENFont24, 50, true);
  71.         // 刷新画布,更新操作提示文字
  72.         k10.canvas->updateCanvas();
  73. }
  74. // B按键按下回调函数:人脸比对识别功能
  75. void onButtonBPressed() {
  76.         // 全部RGB灯点亮红色,作为人脸识别视觉状态提示
  77.         k10.rgb->write(-1, 0xFF0000);
  78.         // 发送AI指令:RECOGNIZE 开启实时人脸特征比对,匹配已录入人脸
  79.         ai.sendFaceCmd(RECOGNIZE);
  80.         // 屏幕左上角红色文字提示当前操作:人脸识别
  81.         k10.canvas->canvasText("人脸识别", 0, 0, 0xFF0000, k10.canvas->eCNAndENFont24, 50, true);
  82.         // 刷新画布,更新操作提示文字
  83.         k10.canvas->updateCanvas();
  84. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 半小时前

【花雕动手做】K10实验之AB按键控制学习人脸与识别人脸

代码解读

一、头部:库、全局变量、函数声明

  1. #include "unihiker_k10.h"
复制代码

行空板 K10 硬件总库,集成屏幕、按键、RGB 彩灯、摄像头、画布所有硬件驱动。

  1. #include "AIRecognition.h"
复制代码

ESP32-S3 本地 AI 识别库,依托内置 NPU 硬件加速,支持人脸录入(特征学习)、人脸比对识别两大核心功能。

  1. volatile float mind_n_OK;
复制代码

存储识别成功后的人脸编号 ID;volatile修饰,保证按键回调修改数值后,主循环能实时读取,不会被编译器缓存屏蔽。

  1. <p>void onButtonAPressed();</p><p>void onButtonBPressed();</p>
复制代码

按键回调函数前置声明,给 A、B 按键绑定事件时,编译器提前识别这两个函数。

  1. UNIHIKER_K10  k10;
复制代码

行空板全局硬件对象,所有屏幕、灯光、摄像头操作统一通过k10调用。

  1. uint8_t       screen_dir=2;
复制代码

屏幕旋转参数,2 为正向正常显示,可填 0/1/2/3 切换画面翻转。

  1. AIRecognition ai;
复制代码

AI 识别专用对象,负责 AI 初始化、切换人脸模式、发送录入 / 识别指令、读取人脸 ID。

二、setup () 上电初始化(仅运行 1 次)
k10.begin():初始化主板底层全部硬件总线;
k10.initScreen(screen_dir):按设定方向初始化显示屏;
ai.initAi():开启 ESP32-S3 内置 AI 加速器 NPU,加载 AI 推理底层资源;
k10.initBgCamerImage():初始化摄像头画面后台渲染,支持镜头画面直接投屏屏幕;
k10.setBgCamerImage(false):初始化阶段临时关闭摄像头画面;
k10.creatCanvas():创建绘图缓存画布,绘图先存入缓存再统一刷新,消除屏幕闪烁;
ai.switchAiMode(ai.NoMode):清空上一轮 AI 模型,避免模式冲突;
setPressedCallback():绑定 A/B 按键中断回调,按下按键立刻执行对应函数,不受delay阻塞;
k10.setBgCamerImage(true):开启摄像头实时取景,屏幕持续显示镜头画面;
ai.switchAiMode(ai.Face):切换 AI 工作模式为人脸识别模式,同时支持人脸录入 + 人脸比对;
k10.rgb->brightness(round(3)):设置 RGB 彩灯全局亮度,数值越小灯光越柔和;
canvasText(坐标X,坐标Y,颜色,字体,透明度,自动换行):在屏幕左上角打印红色操作提示「A 键学习 B 键识别」;
updateCanvas():将缓存文字刷新到实体屏幕,开机提示文字显示完成。

三、loop () 无限主循环,实时检测识别结果

  1. if (ai.isRecognized())
复制代码

判断 AI 是否成功匹配到提前录入过的人脸:
匹配成功:执行内部逻辑;
陌生人脸 / 无人脸:不执行,屏幕不打印 ID。

内部逻辑:
mind_n_OK = ai.getRecognitionID(); 读取当前匹配到的人脸专属编号;
分两行蓝色文字打印人脸 ID 信息,一行拼接文字、一行纯数字;
updateCanvas()刷新文字;
k10.rgb->write(-1, 0x000000):全部 RGB 灯熄灭,识别完成复位灯光。

四、按键回调事件函数(触发式,不阻塞主循环)
1. A 键回调 onButtonAPressed () —— 人脸录入学习
k10.rgb->write(-1, 0x00FF00):全彩灯亮绿色,作为录入操作视觉提示;
ai.sendFaceCmd(ENROLL):下发 AI 录入指令,摄像头采集人脸特征,本地保存人脸库;
屏幕左上角红色文字提示「学习人脸」,刷新画布更新画面。
2. B 键回调 onButtonBPressed () —— 人脸比对识别
k10.rgb->write(-1, 0xFF0000):全彩灯亮红色,作为识别操作视觉提示;
ai.sendFaceCmd(RECOGNIZE):下发 AI 识别指令,持续比对镜头人脸和本地存储人脸库;
屏幕左上角红色文字提示「人脸识别」,刷新画布更新画面;
开启识别后,loop 循环持续检测匹配结果,识别成功自动打印人脸 ID。

完整运行流程
开机屏幕显示操作提示,屏幕实时显示摄像头取景画面;
对准人脸按下 A 键:绿灯亮起,自动采集、存储当前人脸特征;
按下 B 键:红灯亮起,开启实时人脸比对;
镜头出现已录入人脸,屏幕打印对应人脸 ID,彩灯自动熄灭;
出现陌生人脸,屏幕无 ID 输出,无灯光变化。

案例特点
本地离线 AI,不需要 WiFi、云端,依靠 ESP32-S3 硬件 NPU 运行;
按键采用中断回调,响应灵敏,不会被延时卡住;
灯光 + 屏幕文字双重状态提示,操作直观;
分离录入、识别两个功能,单双按键分工清晰,适合课堂人脸门禁项目。

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 半小时前

【花雕动手做】K10实验之AB按键控制学习人脸与识别人脸

Mind+图形编程

【花雕动手做】K10 实验之AB按键控制学习人脸与识别人脸图1
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail