用物体检测在 Scratch 中制作 AI 寻物游戏
让 AI 发现你身边的物品,然后和时间赛跑,把它们再次找出来!
在这个项目中,「物体检测」扩展会先通过摄像头收集它能识别的物品名称。接着,Pishi 会从中随机选出四件物品,挑战你在倒计时结束前逐一展示给摄像头。
难度
中级
预计时间
25–35 分钟
扩展
物体检测
📖 你将学到什么
- 如何用物体检测识别现实中的物品
- 如何读取 AI 当前检测到的物品列表
- 如何根据检测结果建立自己的列表
- 如何统计列表中不同物品的数量
- 如何从列表中随机选择一件物品
- 如何检查某件物品当前是否出现在画面中
- 如何制作有倒计时的 AI 挑战
- 光线、角度、距离和周围物品如何影响检测结果
你不需要事先训练 AI。物体检测使用已经训练好的模型,能够识别许多常见的物品类别。
🛠️ 构建你的项目
1. 准备物体检测器
当绿色旗帜被点击时:
- 将 all objects found 设为 0
- 将 score 设置为 0
- 将 time 设置为 0
- 关闭分类
- 清空 my detection list
然后播放开始音效,并说:
看看 AI 能认出你身边的哪些东西!请一次展示一件物品,至少展示 6 件不同的东西。
打开检测框,再开启分类。
💡 提示:: 在项目开始时,先关闭分类,再重新开启,可以重置检测事件。这样,即使某些物品在程序运行前就已经出现在画面里,「检测到任意物品时」等事件也能正常触发。
检测框可以让玩家看到 AI 在摄像头画面中识别到了哪些物品。
2. 收集识别到的物品
重复执行,直到找到足够多的不同物品。
在循环中:
“将 [当前检测结果列表] 添加到 我的检测列表”
注意: my detection list 通常用于筛选扩展要寻找的物品类别。这个项目以另一种方式使用它:保存 AI 已经发现的物品。该列表只保留不同的物品名称,不会重复添加相同的名称。
你也可以显示当前列表:
“检测到:[my detection list]”
当 my detection list 中的项目数大于 5 时:
- 将 all objects found 设为 1
- 关闭检测框
- 从 my detection list 中移除 person
移除 person(人),可以避免玩家仅仅因为自己已经站在摄像头前,就自动得到一分。
然后说:
太棒了!我找到了这些物品:[my detection list]
最后播放成功音效。
3. 为寻物挑战做准备
给玩家一点准备时间。
先说:
现在来看看你能多快找到它们!
然后说:
如果可以,请把这些物品移出摄像头画面。
这样,下一轮要求寻找的物品就不会一开始已经出现在画面中,挑战也会更有趣。
此时,游戏已经得到一份物品列表:这些物品就在玩家附近,而且 AI 已经成功识别过它们。
4. 随机选择一件物品
将挑战重复 4 次。
每轮开始时:
- 将 time 设置为 0
- 说 「准备好了吗?」
- 倒数: 3…, 2…, 1…
Then choose a random item from my detection list and store it in: “object to show”. For example:
“my detection list 中第 [在 1 到 my detection list 的项目数之间随机取数] 项”
选中后,立即从 my detection list 中移除这件物品。
这样,后续回合就不会再次选中它。
然后说:
请给我看:[object to show]
5. 和倒计时赛跑
显示变量 time,并重置 Scratch 计时器。
重复执行,直到:
time = FINISH
在循环中,不断将:
将 time 设为计时器的值
如果计时器的值大于 5:
- 隐藏变量 time
- 将 time 设为 FINISH(结束)
- 播放失败音效
- 先说: 时间到!我们试试下一件。
否则,继续检查:
“在 [current] 检测结果中,是否检测到第 [1] 个 [object to show]?”
如果检测到了指定物品:
- 将 score 增加 1
- 隐藏变量 time
- 将 time 设为 FINISH(结束)
- 播放成功音效
- 先说: 找到了!
找到物品或五秒钟结束时,这一轮就会结束。
6. 结束游戏
四轮全部完成后,显示最终结果。
先说:
你的最终得分是:[score]
然后播放结束音效。
你也可以说得更清楚一些:
做得好!你的最终得分是 4 分中的 [score] 分。
现在,玩家可以重新开始项目,每次都可能得到不同的物品和挑战。
🚀 试试你的项目!
点击绿旗,并允许访问摄像头。
首先,帮助 AI 发现你身边至少六种不同的东西。
你可以试着展示:
- 瓶子
- 杯子
- 书
- 背包
- 椅子
- 手机
- 笔记本电脑
- 玩具
你不需要准备任何指定的物品。试着展示身边的东西,观察检测列表如何增长。
找到足够多的物品后,如果可以,请把它们移出画面。
接下来准备接受挑战!
Pishi 会逐一选出四件刚才检测到的物品。
每一轮,你都有五秒钟找到指定物品,并把它展示给摄像头。
你能找到几件?
🤖 它是如何工作的?
这个项目主要分为两个阶段。
首先,AI 探索玩家身边有哪些物品:
摄像头看到你身边的物品
↓
物体检测识别画面中的物品
↓
Scratch 读取当前检测到的物品名称
↓
将名称加入 my detection list
↓
游戏等待,直到找到足够多的不同物品
然后,游戏开始:
从 my detection list 中随机选择一件物品
↓
请玩家展示这件物品
↓
开始五秒倒计时
↓
物体检测检查当前摄像头画面
↓
如果检测到指定物品,增加一分
↓
换一件物品,开始下一轮
这个项目根据 AI 已经在玩家身边识别到的物品生成挑战,因此游戏更灵活,也更容易找到指定的物品。
💡 让它变得更好!
- 查看 AI 的置信度
用置信度显示 AI 对每次检测有多确定。
例如:
「我有 91% 的把握认出了这个瓶子!」
在不同条件下展示同一件物品,看看置信度会怎样变化。 - 只接受置信度足够高的检测结果
只有当置信度高于某个阈值(例如 0.7)时,才算成功找到物品。
如果置信度太低,Pishi 可以请玩家把物品展示得更清楚。 - 从不同角度挑战 AI
从不同的角度和距离展示同一件物品,并尝试改变背景和光线。
看看哪些变化会让 AI 更容易或更难识别它。 - 加入位置挑战
找到正确的物品后,请玩家把它移到指定位置,例如:
「移到左边!」或「放到中间!」
用物品的 x 和 y 位置检查它在哪里。 - 测试 AI 的识别稳定性
多次展示同一件物品,统计 AI 正确识别了多少次。
比较不同物品,找出模型最容易稳定识别的物品。 - 用物品大小设计新挑战
利用检测到的宽度或高度,请玩家把物品移近摄像头,或拿得更远一些。
这表明物体检测除了识别物品是什么,还能提供物品在画面中的大小信息。
🔗 分享你的创作
完成你的项目了吗?
把它变成你自己的作品吧!改变规则、画面、音效、难度或 AI 的行为。加入新挑战、设计不同主题,或结合其他项目的创意。
然后把你的版本分享给朋友,看看他们会做出什么!
