| 扬声器 |
抄本 |
| 海蒂·哈德纳 |
您好,我是海蒂·哈德纳 (Heidi Hardner),来自明尼苏达州明尼阿波利斯。 |
| 塞尔凯·奥尔梅兹 |
我是 Serkay Olmez,从科罗拉多州朗蒙特拨打电话。 |
| 海蒂·哈德纳 |
我们在希捷科技公司工作,我们俩都长期使用 JMP 和 JSL,并与同事分享 JMP 脚本。我们将演示 JMP 数据表中 ??? 图像的一些用例,并分享一些相关的 JSL 工具。 |
| |
在希捷,记录磁头要经过大量的工厂工序,从晶圆制造到驱动器的安装。 |
| |
因此,我们经常查看非常广泛的数据,其中每个头都是一行,并且有很多列。 |
| |
由于许多过程产生的图像可能包含每个头部的许多不同图像,或者我们可能从经过单个过程的许多头部获得非常高的数据,在计量图像中看起来非常相似。 |
| |
我们今天下载的数据集不是 Seagate 图像,但它们与这些情况有相似之处,我希望这些相似之处可以帮助您与自己的用例进行比较。 |
| |
JMP 已经有好几年的图像和数据表了,但我个人却不太欣赏它。 |
| |
我希望您能够在这些用例中看到它的价值,特别是通过图像与其他数据的灵活交互式连接。 |
| |
我还想强调在表中存储图像路径的价值,特别是如果您可以共享路径。 |
| |
最后,我们都会分享将在辅助材料中演示的 JSL。所以,这才是真正的要点。这份 PowerPoint 的末尾有一个目录。 |
| |
大部分对图像有用的探索都是非常基础的,我们的脚本无需 JSL 知识即可使用,但它们也包含您可以在自己的 JMP 脚本中构建的各种内容。 |
| |
包括可公开访问的图像路径在内的三件事是我的第二个收获。 |
| |
第一个是来自大都会博物馆在线目录的数据表。它包含数据表中每个对象或行包含多幅图像的示例。 |
| |
浏览星表对我来说就像一个巨大的兔子洞,我强烈推荐。第二个数据集是天文图像。感谢科学棚天文台的Russ Durkee。 |
| |
这是每行图像的计量数据,乍一看,这些图像彼此非常相似。所以请注意,这与我刚才提到的录音头工厂数据用例的相似之处。 |
| |
说到我遇到的难题,第三件事是实现 Omeka API 的 JSL |
| |
访问在线学术馆藏。感谢 Heather Shirey 博士帮助我访问这些数据库。她的城市艺术地图项目也很有趣,值得一看。 |
| |
但这里的技术要点是,任何人都可以使用此代码来体验查询数据库并获取将图像路径与其他数据混合的结果,以制作我们的工具所围绕的那种表格。 |
| |
那么,我们接下来要开始 JMP 的现场演示。在讨论这类数据集之前,先想一下,如果你只有一堆图像怎么办? |
| |
文件夹中的图片表。这个功能的作用是让我们选择一个文件夹。我有一个文件夹,里面有一些来自 |
| |
Met 目录数据。你可以看到它包含一些文件夹,当我选择这个文件夹时,我很快就得到了一个表格,其中包含 |
| |
在列中,所有这些标签都指向图像。它会深入挖掘它认为是图像的文件扩展名,并拆分出一些文件夹用于 |
| |
子文件夹作为数据中的属性。现在我们经常遇到这样的情况:文件夹名称中包含了某种有意义的属性,我们希望这些数据具有这种属性。 |
| |
这是一个您可以在我的 Seagate 版本中进一步自定义的脚本,通常我在文件名中嵌入了一个头标识符,因此我可以对该脚本进行解析,该解析会自动内置到我个人版本的脚本中。 |
| |
让我们快速看一下我们的主要示例数据集之一。这就是我提到的博物馆数据。它更有意义,你可以看到它有 |
| |
每个对象都有一行,但其中包含一些数值数据。对,它列出了所有对象。它包含一堆属性数据。所以有很多…… |
| |
这里有一个更丰富的数据集。但是如果我们滚动一下,你会看到数据集里面是图片的路径,也就是图片所在的 URL。 |
| |
托管,您可以看到这里的某些行最多有五张不同的图像。 |
| |
因此,我的第二个工具“图像表重要图像”实际上就是将图像导入表格,它可以容纳多个路径。这些路径也可以是本地路径,不一定是 URL。 |
| |
一旦这些演示数据共享完毕,你就可以去获取……已经完成了。我想快速说一下……快速讲一下它在幕后做了什么。 |
| |
当 JMP 打开它识别的图像时,它可以是一个图像对象。图像对象可以接收许多 JSL 命令消息,例如获取大小、获取像素、保存图像等。您可以在我们分享的代码中看到这些命令。 |
| |
开始吧,我想看看结果……把图片拖进表格。除了粘贴图片之外,这个脚本还做了一些其他的事情。 |
| |
是的……让我再举个例子,看看其他一些代码片段。图像放在一个表达式类型的列里,所以它创建了一个表达式数据类型,用来存放图像。 |
| |
我还为该列创建了一个事件处理程序。它使用一个特殊的消息来通知图形框,将图像添加到图像对象,并直接添加到图形框中。我会向你演示它的作用,但它是……点击事件处理程序。 |
| |
而且它的尺寸也在调整,所以事实上它变高了,以适应稍大一点的东西。 |
| |
这是你可以做的,我的脚本可以做到这一点,但默认情况下,你知道,如果你把图像放进去,你可能会得到像这样非常小的东西,这可能很酷 |
| |
用于查看大型阵列,但也许值得知道的是,您知道,这似乎就像,我不知道如何才能看到我的图像在 JMP 中变得如此之小,您也可以手动将它们加宽。 |
| |
脚本也会嵌入到表格中。知道如何操作很有用,这里的逻辑是, |
| |
当我们嵌入所有这些图像时,数据表变得非常大,并且嵌入了完整的图像 |
| |
发生这种情况时,嵌入的完整图像的数据会被删除。所以我可能想把这组数据集发送给其他人,让他们可以直接获取,而无需了解我的特殊工具菜单。他们可以运行这个工具重新导入图像。 |
| |
在“单击”中,我想展示的是当您单击此处时,它会生成一个全尺寸或更大版本的图像供您查看。 |
| |
所以就像我说的,数据表中包含图像的很多好处其实都体现在 JMP 的简单探索功能上。比如,我可以取出这些列,然后重新排序。 |
| |
只需将它们移到其他位置,查看整个文件大小表就会更有趣。 |
| |
这样,我就可以浏览,可以排序,可以在这里看到按数量对图像进行排序,或者按有效图像数量对行进行排序。 |
| |
如果我向下滚动,就能直观地看到,通过重新排列,我可以在旁边看到不同的感兴趣列。实际上,我可以在网格中看到很多图像。 |
| |
在桌子上。这里,我有一个分组,并创建了我自己的分组列。这样我就可以重新排列它。只需重新排列列,我就可以把它贴在图片旁边。 |
| |
方便我滚动查看。所以,移动、排序和重新排列图片也是将图片放在一个 |
| |
表格。我的个人用例之一是监控来自图像的一些重要指标,在我的例子中,这些指标实际上来自不同图像的组合。 |
| |
我会查看这些数据或寻找数据中反复出现的异常值和可疑模式。 |
| |
在这个用例中,我不会有 85 个,而是有数万行正在查看的数据,而图像将成为探索数据问题的有用部分。 |
| |
我先画个示例图,就像这样……在这个例子中,这些博物馆藏品的高度乘以宽度。我快速返回,演示一下你可以做的事情。右键单击此处,我可以用第一列创建一个标签。 |
| |
所以,如果我查看数据,我可以检查一下,发现有什么东西突出来了。为什么它的宽度比高度大得多?嗯,这不是错误。它真的是一个宽的 |
| |
那里有艺术品,所以这很合理。这样我就能弹出一个事实。如果我有很多不同的东西都夹在下面的这个集群里,看起来好像有很多 |
| |
这些体型相似的家伙,也许看起来很有趣。 |
| |
再说一次,我可以,我可以用标签单独查看它们。但如果我的数据真的很大,我可以做其他探索性的事情。我可以回到数据,用 F7 键翻页 |
| |
对于已选定的事物。当然,有了选定的事物,我可以对其中一些进行子集化,这样就能得到 |
| |
只是一个较小的数据集。我想展示的一个探索性的东西,也是我最喜欢的东西之一,是在行选择下。 |
| |
我可以进行名称选择和列操作。所以说这是一种奇怪的模式,而且我已经知道我想称之为“怪胎”,这样做。 |
| |
我会说,嘿,这些数据里有一些异常,我想去检查一下。它会在最后给我一列,用1和0来表示这些异常是否是异常。 |
| |
它的部分用处在于,假设我的数据集非常大,那么就只能分页浏览。不太好。 |
| |
假设它太大了,我不想把图片放进去。我不想把它们拖进去,这不现实。所以我又回到了我的数据集。 |
| |
我对这些奇怪的数据很感兴趣。我可以进入子集,而不是仅仅对它们全部进行子集化,比如说,这个组中可能有数千个数据,我可以使用该列进行分层。 |
| |
所以这里我可以说,比如,我只选了 11 个,假设我要选 5 个。我要选择对异常值进行分层。 |
| |
我会得到五个“奇数”和五个“非奇数”,随机选择。你知道,我可以对它们进行排序,然后把图片带回来。所以现在我可以说,好吧,我只是想看看, |
| |
也许我只想看到一和二,不管怎样,只针对小集合。所以,再次强调,希望这能说明,即使是非常大的数据,沿着这些路径拖动似乎也没什么用。 |
| |
如果有图片,或者你知道可以把图片放进去,我可以……他们会得到一个子集。然后我可以浏览这些图片,看看这些奇怪的图片有什么不同。我可以把它们整理出来。 |
| |
现在我想展示另一个用例。 |
| |
这个用例是我学习对图像进行一些深度学习分类,所以 |
| |
在这种情况下,您知道...在这种情况下,我真正强烈地意识到图像实际上就是数据。 |
| |
这里有一个例子。当然,就我而言,我查看的记录有不同的观点。我试图对这些不同的观点进行分类。 |
| |
感觉对了???还有一些其他的东西,重点放在头部的不同部位。所以在这里,我用艺术数据中的猫雕像来模拟,并将它们分类。这是背面的、面向右侧的、面向前方的等等。 |
| |
你知道,这个,这个,整个机器学习项目并没有在 JMP 中进行,但那里有需求 |
| |
为这个 Python TensorFlow 分类产品提供训练数据。最后,查看返回的结果,你会发现,它最终会以文件夹中嵌套文件的形式呈现。所以,让我快速展示一下我们的另一个工具。这张图片 |
| |
好了。图像表。这些工具。 |
| |
两个文件夹,这里是...我可以挑选图像。 |
| |
这些是数据表中的路径或图像,我可以选择一些属性列并将它们转换成 |
| |
嵌套文件夹类别的文件夹。在这里,我将告诉它使用我的文件名列作为名称。 |
| |
我通常都可以添加一些前缀或更改大小。调整大小是机器学习中另一个真正重要的事情。我已经设置了我的模型,它肯定会上传特定大小的图像。然后,当它运行时,它会发送我的图像 |
| |
进入文件夹。 |
| |
这里出了问题。 |
| |
我再做一次。图片……图片表到文件夹。 |
| |
我觉得我点错了。这里有我的机器学习图片文件夹,我想快速把这些图片放进去。 |
| |
修改一下。 |
| |
单击文件名。 |
| |
它会将它们排列在文件夹中。 |
| |
这里有我的测试数据集和训练数据集,哎呀,我选错了类别。让我们根据我在列中选择的内容对它们进行分类。 |
| |
所以这里的想法是,你知道,我需要把我的分类数据放入文件夹结构中。 |
| |
关于这一点的另一件事是,它在数据中很有用...在 JMP 的数据表中执行此操作,因此提出这些类别培训很有用。 |
| |
JMP 中的组。我已经展示了我们可以进行分层,这里还有另一个例子,因为我有数据,其他数据列,比如部门,在 |
| |
在数据集里。我可以回头看看,比如,我是不是均衡地划分了测试集和训练集?所以,比如说,当我处理埃及艺术时,我在埃及艺术方面做得很好。 |
| |
一部分用于任务,一部分用于训练,其他类别的数据并不多。所以在JMP中,我知道我拥有其他数据。 |
| |
列。它们很方便地组成我的测试训练集,确保我有平衡的组,而且我还可以保存这个表并记录其中的内容…… |
| |
我参加的培训内容是这样的。最后我想说的是,博物馆的数据并没有很好地捕捉到 |
| |
计量图像看起来都很相似。因为这些猫都很独特,你可能需要仔细观察才能发现, |
| |
你知道,这是猫的背面还是脸被磨掉的正面,或者其他什么, |
| |
我会进一步讨论计量图像彼此非常相似的情况。用肉眼浏览这些图像可能非常有用。我们先听听 Serkay 如何使用他的 PowerPoint 工具演示。 |
| 塞尔凯·奥尔梅兹 |
好的,那么让我分享我的屏幕。 |
| |
好吧。 |
| |
因此,我将要讨论的是一个脚本,它使人们能够将 JMP 表中列出的图像推送到 PowerPoint 中。 |
| |
所以你要做的是收集表格中列出的链接中的图片,并使用你选择的模板将它们推送到 PowerPoint 中。你可以使用 |
| |
Heidi 已经展示了代码片段,并且该脚本假设您已经有一个表格并且其中有链接。 |
| |
我将运行该脚本并告诉您该脚本的作用。 |
| |
如果我运行这个程序,它会给你一个界面,你可以在其中选择列作为属性。首先,你需要选择图像路径,这样 JMP 才能知道从哪里收集这些图像, |
| |
你也可以添加标签。这些标签会以列的形式出现在 PowerPoint 中,你也可以决定 PowerPoint 中的布局类型。所以我只显示一个网格 |
| |
首先布局。所以在这种情况下会有四列两行。然后点击导出。它会触发 PowerPoint,然后 PowerPoint 会 |
| |
去收集这些图像,它将构建幻灯片,这将需要 10 到 20 秒,因为它从服务器中提取 20 张图像。 |
| |
一旦完成,您将获得一个布局良好的 PowerPoint。记住,这些列就是您在 UI 中一开始选择的列,表格就是从这些列生成的。所以您可以快速获得这个,当然,您也可以更改 |
| |
布局在这里。例如,假设你想做 |
| |
不一样。这里有一个布局选择。假设你想做一行,并在下方留一些空间,这样你就可以在那里添加一些注释。所以你可以重新运行这个 |
| |
然后 JMP 会告诉 PowerPoint 如何设置布局。完成后,每张幻灯片都会有一行图像。 |
| |
看起来像这样 |
| |
该脚本的另一项功能是将幻灯片按类别拆分。或者,也许你的数据中有一个顶级属性,你想开始……你想开始一张新的幻灯片 |
| |
当该属性发生变化时。例如,假设你把这个介质放入幻灯片标签中,它就会在顶部创建幻灯片标签。就像标题一样。 |
| |
它还将这个小型 PowerPoint 演示文稿分成了不同的类别。因此,每次这个“媒介”属性发生变化时,它都会开始一张新的幻灯片。如果我这样做, |
| |
它会在 10-20 秒内再次执行相同的操作。现在,它会将它们分组到不同的类别中。这样,你就会有一个很好的布局 |
| |
一组幻灯片, |
| |
哪些会被拆分。例如,你有一个中等等于黄铜的幻灯片,你会有一个青铜的幻灯片,而且似乎只有一个项目。我在数据中选择了???行,将会有陶瓷等等。这样就把幻灯片分开了。 |
| |
最后,我要演示的是,有时人们会想要更复杂的布局。例如,在模板中,他们可能希望看到一张图片 |
| |
尺寸更大,所以他们想在左边放一张大图,或者在右边放几张。所以你可以做这么复杂的模板 |
| |
通过选择不同的布局,这些都由脚本完成。所以我有一个从大到小的布局。左侧会有一张大图像,右侧会堆叠两张小图像。所以,如果你只是这样做 |
| |
它会做同样的事情,但现在布局不同了。 |
| |
我会花 10 到 20 秒的时间来制作幻灯片。 |
| |
好了。左边是一张大图,右边是两张小图。 |
| |
最后我要展示的是如何自定义这个工具。我们将把这个工具作为这个大型插件的一部分发布,这个插件可以完成所有图像处理工作。如果我快速打开这个插件, |
| |
这是用户可自定义的,用户可以进入并更改他们想要自动放入角色的列类型。 |
| |
用户可以自己设计不同的外观。最后我要提一下专门的模板。这些模板 |
| |
我刚才展示了一个从大到小的版本,它们是由工具外部的脚本创建的。所以我们会提供两个版本。但这个想法是,如果用户经验足够丰富,他们就可以开发 |
| |
他或她自己的模板并将其放入工具中,该工具就会识别它,或者开发人员可以开发越来越多的模板 |
| |
指定……特定于特定客户或特定用户。所以,这将是我们即将发布的插件的一部分。这就是我所有的了。海蒂可以收回它。 |
| 海蒂·哈德纳 |
好的,好的。 |
| |
抱歉。我回来了 |
| |
现在我们来看看不同的数据集。这些是来自“科学棚”的天文图像。 |
| |
正如广告所说,这些图像更……它们是计量图像,你看到的是这张非常小的图像中的一小片夜空。即使在这种非常小的尺寸和范围的图像中, |
| |
你可以看到,你可以看到那里有动静。你可以看到一些异常的东西,就像这里突然冒出来的东西一样。 |
| |
这正是我在机器学习项目中进行分类时想要表达的观点之一,我有一些名义上看起来非常非常相似的图像。滚动浏览并发现像这样的异常情况非常容易。 |
| |
但我实际上会做一个更直观的演示,我们会把它放大,然后再滚动浏览一遍。所以,让我快速地 |
| |
描述我们将要看到的内容。这是这些图像上白色强度随时间变化的视图。当我们滚动浏览它们时,它们是按时间排序的。 |
| |
但有一件事你不会看到,用肉眼很难看出来,那就是强度的这种巨大而缓慢的趋势。 |
| |
我们会贴上标签。你在这里可以再次看到,你用标签来观察。是的,强度是否很高。这是因为60秒曝光的图像中出现了一条条纹,是一些经过的东西。我们也可以透过数据中的凸起看到。这就是你看到的 |
| |
望远镜漂移了,背景稍微移动了一下,然后又重新设置了,我们滚动浏览的时候可以看到。所以这只是一个小小的预览。 |
| |
我将展示如何将其扩大,以便即使在数据表内部,我们也可以看到相当大的图像视图,只是稍微大一点。 |
| |
从时间的起点开始。我希望你们在滚动数据时观察这个点,观察那个物体。 |
| |
希望你们能看到,我们看到它在背景星空的映衬下向左移动。那是一颗小行星,编号2171基辅。 |
| |
也就是说,我们看到的是这些计量图像的真实意图。所以我们只是通过图形演示,在适当的情况下,只需在表格中滚动浏览图像即可。 |
| |
图像表注释。这适用于相反的情况,即你实际上只是想逐一检查图像。 |
| |
当您单击此处时,您可以再次选择使用路径或嵌入的图像。 |
| |
你可以选择使用某种标识符,我们把日期放在这里,或者它只给你一个行号,你可以有另一个属性,让我们把望远镜放在这里, |
| |
数据。它的作用是形成一个小的标记工具,这个工具可以让你 |
| |
做一些通用的分类。这个是三,可以在这里说点什么。对数据进行一些评论。 |
| |
我还有十字线,所以我可以测量。它会测量图像上的像素,并移动十字线来记录位置和 |
| |
当我点击“记录”时,那里的增量和像素。现在,在我们开始之前,你知道,部分原因是有很多不同的方法可以标记商业广告 |
| |
工具,在 JMP 中执行此操作的部分动机是,您除了图像之外,还拥有表中的所有其他数据。 |
| |
它实际上只是用这一列来表示。不过,这部分内容可以自定义。在我的小版本中,我正在查看图像 |
| |
我正在这个视图中打印一张小地图,上面标明了磁头在晶圆上的位置,或者其他一些数据。或者,图像配方中可能标明了尺寸,我可以尝试验证一下。 |
| |
那么,在图像和项目之间建立这种连接功能,是否真的可以实现呢?但是,当我们点击“记录”时,会出现一个画面,我们会看到它们在右侧添加列,然后 |
| |
(这些柱子太高了,让我们把它们缩小一点。) |
| |
您可以在第三行看到并记录下来。不,我不想移动白色十字线,这样我就能得到垂直距离,十字线的位置以及我的评论和分类都固定在表格的正确行中。 |
| |
我们在这里看到的另一件事是另一列图像。我在这里放了一些 JMP 图,JMP 图可以是图像。 |
| |
在我们共享的数据表中,我嵌入了代码。你会看到,它生成了这些图像,并涉及到使用获取像素消息来获取我们已有的图像。 |
| |
获取一个数据矩阵,沿着小行星运动的方向切出一个切片,然后计算平均强度。你可以翻阅并查看 |
| |
这些图像中的山峰在移动。但真正的重点是我刚才提到的。 |
| |
在 Seagate 的一些用例中,我们会记录磁头的一行数据,其中包含哪些值,例如来自整个频谱的峰值频率或来自优化扫描的最佳值等。 |
| |
这些扫描实际上可以转化为数据中的图像。当然,我们对图像或复杂曲线进行这种特征提取是有充分理由的。 |
| |
频率等简单值可以更直接地用于 JMP 的各种分析中,例如 |
| |
JMP 的统计平台,但我希望我们都证明了,如果将图像放入与一堆其他数据列相关的表中,您还可以做很多有用的事情。 |
| |
具体来说,你知道,我希望也许将情节视为图像,你会立即回想起 Serkay 的 PowerPoint 演示,情节就像是以某种方式在 PowerPoint 中排列的东西。 |
| |
无论如何,希望我们分享的这些 JSL 知识能对你有所帮助,并激励你更好地利用图像。谢谢。 |