2022-1-6 01:15:51 [显示全部楼层]
151浏览
查看: 151|回复: 2

[教程] 【AI2+AI】个人图像分类器:PICaboo(躲猫猫)

[复制链接]
本帖最后由 szjuliet 于 2022-1-6 01:15 编辑

01a_ShowHideFace.png 02a_TrainingML.png SillyFace.png

【AI2+AI】个人图像分类器:PICaboo(躲猫猫)

难度: 中级

课程类型: 教程

学科: 计算机科学

年级:

  • 6~8年级
  • 9~12年级

本教程由Youth Mobile Power提供

项目启动文件: Personal Image Classifier: PICaboo

教程地址: https://appinventor.mit.edu/explore/resources/ai/picaboo[/p]
机器如何了解世界?在某些方面,计算机就像非常年幼的小宝宝,总是吸收新的例子,并试图把它们感觉到的东西放进不同的桶里——狗、猫、熟悉的面孔、陌生人。

在这两部分的教程中,你将学习一种名为机器学习(ML)的人工智能(AI),探索一个名为“图像分类”的例子 ———— 一种计算机将它们看到的东西放入不同容器中的方法。你将创建一个app,它可以看到你做出的人类手势并智能响应!

1. 项目简介

本教程使用自己的个人图像分类(PIC)模型制作一个“躲猫猫”游戏。在游戏中,当你露出脸时,小宝宝会笑,你遮住脸时,小宝宝会哭。

什么是“躲猫猫”游戏?

小宝宝不太明白如何理解自己周围的视觉世界。他们缺乏一种理解,即物体在看不见的情况下仍然存在。这个概念被著名的儿童心理学家让·皮亚杰(Jean Piaget)描述为“客体永存性”(object permanence)。在美国,父母经常和他们年幼的宝宝玩一种叫“躲猫猫”的游戏。在游戏中,父母会用手或枕头等将自己的脸藏起来,在宝宝吃惊的时候脸“消失不见”。然后妈妈突然露出脸来说:“躲猫猫,我看见你了!”——这让宝宝非常高兴,他惊讶地看到父母突然“不知道从哪儿冒出来”。这里有一个躲猫猫的视频

机器学习理解视觉数据有点像小宝宝学习视觉线索。小宝宝和计算机都需要很多例子(大量的训练数据)。此外他们还需要示例的类别易于区分(在视觉上截然不同的数据类)。

重要提示:请注意不能使用模拟器来测试app。模拟器不能运行MIT App Inventor扩展,如PersonalImageClassifier (PIC)扩展。为了确保移动设备具备PIC所需的硬件能力,在AI2伴侣上运行LookTest.aia文件(可在附件中下载)进行测试。如果在手机屏幕顶部的状态显示“status: Ready!”,说明 PersonalImageClassifier 扩展可在手机上正常工作。如果屏幕没有显示,手机将无法运行app及对应的扩展。如果扩展能够正常工作,请将设备指向一个对象并按下“分类”按钮,尝试对某些对象进行分类。

2. PICaboo 第1部分:训练模型

首先,需要训练一个图像分类模型。这个训练在App Inventor - 个人图像分类器页面进行。按照PICaboo第1部分pdf文档(可在附件中下载)中的说明进行操作。在本步骤的最后导出model.MDL文件到你的计算机。在本教程的下一部分中,你需要将这个文件上传到App Inventor。

3. PICaboo 第2部分:设计和编写app

图形用户界面 (GUI) 的示例位于启动文件中(请在附件中下载)。 (如果你愿意,可以更改组件的属性以获得你想要的外观。但是不要重命名组件,因为本教程将参考说明中的给定名称。)

4. 上传训练好的模型文件

单击“非可视组件” PersonalImageClassifier1。 该组件将根据你训练的模型对你的姿势进行分类。

通过单击“模型”属性并选择保存在电脑中的模型文件并上传。

5. 事件序列

下图显示了 PICaboo 中的事件序列。 用与正确事件对应的字母填写缺失的块。

(正确答案:从左至右为A, B, C)

6. 查看已有代码

现在切换到“逻辑设计”来为app编写行为。 首先查看启动文件中已经有的代码块。 这些代码块在app首次启动时设置 PersonalImageClassifier

如果 PersonalImageClassifier 返回错误,事件块会在 StatusLabel 中显示错误。

当分类器准备好开始对图像进行分类时,将调用 块。 StartButtonToggleCameraButton 已启用。 “Ready”显示在StatusLabel中。 BarLabel1BarLabel2 被分配了模型标签的名称(“Me”和“NotMe”)。 这些是你在模型中训练的分类。

当按下 ToggleCameraButton 时,摄像头从前置摄像头切换到后置摄像头,反之亦然。

StartButton 会停止或启动 PersonalImageClassifier 分类过程。 按钮文本从“Start”变为“Stop”,反之亦然。

7. 图像分类结果(第 1 部分)

现在我们终于来到提供分类模型重要结果的代码块。在编码之前,让我们看看这个来自组件 PersonelImageClassifier数据是如何接收和使用的。

当分类器为其所见生成分类时,将调用 事件处理程序块。在本教程中,你的主要任务是完成此块中的代码。

以称为“字典”的数据结构的形式列出了分类。在计算机科学中,字典存储键/值对 ———— 很像现实世界的字典存储单词及其定义。但与现实世界的字典不同,字典数据结构可以保存与任意值关联的任意键。它们几乎可以是任何类型:字母、单词、多字串、数字以及所有这些的组合。下面是一个例子:

在上面的键/值对示例中,键是“Name”,值是“Tel”。这个字典是一本普通的电话簿。

8. 图像分类结果(第 2 部分)

PersonelImageClassifier 返回的列出了两个类(“Me”和“NotMe”)的名称(键)及其置信度(值)。 下面的代码块代表了这个数据结构。 (注意:字典按置信度从高到低的顺序列出了结果中的键/值对。)

在此示例中,由具有 0.925(即 92.5%)的高置信水平的分类“Me”和具有 0.075(即 7.5%)的低置信水平的分类“NotMe”组成。 这些置信水平由你在训练阶段创建的模型计算得出。 在这种情况下,PICaboo app中的婴儿会微笑,因为计算机确信它看到了你的脸。

9. 图像分类结果(第 3 部分)

要从中找出特定键的值,可以使用代码块。 在下面的示例中,如果你在给定的字典中搜索关键字“Me”,会得到 0.925 ———— 其相关的置信度(值)。 如果没有匹配的键,返回的值是 0。

10. 获得分类

事件处理程序块通过初始化两个局部变量开始。 (局部变量只能在定义它们的代码块内使用。)

  • :是“Me”类(显示面部)的置信度。
  • :是“NotMe”类(隐藏面部)的置信度。

你很快就会看到代码如何使用上面这些局部变量。

11. 初始化变量

将变量 初始化为与每个类“Me”和“NotMe”相关的置信水平。 (请记住,这些置信水平是 返回的字典数据结构中的值。)

提示

如图所示初始化局部变量。 如果将鼠标悬停在参数上,会看到所需的块。 请务必用数学块中的“0”替换默认的“未找到”文本块。 这确保在分类器尚未返回结果的情况下分配 0% 的置信水平。

解决方案

12. 事件序列概括

当分类器得到分类时,你可以:

  • 正确设置percent1文本和BarGraph1宽度百分比。
  • 正确设置percent2文本和BarGraph2宽度百分比。
  • 如果置信度较高的分类是“Me”(意味着机器非常确信它看到了你的脸),那么就显示开心宝宝图像,隐藏难过宝宝图像,并将Screen1背景设置为浅绿色。
  • 否则,显示难过宝宝图像,隐藏开心宝宝图像,并使Screen1背景为浅粉色。

13. 设置Percentage和BarGraph

首先将 Percentage1 文本设置为“Me”类的置信度。 该值是 0 到 1 之间的小数,因此你需要将其转换为百分比(乘以 100)并添加“%”符号。 例如,如果置信水平为 0.75,则此适当百分比为 75%。

其次,请注意 BarGraph1 是一个彩色标签,通过其宽度显示“Me”类的置信度。 相应地设置其 WidthPercent。 你可以复制你编写的早期代码的一部分。

最后,对 Percentage2BarGraph2 做类似的事情。 对于这些情况,请务必使用 局部变量。

提示


解决方案

14. 构建条件语句

现在构建   条件块,它测试具有更高置信度的类是否是“Me”分类。 这意味着计算机会以更高的置信度识别出你的面部。

提示

解决方案

15. 显示开心宝宝和难过宝宝

首先为then 部分构建代码:

  • 将 Screen1 背景颜色设置为浅绿色。 (使用模板中已有的浅绿色色块。)
  • 显示开心宝宝图像。
  • 隐藏难过宝宝图像。

现在,为   的 else 部分构建代码并将这些代码块对齐到它们所属的位置。 (使用模板中已有的浅粉色色块。)

提示

解决方案

16. 完成代码

完成后整个代码应如下所示:

17. 测试app

你能和屏幕上的宝宝一起玩躲猫猫吗? 连接到 AI 伴侣来测试app。 记得在遮脸时将手指张开一个裂缝来观察宝宝的反映。 宝宝是不是你一露脸就笑,一遮脸就哭? 置信度水平会发生什么变化? 当你的手在你面前上下挥动会发生什么?置信度水平会发生什么变化?

恭喜你完成了! 你已经创建了一款人工智能app,它使用机器学习对图像进行分类并智能地响应你的操作。

拓展你的app

以下是扩展项目的一些想法。探索这些想法或想出你自己的拓展!

  • 重新训练你的模型,除了识别你露脸(“我”)和隐藏你的脸(“NotMe”)之外,它还可以识别第三种面部姿势,例如你做出傻乎乎的表情(“Silly”)。确保最后一个类在视觉上与前两个类不同(例如,明亮的颜色或其他显着特征可能会改进模型。)

    • 保存 PICaboo app原始代码的副本,然后将新代码添加到该副本中。
    • 上传一个新的和扩展的机器学习模型。然后更改代码,现在三个类的置信水平有三个条形图。
    • 更改代码以操纵三个宝宝图像来响应每种情况(开心宝宝、难过宝宝,以及看到傻乎乎的脸而大笑的宝宝)。

  • 一个宏大的分类项目可以是制作一个使用个人图像分类器 (PIC) 自动计算课堂出勤率app。

    • 在 PIC 训练器中,为教室中的每个学生(“Eva”、“Philip”、“Andrea”等)创建一个分类,并为每个分类(学生)从不同角度拍摄该学生的 25 张照片。

    • 使用这些照片来训练分类器。 (分类器可能需要额外的时间来处理大量图像。)

    • 接下来测试你的模型,看看它是否能正确识别随机选择的学生。

    • 如果模型准确并且你构建了一个好的app,那么老师只需要让每个学生在上课开始时通过运行此app的移动设备即可。当学生被高度信任地认可时,该学生被标记为出席。

    • 明智的做法是先为一小部分人(例如五个人)制作此app的简化版本,以便你了解代码将如何更改。

    • 在此过程中,你可能会发现 PIC 程序的一些固有局限性。记下这些并让 MIT 团队知道。

  • 你有哪些奇妙的想法?

关于Youth Mobile Power

我们很多人整天都在手机上度过,痴迷各种app。尽管我们知道手机会对我们的注意力、隐私甚至安全构成威胁,但我们还是继续打字和刷手机。但“口袋里的电脑”也为年轻人创造了未开发的机会,让他们学习、联系并改变我们的社区。

这就是为什么麻省理工学院和YR媒体联手推出了青年移动动力系列。YR青少年制作故事,突出年轻人如何以令人惊讶和强大的方式使用手机。与此同时,麻省理工学院的团队正在不断改进MIT App Inventor,让像你这样的用户能够创建像YR报道中提到的那样的APP。

回归初心:从故事中获得灵感,开始制作你自己的app吧!

YR和麻省理工学院的合作部分得到了美国国家科学基金会的支持。本材料基于美国国家科学基金会在批准号下支持的工作。(1906895, 1906636)。本材料中所表达的任何意见、发现、结论或建议均为作者个人观点,并不一定反映美国国家科学基金会的观点。

点击此处查看更多由YR创建的app和交互式新闻内容。

PICaboo_Part1.pdf

1.39 MB, 下载次数: 3

售价: 1 创造力  [记录]  [购买]

模型训练教程

LookTest.zip

3.38 MB, 下载次数: 3

售价: 1 创造力  [记录]  [购买]

测试手机是否支持PIC拓展

PICaboo_Starter.zip

5.93 MB, 下载次数: 4

售价: 1 创造力  [记录]

包含必要拓展及代码的启动文件

云天  高级技匠

发表于 2022-1-7 22:01:19

照着做了一遍,有些地方,需要自己改一下才行。又多了一项技能!!!
回复

使用道具 举报

szjuliet  版主
 楼主|

发表于 2022-1-10 18:55:28

云天 发表于 2022-1-7 22:01
照着做了一遍,有些地方,需要自己改一下才行。又多了一项技能!!!

谢谢云天老师的反馈~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail