当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]去年,我们在公司一次远程团队建设活动中玩过寻宝游戏。我戴着Beats耳机,在屋里四处奔跑寻找物品,而家人却一脸茫然地看着我,不明白发生了什么。那段时间我玩得很开心,还赢了比赛。我想把这种体验带入一个大家可以在家里一起玩的游戏。两个人无聊时可以连接电视进行竞赛,也可以让所有人参与,组成小组共同游玩。

去年,我们在公司一次远程团队建设活动中玩过寻宝游戏。我戴着Beats耳机,在屋里四处奔跑寻找物品,而家人却一脸茫然地看着我,不明白发生了什么。那段时间我玩得很开心,还赢了比赛。我想把这种体验带入一个大家可以在家里一起玩的游戏。两个人无聊时可以连接电视进行竞赛,也可以让所有人参与,组成小组共同游玩。

“用Arduino UNO Q与App Lab大赛”给了我一个动手制作的理由,也让我有机会了解UNO Q究竟能否胜任这项任务。事实上,我非常好奇:它是否能独立运行游戏、识别物体、理解语音指令,并且还能一起生成谜语,而无需依赖强大的电脑或远程AI服务?

寻宝游戏Q每轮开始时,电视上都会出现一道谜题。你需要先猜出答案,然后迅速跑过去找到物品,并在对手之前将它展示给摄像头。红色在左侧,蓝色在右侧,第一个正确回答的玩家赢得这一轮。答得越快,得分越高;十轮结束后,总分最高的玩家获胜。语言模型负责生成谜题,因此每次重新开始游戏时提示内容都会不同。

软件

•Arduino UNO Q Linux 镜像

•带 Web 界面、物体检测和大语言模型模块的 Arduino App Lab

•Edge Impulse YOLOX-Nano 物体检测模型

•Qwen 3.5 0.8B Q4_0 语言模型

•Vosk 0.3.45,包含小型英文语音模型

•用于电视显示的 Chromium 浏览器

硬件

•Arduino UNO Q(已测试,4 GB 内存 / 32 GB 存储)

•带麦克风的 USB 网络摄像头:UVC,1920 × 1080 MJPEG,每秒 30 帧,16 kHz 单声道音频

•支持 PD 供电的 USB-C 路由器,带 HDMI 接口(含音频)及 USB 网络摄像头接口

•电源与线缆(已测试 Apple iPad 10W 充电器)

•支持电源、数据和视频传输的 Hub-to-board USB-C 连接

•HDMI 线缆及带扬声器的电视或 HDMI 屏幕

本地运行整个系统

保持游戏能在板子上运行是我主要的目标之一。我希望可以将游戏带到任何地方,连接摄像头和HDMI屏幕,无需依赖在线服务即可进行游戏。这也意味着摄像头图像和麦克风音频可以继续保留在UNO Q上,这对隐私保护来说非常重要。

Arduino App Lab 负责管理Python应用程序及其模型服务。游戏使用了三个模块:物体检测、大语言模型(LLM)和Web UI。Python负责处理每一轮游戏、计时器和分数,而Web UI模块则提供界面,由Chromium在板子上全屏运行。电视通过HDMI接收画面和声音。游戏在UNO Q的Linux侧运行,无需定制电路。

在物体识别方面,我使用了通过 Edge Impulse 提供的预训练 YOLOX-Nano 模型。该模型可在摄像头图像中识别物体,并为每个检测结果返回标签、置信度和边界框。游戏会将这些信息与当前答案进行比对,并根据其位置将物体分配给相应队伍。每队都有彩色轮廓显示检测器所识别的内容。

LLM 模块通过 llama.cpp 在本地运行 Qwen 3.5 0.8B 模型。对于每个目标物品,游戏会提供一些事实性的提示,并要求模型将其转化为一个简短的谜语,但不透露答案。我发现线索可能变得过于创意化,因此将温度降低至 0.2。游戏还会检查回答是否包含不完整文本或暴露答案,并对不适合的回答重新尝试。

生成谜语可能需要数秒时间,因此游戏会异步准备谜题。生成过程在加载期间开始,并持续进行,直到菜单打开为止。一旦一个谜语完成,工作者就会请求下一个,整个比赛过程中,摄像头、语音输入和游戏循环均继续运行。如果游戏未及时响应,界面会显示一个带有暂停计时器的加载画面。同时,游戏会在屏幕上显示最终比分,并开始准备下一场比赛。

语音指令使用了Vosk的小型英文模型,识别范围仅限于游戏支持的命令词汇。之所以选择这个模型,是因为内置的Arduino关键词模型只能识别“Hey Arduino”,无法支持该游戏所需的多种指令。虽然可以使用自定义的Edge Impulse模型来支持这些指令,我实际上也训练过该模型,但由于某些词语的识别准确率不够理想,因此在当前版本中选择了Vosk。该模型运行在Python应用程序中,其模型文件已包含在导入的ZIP包内。

令人印象深刻的是,在UNO Q上同时启用三个模型时,游戏反应非常灵敏。尽管如此,要让这些模型实现良好的游戏体验仍需进行一些调优。

调整游戏

与预期相反,第一个原型已经具备了可运行的游戏循环。后续的大部分工作是通过实际游玩,并发现其中不清晰或运行缓慢的地方。

摄像头分辨率和物体识别需要特别注意,部分语音指令也经过了多次尝试才得以完善。至少部分摄像头问题有简单的原因:我是在一个非常昏暗的房间里进行开发的。我尝试了不同的画面裁剪方式,并考虑将每位玩家的侧边分别处理。

运行两次检测流程会增加计算负担,因此当前版本在一次处理中同时处理两侧画面,并采用最新的可用帧,而不是建立旧图像队列。

光照、物体的角度以及显示的清晰度仍会影响识别效果。在某些视角下,书籍和遥控器的识别可靠性较低,因此可见的识别反馈显得尤为有用。

通过测试过程,界面也进行了调整。我扩大了摄像头视图,缩小了周围文字,并使分数和计时器保持紧凑。

复古的标志和配色赋予了游戏独特的风格,而声音则标志着每一轮的进展。事实上,倒计时在最后阶段变得更加明显,在最后五秒内每秒都会发出一声提示音。

在项目开发过程中,App Lab 也不断优化。在更新了应用程序和电路板后,我重新检查了安装设置,以便 App Lab 能够管理游戏、模型服务和启动过程。GPT-5.6 及后续版本的 GPT-6 在开发和视觉设计方面给予了我很大帮助,而后者并非我的强项。通过电视进行测试,帮助我确定哪些改动真正让游戏更易于使用。

在家搭建设备

硬件包括一个 Arduino UNO Q、带麦克风的 USB 网络摄像头、带电源的 USB-C 集线器,以及一台电视或 HDMI 屏幕。集线器需要 PD 电源输入、HDMI 输出和一个用于连接摄像头的 USB 数据端口。

将电源连接到集线器的 PD 端口,集线器连接到 UNO Q,摄像头连接至 USB,屏幕通过 HDMI 连接。调整摄像头位置,确保两支队伍都能在光线充足的情况下清晰可见。应用程序以 ZIP 归档形式打包,供 Arduino App Lab 导入,其中包含离线语音模型。导入后,通过 App Lab 下载所选的目标检测和语言模型,然后运行程序。

App Lab 的“开机自动运行”功能可在电路板启动时自动运行该应用。包含的电视设置脚本可配置自动桌面登录、全屏显示和HDMI音频。

仓库中的README文件包含了安装命令和连接图。通过修改python/objects.json中每个条目的启用字段,可以调整对象列表以适应您家中现有的设备。

设置完成后,玩家仅需使用摄像头和电视这两个接口即可。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭