在 Scratch 中使用图像训练器训练你自己的 AI
在 Scratch 中使用手势或物体训练你自己的图像识别模型,然后使用训练好的指令控制 Pishi 并抓住老鼠。
难度
中级
预计时间
40–50 分钟
扩展
IMAGE TRAINER
📖 你将学到什么
- 如何创建和命名图像训练器标签
- 如何用自己的样本训练一个 AI 模型
- 如何用手势或物体作为视觉指令
- 不同的训练样本如何影响识别效果
- 如何使用检测到的标签来控制 Scratch 角色
- 当某个指令需要改进时,如何添加额外训练
- 如何重置、保存和加载训练好的模型
- 左(Left)
- 右(Right)
- 上(Up)
- 下(Down)
- 无指令(No command)
🛠️ 构建你的项目
1. 设置五个 AI 标签
当绿旗被点击时,首先检查 Pishi 是否已经训练过。
If train done = 0, introduce the training:
"嗨!在我们开始玩之前,你需要先教我你的指令。"
"我将学习五个指令:左、右、上、下,以及无指令。"
然后为五个图像训练器标签命名:
- 标签 1:左(Left)
- 标签 2:右(Right)
- 标签 3:上(Up)
- 标签 4:下(Down)
- 标签 5:无指令(No command)
在训练过程中,项目还会展示一些有用的小提示:
- 保持指令清晰可见
- 使用良好的光线和简单的背景
- 使用手势或物体二选一
- 让摄像头画面中不要出现多余的物体或身体部位
- 在摄像头画面中移动指令的位置
- 在不同距离展示指令
这些变化能帮助 AI 在不同位置或大小下学习该指令。
2. 训练全部五个指令
将 counter 设为 0,然后重复五次:
- counter 增加 1
- 运行"训练标签(counter)"
这样会依次训练全部五个标签。
自定义的"训练标签(数字)"积木首先会检查该标签是否已经包含训练数据。
If it does, Pishi warns:
"这个标签已经有训练数据了。如果要重新开始,请按 R 键并确认,以重置所有已训练的标签。"
否则,Pishi 会宣布当前的指令:
教我:(标签名称)
经过短暂的倒计时后,项目会采集 20 个训练样本。
在 Pishi 采集样本时,请使用前面提到的训练技巧。
对于"无指令",只需移开移动手势或物体,展示正常的摄像头画面即可。
每个标签完成后,Pishi 会说:
我学会了:(标签编号名称)
当全部五个标签都完成后:
"太好了!训练完成。"
然后设置:
train done 设为 1
3. 开始游戏
训练完成后,设置:
time 设为 0
并广播:
Start Game(开始游戏)
如果 Pishi 已经训练过,项目会跳过主训练环节并说:
"我已经知道你的指令了。让我们去抓老鼠吧!"
它还会提醒玩家:
"如果要重新训练我,请按 R 键并确认,以重置所有已训练的标签。"
"如果要重新训练我,请按 R 键并确认,以重置所有已训练的标签。"
4. 用你训练好的 AI 控制 Pishi
在游戏过程中,图像训练器会持续检查摄像头,并报告当前: 检测到的标签名称
用它来控制 Pishi:
- 左:x 坐标改变 -10
- 右:x 坐标改变 10
- 上:y 坐标改变 10
- 下:y 坐标改变 -10
- 无指令:不移动
玩家不再通过按键盘来控制,而是使用自己训练出的视觉指令来移动 Pishi。
5. 抓住老鼠
当老鼠收到 Start Game(开始游戏)广播时:
- 将 score 设置为 0
- 移动到一个随机位置
- 重置计时器
游戏持续进行 20 秒。
每当 Pishi 碰到老鼠时:
- score 增加 1
- 播放一个音效
- 将老鼠移动到另一个随机位置
- 老鼠会一直朝向 Pishi,同时计时器的数值会被复制到 time 变量中。
当计时器达到 20 秒时:
- 将 time 设为 FINISH(结束)
- 播放结束音效
Pishi 会停止移动,返回起始位置,并说:
"时间到!"
6. 改进、重置、保存或加载模型
第一轮训练会给每个标签20个样本,但有些指令可能仍需要更多样本。
为此,创建自定义积木:训练单个样本(数字)
将其连接到以下按键:
左箭头对应标签1,右箭头对应标签2,上箭头对应标签3,下箭头对应标签4,数字键0对应标签5。
如果某个指令识别不够可靠,可以清晰地展示该指令,并多按几次对应的按键来添加更多训练样本。
你还可以管理整个已训练的模型:
- R:重置所有标签,下次运行时重新训练
- S:保存学习数据
- L:加载之前保存的学习数据
这样你就可以只在需要的时候改进模型,而不用每次都重复完整的训练流程。
🚀 试试你的项目!
点击绿旗,并允许访问摄像头。
选择你想用什么方式来表示每个指令.
例如:
- 不同的手势
- 彩色卡片
- 小物件
- 打印出来的符号
训练"左"、"右"、"上"、"下"和"无指令"。
训练完成后,用你的指令在舞台上移动 Pishi,在 20 秒计时结束前尽可能多地抓住老鼠。
如果某个指令不容易被识别,可以添加几个额外样本后再试一次。
🤖 它是如何工作的?
通常情况下,一个 Scratch 程序可能会这样写:
如果按下左箭头键:向左移动
但在这个项目中,你并不是直接告诉 Scratch"左"指令长什么样。
相反,你是向 AI 展示了若干个样本。
整个过程是:
展示样本
↓
训练标签
↓
展示新的摄像头画面
↓
图像训练器预测最接近的标签
↓
Scratch 读取检测到的标签
↓
Pishi 移动
这意味着,这个项目的行为不仅取决于 Scratch 代码,还取决于你所提供的训练数据。
这正是机器学习背后的核心理念之一。
💡 让它变得更好!
- 创建你自己的视觉控制器
通过用自己的手势、物体或额外的标签替换原有指令,来定制这个 AI 控制器。例如,你可以用彩色卡片来表示移动指令,或者添加新的动作,比如跳跃、停止、旋转、瞬移或加速。
然后将每个训练好的标签连接到你希望 Pishi 执行的动作上。
- 用训练数据做实验
你提供的样本会影响 AI 识别指令的效果。
试着用两种不同的方式来训练同一个指令:
首先,让你的手或物体始终保持在相同的位置和距离,使用非常相似的样本进行训练。
然后,重置模型,并使用更多样化的样本重新训练:- 将它移动到摄像头画面的不同位置
- 让它离摄像头更近或更远
- 稍微改变一下角度
分别测试这两个模型,比较它们识别指令的可靠程度。
这有助于你理解一个重要的机器学习概念:
更高质量、更多样化的训练示例可以帮助人工智能模型识别新的情况。 - 增加障碍
添加另一个需要躲避的角色。例如:
例如:- 老鼠:+1
- 猫:-1
现在玩家必须更小心地使用这个 AI 控制器。
- 制作另一个由 AI 控制的游戏
同样的思路可以用来制作:- 一个赛车游戏
- 一个迷宫游戏
- 一个飞船控制器
- 一个挡板游戏
- 一个机器人挑战
一旦你理解了如何训练标签以及如何使用检测到的标签名称,你就可以把图像训练器当作许多不同 Scratch 项目的自定义视觉控制器来使用。
🔗 分享你的创作
完成你的项目了吗?
保存你的学习数据,重新创作这个Scratch项目,或者用完全不同的视觉指令制作你自己的游戏。
试着把这个项目分享给朋友,看看他们能不能训练出自己的AI控制器。
