大多数浏览器和
Developer App 均支持流媒体播放。
-
Vision 的新功能
了解 Vision API 的最新更新,它可以帮助您的 App 识别文本、检测面部和面部特征点,以及执行光流处理。我们将向您介绍基于视频的 App 的光流处理功能,如何通过修改驱动这些 API 的机器学习模型来更新您的 App,并探索如何借助 Xcode 中的“快速查看预览支持”直观呈现您的 Vision 任务。为能更好地理解此讲座,我们建议您先观看 WWDC21 的“使用 Vision 检测人物、面孔和姿势”讲座。
资源
相关视频
Tech Talks
WWDC22
WWDC21
-
下载
♪ ♪
Brett Keating: 大家好 我叫 Brett Keating 很高兴为您介绍 Vision 框架中的新内容 您可能刚接触 Vision 也许这是您首次参加 有关 Vision 框架的讲座 如果是这样的话 诚挚欢迎 我们先简要回顾下 Vision 框架的亮点 以下是关于 Vision 框架的一些信息 Vision 于 2017 年首次推出 从那时起 人们就使用 Vision 提供的技术 开发出了无数好用的 App Vision 是 计算机视界算法的集合 可随着时间的推移持续增长 包括人脸检测 图像分类 和轮廓定位 诸如此类 所以这些算法中都可以 通过简便 统一的 API 来实现 如果您知道如何在 Vision 框架中 运行一种算法 就知道如何运行全部算法 Vision 在它支持的所有平台上 充分利用 Apple 芯片的优势 在 Vision 的许多核心算法中 加强了机器学习能力 Vision 适用于 tvOS iOS 和 macOS 并将在 Mac 上充分利用 Apple 芯片的优势 这里将展示关于 Vision 框架的 一些最新补充 包括 Person Segmentation
还有手势估计也会有相关的演示
这是我们的 Action 和 Vision 示范 App 它使用的是人体姿势估计 和轨迹分析 我们先以一些新的修订 来开始今天的议程 即对现有请求的更新 可能会提供更多的功能 提高性能或提高准确性
首先 我们有一个新的修订版 用于文本识别 这是 VNRecognizeTextRequestRevision3 提供的第三次修订版 这是文本识别器 有强大的实时文本功能 文本识别器支持多种语言 您可以 使用 supportedRecognitionLanguages 查看目前支持的语种 我们现在添加了一些新的语种 可以看下以下的例子 现在 Vision 中支持韩语 这是用 Vison 提取 韩语收据的例子 这是一个对应的日语示例 在当前支持语种中 也显示了 Vision 的 文本识别结果 文本识别方面 我们有 一种全新的自动语言识别功能 您仍然可以使用 recognitionLanguages 属性 指定要使用的识别语言 但是要假设您之前并不知道 您的 App 用户可能会 尝试识别哪种语言 现在 仅对于准确的识别模式 您可能会通过将 automaticallyDetectsLanguage的 值设为 true 让文本识别器自动检测语言
在您不知道识别哪种语言的情况下 最好使用这种方法 因为语言检测偶尔会出错 如果您已经提前知道了识别哪种语言 最好还是向 Vision 指定这些语言 并关闭 automaticallyDetectsLanguage
接下来 我们来看下用于 条码检测的第三次修订 名为 VNDetectBarcodesRequestRevision3 本次修订利用了 现代机器的后台学习能力 这与之前的修订不同 条码有多种符号 包括商店产品上常见的条形码 二维码 用于医疗保健的专业代码 为了了解 Vision 支持哪些符号 您可以 调用 supportedSymbologies
接下来 我们谈谈性能 一部分是因为我们使用的是 机器学习 可一次检测多个代码时 而不是一次一个 所以图像包含多个代码的 请求会更快一些 此外 由于提高了准确性 且极少重复检测 在包含许多代码的给定图像中 可以检测更多代码 针对一些代码 边界框做了改进 特别是线性代码 例如 ean13 之前是返回了一行 现在 边界框包围了 整个可见代码
最后 机器学习模型可以忽略弧面 反射以及其它曾经 影响检测准确性的东西
这两个新修订版可用于文本识别 条形码检测 为插入式 UI 元素的 VisionKit 数据扫描器 API 搭建技术基础 可以设置相机流 扫描并返回条形码和文本 这对我们的 SDK 来说 是一个神级补充 我强烈建议您查看 有关的讲座以了解更多信息 今天我要告诉您的 最后的一个全新修订版 是一个光流请求的新版本 名为 VNGenerateOpticalFlowRequestRevision2 和条码检测器一样 这个新版本也利用了 现代机器的后台学习能力
虽然光流法是一个 研究时间最长的计算机视觉问题 与构成我们日常生活一部分的 文字和条形码检测相比 您可能对它的作用不太了解 光流分析两个连续的图像 通常来自视频的帧 根据您的使用场景 可能会看到 两个相邻的帧之间的动作 或在其间跳过几帧 但无论如何 这两个图像 应该按时间顺序排列
该分析提供了一个 运动的方向和幅度的估计 或第一张图像有多少部分需要 “move (移动)” 才能在第二张图像中正确定位 结果是 VNPixelBufferObservation 这代表这个动作 在图像中的所有位置 这是一个双通道图像 一个通道包含 X 幅度 另一个包含 Y 幅度 这些合起来在每个像素上 形成二维向量 排列在这个 2D 图像中 以便他们的位置 映射到图像中的相应位置 作为输入 我们从这个视角看一下 假设有一个传入的视频 并且有几帧画面传进来 我们特别关注一下这两个图像 在这里 有一只狗在沙滩上奔跑 从左图到右图 似乎这只狗已经向左移动了一点 您会如何估算并表现这个移动
对 您会运行光流法 然后得到类似于下图的图像 较暗的区域是发现移动的地方 它确实看起来像狗的外形 这是因为这个场景中 只有狗真正有所移动 在这张图中我们使用 “false color”展示了运动矢量 从向量到调色板映射 x y 在这种 false color 的表现中 红色色调恰好表明 向左移动 现在您已经看到了一帧的例子 接下来我们看看在 整个视频剪辑中是怎么样的 这是小狗在沙滩接水瓶的短片 我们对其进行了光流计算 左边是修订版 1 的结果 右边是我们基于机器语言的 修订版 2 的结果 希望可以清楚看到 修订版 2 的一些改进 一方面 也是最明显的 水瓶的动作捕捉更准确 您可能还会看到 狗的预估动作有所改进 到尾部的变化最为清楚 但是在新的版本中 也能看到它的耳朵在动 第一个修订版还包含 一些背景声音的变化 而第二次修订更加连贯 表示背景没有移动 希望这个例子能让您对这项技术的 作用有更全面的了解 现在我们深入了解一下 如何在您的 App 中使用这一技术 很明显 最主要的使用案例 是发现视频中的局部运动 这可直接应用到安防视频使用场景 在这类视频中 识别和定位 偏离背景的局部动作是最重要的 应该说 对于固定相机来说 光流确实效果最好 例如大多数安全摄像头 您可能想要使用 Vision 的目标跟踪器 跟踪视频中移动的对象 但需要知道在哪里初始化跟踪器 光流也可以提供帮助 如果您懂得计算机视觉 或图像处理 您可能会利用我们的光流结果 以启用进一步的视频处理 视频插值或视频动作分析 可以从信息光流中大大受益 现在 我们深入研究下 修订版 1 和修订版 2 之间 重要的附加差异 修订版 1 总能返回光流场 作为输入 具有相同的分辨率 默认情况下 修订版 2 也将执行此默认设定值 不过 这里也有一个小问题 一部分是因为 修订版 2 是基于机器语言 基础模型的输出 与大多数输入图像分辨率相比 分辨率相对较低 因此 要匹配修订版 1 的 默认行为 必须进行一些上采样 我们使用双线性上采样来实现 这是解释上采样作用的视觉示例 左边 我们有一个网络输出的 放大部分 这是低分辨率 因此出现像素化 整体流场可能宽高比为 7:5 右边 我们有一个取自同一场的 相同的区域 上采样到原始图像分辨率 也许那个图像也有 不同的纵横比 如 16:9 您会注意到流场的边缘 通过双线性上采样 变得平滑 由于潜在不同的纵横比 记住 作为上采样过程的一部分 流动图像会被拉伸 为的是流场 与图像中发生的变化相对应 当直接进行网络输出时 您应该考虑这与映射流结果 到原始图像时 分辨率和纵横比的方式是类似的
您可以通过请求 打开 keepNetworkOutput 选择跳过上采样 这将为您提供原始模型输出 为了选择可用的输出分辨率 有四种计算精度 可以应用于请求的设置 您可以看到分辨率 在此表中的每个精度设置 但一定要经常检查观察到的 像素缓冲区的宽度和高度 什么时候应该使用网络输出 什么时候应该允许 Vision 上采样 如果您已经在使用光流 并想要这种行为向后兼容 默认行为无疑是最好的 如果您想要上采样输出 也是一个不错的选择 双线性对您来说是可以接受的 值得额外的内存和延迟 如果您不需要全分辨率 网络输出是最好的 它可以即时形成对应关系 或者初始化一个跟踪器 如果您确实需要完整的分辨率流 但更愿意使用 您自己的上采样方法 网络输出也可能是 正确的选择 这涵盖了本次讲座中 新的算法修订 接下来我们讨论一下 在 Vision 框架中 所讲到的所有内容 以及对您有何影响 五年前 当 Vision 最初发布时 我们首次介绍了人脸检测和 人脸关键点标记 这是每个算法的修订版 1 从那之后 我们发布了两个更新的版本 使用效率更高 技术更准确 所以 我们现在正在 不断从 Vision 框架 移除这些算法的第一次修订 并保留第二次和第三次修订 不过 如果您使用的是修订版 1 那也没关系 我们将继续支持 指定修订版 1 的代码 或已编译的代码 仅包含修订版 1 的 SDK 您可能会问 这怎么可能呢 修订版 1 在后台执行算法 在此图中 我称之为 “修订版 1 检测器” 同样 修订版 2 使用 修订版 2 检测器 我们为此版本所做的 是为了使用修订版 2 检测器的输出 满足修订 1 的请求 此外 修订 1 请求 将被标记为已弃用 这允许我们完全删除 旧的版本 1 的检测器 允许 Vision 框架保持精简 这有多个好处 不只是为了节省磁盘空间 降低操作系统版本和 SDK 的 下载和安装成本 所有的 Vision 专家都可能有 对自己说 “但是 等一下” “修订版 2 会返回倒置 而修订版 1 不会” “难道这种行为差异不会 影响某些 App 吗” 答案是肯定的 除非我们采取 保留修订版 1 行为的 预防性措施 我们不会从修订版 2 检测器 返回倒置 类似的 修订版 2 标记检测器 将返回与修订版 1 标记 相匹配的结果 执行时间相当 您应该体验准确性的提升 任何情况下 此改变不需要任何 App 对其代码进行任何修改 将继续有效
不过 我们仍鼓励您采取行动 当有更好的选择时 不应该满足于使用修订版 1 我们一直推荐使用最新版本 应这些请求 则应该是修订版 3
当然 这个建议的主要原因 是使用最新的技术 它提供了最高级别的 准确性和性能 谁又会拒绝呢 此外 我们经过了数次建立和沟通 我们在此再次重申 最佳的实践是明确指定 您的修订版本 而不是依靠默认行为 这就是我们在 Spring 清扫中所做的 现在来谈一谈我们是如何 使用 Vision 框架 简化调试 App 流程的 我们为 Vision 添加了快速查看预览支持 这对 Vision 来说意味着什么 好了 现在您可以将鼠标悬停在 调试器中的 VNObservations 只需单击一下 输入图像上的结果 就得以可视化 Xcode Playgrounds 也同样适用 要了解这对您的调试有何帮助 唯一方法 就是演示一遍 我们来看一个 Xcode 演示
这里有一个简单的例程 用来检测面部标记 并返回人脸观察结果 首先 我们设置了人脸标记请求 然后 如果准备好了一个 课堂上用的图像 就展示出来 然后 公布一个数列来保存结果
在自动释放池内 我们用那个图像 实例化一个请求处理程序 然后执行我们的请求 假设一切顺利 我们可以检索 请求的结果 在我们检索结果之后 我运行它并到达断点 现在我在调试程序 当我将鼠标悬停在结果上时 覆盖图显示我检测到三张脸 不错 我的输入图像中 确实有三张图 但我怎么知道观察到的是哪张脸呢 这就是 Quick Look Preview 的工作 当我提出这个要求时 为了可视化结果 可以点击每个“eye (眼睛)”图标 标记的地方和人脸边界框 出现了绘制的叠加层
现在您就知道 第一个观察到的是哪个图像
我可以点击下一个 画出第二次观察的叠加 以及第三次观察
继续下一个断点 我们运行一些 打印面部观察结果代码 到调试控制台 可以想象 在打印面部信息的 调试控制台中 您的脑海里很难马上想象 每张脸是属于谁的 或者从这些打印的标记来判断 结果是否正确
这里还要指出一点 我通过引入 autoreleasepool 人为地强制请求超出范围的 处理程序 既然请求处理程序超出范围 我们再次使用 Quick Look Preview 支持这个结果 好的 您知道覆盖仍然被绘制 但图像是不可用的
需要牢记的是 使用的图像请求处理程序 生成观察结果 必须仍在某个范围内 从而让 Quick Look Preview 可显示原始图像 那是因为图像请求处理程序 是您的输入图像所在的位置 操作将继续 但图像不可用 这种快速查看预览支持 在 Xcode Playgrounds 会话中 做快速实验时 查看运作时 非常有用 现在我们来看看 在这里 我们设置了一个简单的场地 分析图像的条形码 而不是查看这段代码 我们做一些修改 并检查它对结果的影响 我们首先在两个条形码的图像上 使用修订版 2 如果我们要求所有的结果 所有结果就会一次性显示出来 第一个结果也在最后显示出来
修订版 2 有几个问题 首先 它错过了第一个条形码 此外 它检测到第二个条形码两次 它通过条形码 给您提供了一条线 而不是一个完整的边界框
如果我们现在改为修订版 3 而非 2 会发生什么呢
首先 我们检测两个条形码 得到的不是一条线 而是完整的边界框 Quick Look Preview 支持 最了不起的就是 无需您的帮助 也能以可视化结果 编写各种实用函数 它们可以直接叠加 在调试器中的图像上 或 Xcode Playground 中
这就是 Vision 中的 Quick Look Preview 支持 现在您可以更轻松地了解 观察到的是哪一个 为了将它与您的输入图像 一起使用 只要确保保持范围内的 图像请求处理程序 希望 Xcode Playground 的支持 帮助您更容易实现 Vision 框架代码 Live Tuning 我们今天讲了 Vision 中 一些重要的更新 出于快速查看的目的 我们为文本识别 条形码检测和光流添加了重大修订
随着修订的持续进行 我们也将删除旧的版本 所以要保持更新 使用最新 最好的技术 我们也让 Vision 的应用 在 Quick Look Preview 支持下的调试 更加容易 希望您喜欢本次讲座 并享受精彩纷呈的 WWDC
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。