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

[K10教程] 【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯

[复制链接]
【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图1

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

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

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图2


驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯

主打:人工智能模块

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图1

猫狗脸检测相关说明

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图2


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯

辅助:屏幕显示相关积木

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图2

LED控制模块

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图1


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯

知识点:行空板 K10 猫狗脸检测

一、基础硬件与底层原理
1. 硬件支撑
行空板 K10 搭载ESP32-S3 主控,内置专用 NPU 硬件 AI 加速器,搭配板载 200 万像素前置摄像头,无需外接模块、无需联网,本地离线运行猫狗检测算法,纯边缘端计算,无网络延迟、不消耗流量。
配套输出外设:2.8 寸彩色 LCD(实时显示摄像头画面 + 识别框)、RGB 氛围灯、A/B 物理按键、TF 卡存储(可抓拍宠物照片)、扬声器。

2. 算法定位
猫狗检测是 K10 内置四大原生视觉 AI 模型之一,其余三种:人脸检测、移动检测、二维码识别。
识别目标:画面内猫、狗的脸部区域均可识别;
区分逻辑:仅检测宠物脸部存在,无法区分具体品种、无法给猫狗分配独立 ID(和人脸录入识别有本质区别);
运行要求:设备竖直放置(Type-C 接口朝上),横屏摆放会大幅降低识别成功率,甚至完全检测不到目标。

二、猫狗检测完整核心功能
1. 实时画面框选可视化
检测到猫 / 狗脸部时,屏幕摄像头画面会自动叠加绿色矩形识别框圈出宠物脸,直观展示识别区域;移动检测、二维码模式无识别框,仅人脸、猫狗检测支持框选标记。

2. 完整宠物面部数据读取
检测到猫狗后,可实时读取宠物脸全部坐标与尺寸参数,图形化 / 代码均可调用:
基础尺寸:脸部宽度 Width、高度 Length;
坐标信息:脸部中心点 X、中心点 Y;
五官关键点:左眼 XY、右眼 XY、鼻子 XY、左右嘴角 XY。
可基于坐标实现跟随效果、屏幕贴纸、灯光跟随等交互。

3. 状态判断接口
提供专用判断函数,快速判定画面是否存在猫狗:
Mind + 图形化:「是否检测到猫狗」积木,返回布尔值;
Arduino C 代码:ai.isDetectContent(AIRecognition::Cat);
MicroPython:data['cat_flag'],1 = 检测到猫狗,0 = 无目标。

4. 可联动全板载外设做交互
检测触发后可联动所有硬件开发趣味项目:
RGB 彩灯:检测到宠物自动亮对应颜色呼吸灯、闪烁倒计时;
自动抓拍:识别稳定 2 秒自动拍照存入 TF 卡,实现宠物自动相机;
语音播报:检测到猫狗喇叭播放 “发现小猫 / 小狗”;
屏幕交互:显示宠物坐标、弹窗提示、叠加卡通贴纸;
物联网:WiFi 上传宠物到访记录到上位机 / 小程序。

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图1

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯

宠物检测的几张案例图片

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图3

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图1

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图2
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯

【花雕动手做】行空板 K10 系列实验之猫狗脸检测的动态宠物氛围灯
实验开源代码

  1. #include "unihiker_k10.h"
  2. #include "AIRecognition.h"
  3. // 全局硬件对象
  4. UNIHIKER_K10  k10;
  5. uint8_t       screen_dir=2;
  6. AIRecognition ai;
  7. // 全局状态变量
  8. unsigned long petLostTimer = 0;    // 宠物离开计时戳
  9. const unsigned long PET_OFF_DELAY = 3000; // 宠物离开3秒熄灯
  10. unsigned long breathTimer = 0;     // 呼吸灯刷新计时
  11. int breathVal = 30;                // 灯光基础亮度(最低可见亮度)
  12. bool breathDir = true;            // 呼吸渐变方向:true变亮 false变暗
  13. bool petExist = false;            // 当前画面是否存在宠物
  14. /**
  15. * @brief 清空画布,刷新宠物数据界面
  16. */
  17. void showPetDataUI()
  18. {
  19.   k10.canvas->canvasClear();
  20.   // 读取宠物面部数据
  21.   int len = ai.getCatData(AIRecognition::Length);
  22.   int wid = ai.getCatData(AIRecognition::Width);
  23.   int cx = ai.getCatData(AIRecognition::CenterX);
  24.   int cy = ai.getCatData(AIRecognition::CenterY);
  25.   k10.canvas->canvasText("===== 宠物检测数据 =====", 4, 0xFFFFFF);
  26.   k10.canvas->canvasText("宠物脸长:" + String(len), 6, 0xFFFFCC);
  27.   k10.canvas->canvasText("宠物脸宽:" + String(wid), 7, 0x99FF99);
  28.   k10.canvas->canvasText("中心X坐标:" + String(cx), 8, 0xCCCCFF);
  29.   k10.canvas->canvasText("中心Y坐标:" + String(cy), 9, 0x66FFFF);
  30.   k10.canvas->updateCanvas();
  31. }
  32. /**
  33. * @brief 无宠物界面,清空所有文字
  34. */
  35. void clearPetUI()
  36. {
  37.   k10.canvas->canvasClear();
  38.   k10.canvas->canvasText("等待猫狗进入画面...", 6, 0xAAAAAA);
  39.   k10.canvas->updateCanvas();
  40. }
  41. void setup() {
  42.         k10.begin();
  43.         k10.initScreen(screen_dir);
  44.         ai.initAi();
  45.         k10.initBgCamerImage();
  46.         k10.setBgCamerImage(false);
  47.         k10.creatCanvas();
  48.         ai.switchAiMode(ai.NoMode);
  49.         k10.setScreenBackground(0x000000);
  50.         k10.setBgCamerImage(true);
  51.         ai.switchAiMode(ai.Cat);
  52.         // RGB亮度设置,K10有效范围0~10
  53.         k10.rgb->brightness(5);
  54.         // 初始灯光熄灭
  55.         k10.rgb->write(-1, 0x000000);
  56.         clearPetUI();
  57. }
  58. void loop() {
  59.         unsigned long nowTime = millis();
  60.         // 判断是否检测到猫狗
  61.         petExist = ai.isDetectContent(AIRecognition::Cat);
  62.         if (petExist)
  63.         {
  64.                 // 刷新宠物存在计时,重置3秒熄灭倒计时
  65.                 petLostTimer = nowTime;
  66.                 // 刷新宠物数据界面
  67.                 showPetDataUI();
  68.                 // 呼吸灯渐变逻辑,每100ms刷新一次亮度
  69.                 if (nowTime - breathTimer > 100)
  70.                 {
  71.                         breathTimer = nowTime;
  72.                         // 亮度区间30~200,避免过暗/刺眼
  73.                         if (breathDir)
  74.                         {
  75.                                 breathVal += 8;
  76.                                 if (breathVal >= 200) breathDir = false;
  77.                         }
  78.                         else
  79.                         {
  80.                                 breathVal -= 8;
  81.                                 if (breathVal <= 30) breathDir = true;
  82.                         }
  83.                         // 专属青色呼吸灯 0x00FFFF
  84.                         uint32_t petColor = breathVal | (breathVal << 16);
  85.                         k10.rgb->write(-1, petColor);
  86.                 }
  87.         }
  88.         else
  89.         {
  90.                 // 宠物不在画面,判断离开是否满3秒
  91.                 if (nowTime - petLostTimer > PET_OFF_DELAY)
  92.                 {
  93.                         // 3秒超时,灯光熄灭、清空数据界面
  94.                         k10.rgb->write(-1, 0x000000);
  95.                         clearPetUI();
  96.                 }
  97.         }
  98. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯

代码解读
一、头文件与全局对象

  1. // 行空板K10硬件驱动库:屏幕、画布、RGB、摄像头全套外设接口
  2. #include "unihiker_k10.h"
  3. // AI离线视觉库:猫狗检测、面部坐标读取、AI模式切换
  4. #include "AIRecognition.h"
  5. // 主板主控对象,所有硬件操作统一调用k10
  6. UNIHIKER_K10  k10;
  7. // 屏幕竖直正向显示,猫狗检测必须竖屏摆放
  8. uint8_t       screen_dir=2;
  9. // AI识别专用对象,处理猫狗检测算法
  10. AIRecognition ai;
  11. // ===================== 灯光、计时全局变量 =====================
  12. unsigned long petLostTimer = 0;    // 记录宠物最后一次出现的时间戳,用于3秒延时熄灯
  13. const unsigned long PET_OFF_DELAY = 3000; // 常量:宠物消失3秒后关闭灯光
  14. unsigned long breathTimer = 0;     // 控制呼吸灯刷新间隔,无阻塞不卡顿画面
  15. int breathVal = 30;                // 灯光最低基础亮度,保证识别瞬间就能看见灯光
  16. bool breathDir = true;            // 呼吸渐变方向:true亮度增加,false亮度降低
  17. bool petExist = false;            // 状态标记:true画面有猫狗,false无宠物
复制代码


二、自定义绘图函数
1. showPetDataUI () 显示宠物识别数据

  1. void showPetDataUI()
  2. {
  3.   k10.canvas->canvasClear(); // 每次刷新先清空画布,解决文字重叠bug
  4.   // 读取猫狗面部四项核心数据
  5.   int len = ai.getCatData(AIRecognition::Length);
  6.   int wid = ai.getCatData(AIRecognition::Width);
  7.   int cx = ai.getCatData(AIRecognition::CenterX);
  8.   int cy = ai.getCatData(AIRecognition::CenterY);
  9.   // 分多行、不同彩色文字展示宠物尺寸与坐标
  10.   k10.canvas->canvasText("===== 宠物检测数据 =====", 4, 0xFFFFFF);
  11.   k10.canvas->canvasText("宠物脸长:" + String(len), 6, 0xFFFFCC);
  12.   k10.canvas->canvasText("宠物脸宽:" + String(wid), 7, 0x99FF99);
  13.   k10.canvas->canvasText("中心X坐标:" + String(cx), 8, 0xCCCCFF);
  14.   k10.canvas->canvasText("中心Y坐标:" + String(cy), 9, 0x66FFFF);
  15.   k10.canvas->updateCanvas(); // 刷新画布到屏幕
  16. }
复制代码

2. clearPetUI () 无宠物空白界面

  1. void clearPetUI()
  2. {
  3.   k10.canvas->canvasClear();
  4.   k10.canvas->canvasText("等待猫狗进入画面...", 6, 0xAAAAAA);
  5.   k10.canvas->updateCanvas();
  6. }
复制代码

宠物离开 3 秒后清空所有数据文字,界面干净。

三、setup () 上电初始化(仅运行 1 次)

  1. void setup() {
  2.         k10.begin();                // 初始化主板全部底层硬件
  3.         k10.initScreen(screen_dir); // 初始化屏幕,设置竖屏方向
  4.         ai.initAi();                // 启动ESP32-S3内置NPU AI加速器,加载猫狗检测模型
  5.         k10.initBgCamerImage();     // 初始化摄像头投屏功能
  6.         k10.setBgCamerImage(false); // 初始化阶段临时关闭摄像头画面
  7.         k10.creatCanvas();          // 创建绘图缓存,消除屏幕闪烁
  8.         ai.switchAiMode(ai.NoMode); // 清空旧AI模式,防止冲突黑屏
  9.         k10.setScreenBackground(0x000000); // 屏幕底层黑色背景
  10.         k10.setBgCamerImage(true);  // 开启摄像头实时画面投屏
  11.         ai.switchAiMode(ai.Cat);    // 切换AI为猫狗脸部检测模式
  12.         k10.rgb->brightness(5);     // RGB亮度0~10,设置适中亮度
  13.         k10.rgb->write(-1, 0x000000); // 开机默认灯光熄灭
  14.         clearPetUI(); // 开机显示等待宠物界面
  15. }
复制代码


四、loop () 主循环(核心识别 + 灯光逻辑)

  1. void loop() {
  2.         unsigned long nowTime = millis(); // 获取系统运行毫秒,无阻塞计时
  3.         // 判断画面内是否存在猫/狗脸部
  4.         petExist = ai.isDetectContent(AIRecognition::Cat);
  5.         // 分支1:画面检测到猫狗
  6.         if (petExist)
  7.         {
  8.                 petLostTimer = nowTime; // 持续刷新消失计时,只要宠物在画面就重置3秒倒计时
  9.                 showPetDataUI();       // 刷新宠物长宽、坐标数据界面
  10.                 // 每100ms更新一次灯光亮度,柔和呼吸渐变
  11.                 if (nowTime - breathTimer > 100)
  12.                 {
  13.                         breathTimer = nowTime;
  14.                         // 亮度自动增减,区间30~200,不会过暗、不会刺眼
  15.                         if (breathDir)
  16.                         {
  17.                                 breathVal += 8;
  18.                                 if (breathVal >= 200) breathDir = false;
  19.                         }
  20.                         else
  21.                         {
  22.                                 breathVal -= 8;
  23.                                 if (breathVal <= 30) breathDir = true;
  24.                         }
  25.                         // 专属青色氛围灯:红蓝通道同步随亮度变化,形成青蓝流水呼吸
  26.                         uint32_t petColor = breathVal | (breathVal << 16);
  27.                         k10.rgb->write(-1, petColor);
  28.                 }
  29.         }
  30.         // 分支2:画面无猫狗
  31.         else
  32.         {
  33.                 // 宠物离开满3秒,执行熄灯+清空界面
  34.                 if (nowTime - petLostTimer > PET_OFF_DELAY)
  35.                 {
  36.                         k10.rgb->write(-1, 0x000000); // 全部RGB灯熄灭
  37.                         clearPetUI();
  38.                 }
  39.                 // 离开不足3秒:灯光保持当前状态,不立即熄灭
  40.         }
  41. }
复制代码

运行完整流程
开机:屏幕显示「等待猫狗进入画面...」,RGB 彩灯全灭;
镜头出现猫 / 狗:
屏幕实时刷新宠物脸长、脸宽、脸部中心 XY 坐标;
RGB 青色灯光持续明暗呼吸渐变;
只要宠物在画面,3 秒倒计时持续重置,灯光不会熄灭;
宠物移出镜头:
前 3 秒灯光继续保持呼吸效果,不立刻关灯;
满 3 秒后 RGB 完全熄灭,屏幕清空宠物数据,回到等待界面;
再次出现宠物:立刻重新点亮呼吸灯,刷新识别数据。

核心亮点
无阻塞millis()计时,不使用delay,画面、灯光刷新流畅;
3 秒延时熄灯缓冲,宠物短暂跑出画面不会频繁开关灯;
专属青色呼吸渐变灯光,亮度区间限制,视觉柔和;
每次绘图自动清空画布,彻底解决文字重叠;
纯离线猫狗 AI 检测,无需联网,识别猫、狗通用。

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯

实验场景图与视频记录

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图4

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图1

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图2

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图5

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图3
回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图2

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图1

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图3

【花雕动手做】K10系列实验之猫狗脸检测动态宠物氛围灯图4
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail