LattePanda+ArUco魔法手电筒

2026-10-22 15:24:14 47阅读

一、项目简介

手持遥控器指向哪里,哪里就能从黑暗中浮现世界名画。使用LattePanda Alpha 800s+15.6寸IPS触摸屏+普通USB摄像头,通过OpenCV ArUco标记识别,将标记贴在小米蓝牙遥控器顶端变成"魔法棒"。按Home键切换下一张、语音键切换上一张、确认键拍照追加、菜单键退出。

二、硬件清单

LattePanda Alpha 800s(Intel m3-8100Y 8GB)、DFRobot 15.6寸1920×1080 IPS电容触摸屏、普通USB摄像头(UVC免驱)、LattePanda UPS Hat扩展板(3节18650续航8小时)、小米蓝牙遥控器、ArUco标记打印贴在遥控器顶端。

三、制作魔法棒

用OpenCV生成ArUco标记(DICT_4X4_50 ID 0)打印在哑光不干胶纸上,沿外沿裁剪保留5mm白色静区。贴在遥控器正面(朝向摄像头一面),不用透明胶带覆盖主体防反光。手指握持时不遮挡标记。

四、核心原理

ArUco标记识别:检测四边形轮廓+内部编码匹配字典,返回四角点亚像素坐标。中心位置决定光圈在屏幕上位置,平均边长反映距离(标记越近画面越大光圈越大)。位置映射:屏幕坐标=归一化坐标×分辨率。

五、柔光渲染

预生成圆形渐变贴图:中心1全亮边缘平滑衰减到0。渲染时缩放到光圈直径,与名画区域逐元素乘法写入全黑缓冲区。先擦除上一帧光圈区域,每帧只处理光圈覆盖矩形区域,计算量极小。

六、按键去抖

小米遥控器语音键按下会持续发down事件(约500ms后每30~45ms一次)。用keyboard.hook()监听down和up事件,首次down触发后续down忽略,up解除锁定。2秒超时兜底防止up丢失锁死。菜单键event.name返回Python None需特殊归一化处理。

七、拍照线程安全

keyboard回调在独立线程不能直接调cap.read()(OpenCV非线程安全)。采用标志位+主循环处理:回调设snap=True,主循环下一帧用当前帧抓取。退出时自动恢复鼠标光标。


作者:云天
链接:https://www.aiddithome.com/p/20e6d793ccea2e.html
本作遵循 [CC BY 4.0 署名] 许可,版权归作者所有。若存在违规行为,您可以点击 “举报”。


登录 后发表评论
4条评论
刷着刷着入坑了
1楼 · 2026-10-22 15:24:53

LattePanda UPS续航8小时这个确实方便,随时能玩

阿强焊点总飞
2楼 · 2026-10-22 15:24:52

柔光渲染那张预生成贴图的思路很高效,每帧只处理光圈矩形区域

天快亮了
3楼 · 2026-10-22 15:24:52

小米遥控器按键去抖那段写得很详细,自动重复事件的坑确实烦人

阿伟不emo
4楼 · 2026-10-22 15:24:51

把ArUco标记贴遥控器上变魔法棒这个创意绝了,指向哪里亮哪里