【花雕动手做】行空板 K10 系列实验之摄像头识别移动检测后显示在K10屏幕上
行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。
主要特点
集成摄像头&内置算法,可进行离线图像检测
集成麦克风&内置算法,可进行离线语音识别
集成扬声器&内置算法,可进行离线语音合成
2.8寸彩色屏幕,数据展示更清晰
集成度高,利于教学
接口丰富,兼容软件多,扩展性好
主打:人工智能模块
移动检测相关说明
辅助:屏幕显示相关积木
LED控制模块
知识点:行空板 K10 移动侦测 AI 检测 + 屏幕显示综合介绍
一、整体方案原理
- 硬件基础
行空板 K10 搭载ESP32-S3 主控,内置硬件 NPU 神经网络加速器,搭配前置 200 万像素摄像头、2.8 寸彩色 LCD 屏幕、RGB 氛围灯,无需外接模块、无需联网,本地离线实时画面动态检测。
整套功能分为三部分:摄像头采集画面 → NPU 移动 AI 算法运算 → 屏幕文字 + RGB 灯光同步展示检测结果。 - 移动检测算法逻辑
算法对比前后两帧摄像头画面像素差异,识别画面内物体移动、光影变化;
内置灵敏度阈值可调,过滤微小光影抖动,只识别有效物体运动,区别于人脸 / 猫狗 / 二维码目标识别:
人脸 / 猫狗:识别特定生物面部;
二维码:识别特定图形码;
移动检测 (Move):不区分物体,只要画面产生位移变化就触发。
二、功能清单(屏幕 + 灯光联动)
摄像头实时画面投屏
屏幕底层持续显示摄像头取景画面,检测文字叠加在画面上层,直观看到现场画面。
状态双区分显示
画面静止无移动:清空屏幕文字,RGB 红灯常亮;
检测到物体移动:屏幕打印提示文字,RGB 绿灯同步亮起,视觉双重提醒。
自定义检测灵敏度
可设置阈值 0~100,数值越大越难触发,解决窗外树影、灯光频闪误触发问题。
RGB 亮度可调
限制灯光亮度,避免强光刺眼,适配室内长时间使用。
无阻塞实时检测
代码无延时卡死,画面持续刷新,物体一移动立刻响应,无延迟。
三、完整运行流程
上电初始化:硬件、屏幕、NPU、摄像头依次启动,切换移动检测 AI 模式,设置灯光亮度与移动灵敏度;
待机静止状态:屏幕仅显示摄像头画面,无任何文字,RGB 红灯常亮;
镜头前出现移动物体(手、宠物、行人):
AI 瞬间识别画面像素变化;
屏幕上层叠加白色、浅粉色提示文字;
RGB 灯同步切换为绿色;
物体完全静止不动:
画布文字立刻清空;
RGB 灯切回红色待机,等待下一次移动触发。
四、适用项目场景
室内简易人体感应报警器:有人经过自动亮灯提示;
宠物活动监测:宠物跑动触发灯光提醒;
仓库简易异动监控:画面出现物体移动屏幕报警;
楼道人体感应提示装置;
教学 AI 视觉实验:学习帧差法动态检测、屏幕交互外设联动。
五、使用优势
纯离线本地运算,不用 WiFi、不消耗流量,无网络延迟;
屏幕实时可视化,肉眼同步看到监控画面与检测状态;
红绿灯光状态区分清晰,远距离也能判断是否检测到移动;
灵敏度可调,适配卧室、窗边、仓库等不同光线环境;
代码无阻塞,实时响应,不会出现扫码类项目 2 秒卡死的问题。
【花雕动手做】行空板 K10 系列实验之摄像头识别移动检测后显示在K10屏幕上
实验开源代码
// 引入行空板K10硬件驱动库,封装屏幕、画布、RGB彩灯、摄像头、屏幕渲染等全部外设接口#include"unihiker_k10.h"// 引入离线AI视觉识别库,提供NPU初始化、多种AI模式切换、移动检测功能#include"AIRecognition.h"// 实例化行空板主控全局对象,所有屏幕、灯光、摄像头操作统一通过k10调用UNIHIKER_K10 k10;// 屏幕旋转参数:2=设备竖直正向显示,移动检测推荐竖屏摆放,识别更稳定uint8_tscreen_dir=2;// AI视觉专用对象,负责启动NPU、切换AI算法、读取移动检测状态、调节灵敏度AIRecognition ai;/** * @brief 上电初始化函数,开发板通电/复位仅执行一次 * 功能:硬件初始化、AI加速器启动、开启摄像头画面、切换移动检测模式、设置灯光亮度、调节移动检测灵敏度 */voidsetup(){k10.begin();// 初始化主板底层IO、供电、通信总线等全套硬件外设k10.initScreen(screen_dir);// 根据screen_dir参数初始化LCD显示屏,设置屏幕正向竖直显示ai.initAi();// 启动ESP32-S3内置NPU AI硬件加速器,加载移动目标检测模型k10.initBgCamerImage();// 初始化摄像头后台画面渲染功能,支持摄像头画面实时投屏到屏幕k10.setBgCamerImage(false);// 初始化阶段临时关闭摄像头画面,避免画面干扰初始化流程k10.creatCanvas();// 创建绘图缓存画布,绘图先存入缓存再统一刷新,消除屏幕闪烁ai.switchAiMode(ai.NoMode);// 临时切换AI为无识别模式,清空上一轮残留AI算法,防止模式冲突黑屏k10.setScreenBackground(0x000000);// 设置屏幕底层默认背景色为纯黑色k10.setBgCamerImage(true);// 开启摄像头实时画面投屏,屏幕持续显示镜头实时取景画面ai.switchAiMode(ai.Move);// 切换AI工作模式为【移动物体检测】,开启画面动态侦测算法k10.rgb->brightness(round(3));// 设置RGB彩灯全局亮度,有效范围0~10,3为柔和低亮度不刺眼k10.canvas->updateCanvas();// 刷新画布缓存,将初始化空白界面输出到LCD屏幕ai.setMotinoThreshold(50);// 设置移动检测灵敏度阈值,数值越大越难触发检测,50为中等灵敏度}/** * @brief 主循环函数,上电后无限循环执行,移动侦测核心逻辑 * 逻辑:画面检测到移动物体 → 屏幕打印提示文字、RGB绿灯亮起;无移动 → RGB红灯常亮,清空文字 */voidloop(){// 判断摄像头画面中是否检测到移动物体// ai.isDetectContent(AIRecognition::Move) 返回true=画面存在移动目标,false=画面静止无变化if(ai.isDetectContent(AIRecognition::Move)){// 在画布第4行,白色字体打印实验标题k10.canvas->canvasText("行空板K10系列实验",4,0xFFFFFF);// 在画布第6行,浅粉色字体打印移动检测提示k10.canvas->canvasText("检测到移动",6,0xFFCCCC);k10.canvas->updateCanvas();// 将画布文字缓存刷新输出到实体LCD屏幕k10.rgb->write(-1,0x00FF00);// -1代表控制全部RGB灯珠,0x00FF00纯绿色,检测到移动亮绿灯}else{// 画面无移动物体,清空画布文字,灯光切换为红色k10.canvas->canvasClear();k10.rgb->write(-1,0xFF0000);// 0xFF0000纯红色,静止状态常亮红灯}}代码解读
一、头文件与全局对象
#include"unihiker_k10.h"#include"AIRecognition.h"UNIHIKER_K10 k10;uint8_tscreen_dir=2;AIRecognition ai;#include"unihiker_k10.h"行空板 K10 硬件库,封装屏幕、画布、RGB 彩灯、摄像头、画面渲染全部外设操作。
#include"AIRecognition.h"离线 AI 视觉库,依托 ESP32-S3 内置 NPU,提供人脸、猫狗、二维码、移动侦测四种离线视觉算法。
UNIHIKER_K10 k10全局硬件主控对象,屏幕、灯光、摄像头所有操作都通过k10调用。
uint8_tscreen_dir=2屏幕朝向参数,2= 竖直正向显示;移动检测推荐竖屏,横屏容易误触发、识别不稳定。
AIRecognition aiAI 专用对象,负责 NPU 初始化、切换识别模式、设置移动灵敏度、判断画面是否存在移动物体。
二、setup () 上电初始化(仅开机执行 1 次)
voidsetup(){k10.begin();// 初始化主板底层IO、供电、通信总线等全部硬件k10.initScreen(screen_dir);// 初始化LCD屏幕,设置竖直正向显示ai.initAi();// 启动ESP32-S3内置NPU AI加速器,加载移动检测模型k10.initBgCamerImage();// 初始化摄像头后台投屏功能,屏幕实时显示摄像头画面k10.setBgCamerImage(false);// 初始化阶段临时关闭摄像头画面,避免画面干扰初始化流程k10.creatCanvas();// 创建绘图缓存画布,绘图先存缓存再统一刷新,消除屏幕闪烁ai.switchAiMode(ai.NoMode);// 清空上一轮AI运行模式,防止多算法冲突、设备黑屏k10.setScreenBackground(0x000000);// 设置屏幕底层背景为纯黑色k10.setBgCamerImage(true);// 开启摄像头实时画面投屏ai.switchAiMode(ai.Move);// 切换AI算法为【移动目标检测】,开启画面动态侦测k10.rgb->brightness(round(3));// 设置RGB彩灯亮度,取值0~10,3亮度柔和不刺眼k10.canvas->updateCanvas();// 刷新画布,输出初始化空白界面到屏幕ai.setMotinoThreshold(50);// 设置移动检测灵敏度阈值}关键接口说明:ai.setMotinoThreshold(50)
阈值范围:0 ~ 100
数值越小:轻微光影、微小移动就会触发检测;
数值越大:需要大幅度物体移动才会判定为移动;
本代码设 50,中等灵敏度,兼顾灵敏与抗光影误触发。
初始化执行顺序
硬件初始化 → 屏幕初始化 → AI 加速器启动 → 画布 / 摄像头初始化 → 清空旧 AI 模式 → 开启摄像头画面 → 切换移动检测算法 → 设置灯光亮度、移动灵敏度。
三、loop () 主循环(无限循环,核心侦测逻辑)
voidloop(){// 判断摄像头画面是否检测到移动物体if(ai.isDetectContent(AIRecognition::Move)){// 第4行白色文字:实验标题k10.canvas->canvasText("行空板K10系列实验",4,0xFFFFFF);// 第6行浅粉色文字:检测提示k10.canvas->canvasText("检测到移动",6,0xFFCCCC);k10.canvas->updateCanvas();// 刷新文字到屏幕k10.rgb->write(-1,0x00FF00);// -1=全部RGB灯,0x00FF00纯绿色,检测到移动亮绿灯}else{// 画面静止无移动k10.canvas->canvasClear();// 清空屏幕所有文字,只保留摄像头画面k10.rgb->write(-1,0xFF0000);// 0xFF0000纯红色,静止状态常亮红灯}}- AI 判断函数
ai.isDetectContent(AIRecognition::Move)返回布尔值:
true:画面存在移动的物体 / 光影变化;
false:画面完全静止,无动态变化。
2. 两大分支逻辑
分支 1:检测到移动(if)
在屏幕固定行数打印两行提示文字;
刷新画布,文字显示在摄像头画面上层;
全部 RGB 灯切换为绿色,作为移动提醒。
分支 2:画面静止(else)
清空画布所有文字,恢复纯净摄像头画面;
RGB 灯切换为红色常亮,代表待机静止状态。
四、完整运行流程
开发板上电,自动初始化硬件、AI、摄像头,开启移动侦测;
镜头前无物体移动:屏幕仅显示摄像头画面,RGB 红灯常亮;
手、物体在镜头前移动:屏幕弹出文字提示,RGB 立刻切换绿灯;
物体静止不动后,文字瞬间清空,灯光切回红色待机。
全程无delay()阻塞,实时持续侦测,响应速度快;
红绿灯光区分两种状态,直观易懂;
可自定义移动灵敏度阈值,适配室内、强光等不同环境;
限制 RGB 亮度,灯光柔和不刺眼。
五、使用注意事项
设备必须竖直摆放,横屏会大幅降低检测稳定性、增加误触发;
避开持续晃动的光影(窗帘、窗外树影、频闪灯光);
阈值调节参考:居家室内 40~60,强光窗边 70~90;
禁止在 loop 循环里频繁切换 AI 模式(移动 / 人脸 / 二维码),容易黑屏、设备重启。
Mind+图形编程
实验场景图与视频记录