大多数浏览器和
Developer App 均支持流媒体播放。
-
VisionKit 的新功能
了解 VisionKit 如何帮助用户快速在你的 App 中提取图像主题,以及如何使用可视化查看获取图像内容更多有关信息。我们还将为你介绍 VisionKit 中的最新更新,包括实时文本交互、数据扫描以及针对 macOS App 的扩展支持。想要进一步了解有关 VisionKit 的信息,请查看 WWDC23 中的“在你的 App 中提取图像主题”。
资源
相关视频
WWDC23
WWDC22
WWDC21
-
下载
♪ ♪
Adam:大家好 我是 Adam 一名 VisionKit 工程师 今天 我很高兴与你分享 我们团队今年 努力推出的新功能和新 API 简单回顾一下 去年我们在 VisionKit 中添加了实时文本支持 从而可以在你的 App 中 实现文本选择、翻译、 二维码支持以及 其他应用于图像的交互 此外 VisionKit 还引入了 DataScannerViewController 数据扫描器可以利用实时摄像头源 为你提供一种简单且功能齐全的方式 用于捕获特定文本类型 以及大量机器可读代码的变体 与这些 API 相关的信息 均包含在 WWDC22 讲座中 开发者也给出了积极的反馈 今年 我很高兴宣布 VisionKit 将支持 添加主体提取和可视化查找 并且还会推出 用于文本选择的新 Live Text API Catalyst 的扩展平台支持 以及原生 macOS App 的 上下文菜单集成
首先 我来介绍一下主体提取 只需长按图像主体 便可以将该主体 从周围背景中提取出来 并以漂亮的发光动画突出显示主体 接着 我就可以看到几个分享主体 或启用可视化查找的选项 在 iOS 17 的新增功能中 你可以使用任何提取出的主体 创建贴纸 并对其添加 闪光、膨胀等有趣的特效 然后分享给你的朋友和家人 好的一面是 集成主体提取十分简单 事实上 很有可能你都已经完成了 这个代码片段来自于去年的视频 在去年的视频中 我分析了一张图片并为其设置了交互 但现在 无需任何 代码修改 它就能支持主体提取 让我们来深入了解一下 需要注意的是 我没有 向分析器配置传递任何特殊内容 这是由于为了保持动力及性能 主体提取分析需要 在初始分析完成后 由交互单独进行处理 对于 iOS 该过程在其 显示在屏幕上几秒之后才开始进行 而对于 macOS 该过程在 菜单首次出现时便开始进行 这就意味着你不再需要处理 用户轻扫浏览大量照片的情况 因为交互会为你解决这个问题 而你需要做的就是 确保设置了恰当的交互类型 在这里 交互类型为 .automatic 其余部分便交由交互处理即可 接下来 我们来更深入地探讨一下 与主体提取兼容的交互类型 .automatic 可为你提供 默认的开箱即用体验 结合文本交互、主体提取等功能 如果你只想要主体提取 不想要文本选择或数据检测器 那么 你可以将交互类型设置为 .imageSegmentation 或将其与其他类型组合使用 最后 如果你的 App 不需要主体提取 但你仍想要 iOS 16 中 此前的自动行为功能 没问题 你可以使用新类型 .automaticTextOnly 该类型提供文本选择 及数据检测器等功能 但不提供主体提取 如果你想深入了解 主体提取这一令人惊叹的 新技术在 VisionKit 和 Vision 中的应用 我们也有详细针对该功能的讲座 今年 VisionKit 还将支持可视化查找 利用可视化查找 用户可以轻松识别并了解宠物、 自然、地标、艺术及媒体信息 并且在 iOS 17 中 可视化查找还将支持更多领域 包括食品、产品以及标志和符号 现在 你便可以轻松查找 洗衣标签上各个符号的意义了 如果你要我说 我真的觉得这太酷了 可视化查找的可用性由语言决定 并且可用于这几种语言 接下来 我们来快速了解一下底层原理 并看看可视化查找是如何运作的 实际上 该过程包含两个部分 分析时 初始处理 完全在设备上完成 如果分析器配置出现了 .visualLookUp 类型 可视化查找就会定位结果边界框 以及其顶级域名 例如 它是否是猫、书还是植物 这一步还包含特征提取 一旦用户请求查找对象 那么只有在这个时候 来自特征提取的域和图像嵌入 才会送入服务器进行额外处理 现在 你便清楚 可视化查找是如何运作的了 接下来 我们来快速了解一下 如何使用该功能 以及你需要采取哪些操作 来将其添加到你的 App 中 可视化查找共有两种调用方式 第一种方式是与主体提取结合使用 如果当前提取出的主体包含一个 且只有一个 与可视化查找相关的结果 那么菜单中便会出现 可视化查找选项 选择该选项 你便可以 查看完整的可视化查找结果 VisionKit 可以为你 自动处理这种交互 作为采用者 你需要做的就是 在分析时将 .visualLookUp 添加到分析器配置中 第二种方式是提供模态交互 其中每个可视化查找结果上 都放置一个标记 如果标记离开视窗 注意它们是如何移动到角落的 用户可以轻点这些标记 显示可视化查找结果 这种交互方式与 在照片 App 中点击信息按钮 或快速查看是完全相同的 在交互中 将 .visualLookUp 设置为 preferredInteractionType 即可调用该模式 请注意:该类型优先于 其他交互类型 例如 在 .visualLookUp 模式下 你无法同时使用 文本选择和数据检测器 因此 该模式通常会与按钮 或其他特定方式结合使用 从而实现模式进入和退出 例如 快速查看使用了信息按钮 来进入可视化查找模式 接下来 我们来谈谈 数据扫描器和实时文本中的 新 API 和新功能 DataScannerViewController 在 iOS 16 中引入 其设计目的是成为 使用带有实时相机取景器的 OCR 的 最简单方式 在 iOS 17 中 该功能添加了 光流追踪和货币支持 从得到了增强 光流追踪可以提高 实时相机体验中的文本追踪能力 这里是我们在 iOS 16 中拥有的功能 我正在使用 启用的 highFrameRateTracking 扫描文本 这里是使用光流追踪得到的结果 可以看到 突出显示的内容 比之前更加稳定且准确 无论你何时使用 DataScannerViewController 光流追踪都是免费的 但是这种情况只适用于文本识别 而不适用于计算机可读的代码 并且 你只有在没有设置特定文本 内容类型时 才可以进行文本扫描 最后 你需要再次确保 已经启用了高帧率追踪 十分方便的是 该选项即为默认选项
无论你如何进行配置 数据扫描器都可以提供 出色的文本追踪功能 但是如果你的用例允许这种配置 新的光流追踪还可以 进一步提高追踪效果 此外 数据扫描器的新选项 还可以让用户了解货币价值 并与之进行交互 启用该功能十分简单 你只需在数据扫描器初始化定式中 指定文本识别时 将文本内容类型设置为货币即可 这个过程和你设置 电子邮件地址及电话号码等 其他内容类型一样 现在 我通过一个简单的例子 来详细介绍一下这个新类型 在数据扫描器识别文本中的货币时 它会包含边界和转写 而转写又包含货币符号及金额 在这个示例中 我可以在收据之类的东西上 找到所有组成部分的值 首先 我会使用当前位置 获取货币符号
然后 在等待 recognizedItems 流中 数据扫描器的结果时 我会循环遍历每个识别项 并获取其转写 如果转写包含我感兴趣的货币符号 我就会继续遍历并更新总值 按照这个步骤 你便可以得到所有值的和 虽然这个例子很简单 但是该功能却十分强大 我非常期待看到 你利用该功能创建出的作品 现在 我来谈谈实时文本中的改进
首先 我们将支持的语言 扩展到了泰语和越南语 从而实现其对更多地区的覆盖 今年 实时文本的改进 同样包括文档结构检测 文档结构检测?这是什么意思呢? 举个例子 iOS 16 中的 实时文本支持 List 检测 从而 你可以轻松将 List 复制粘贴到类似备忘录这种 可以识别 List 的 App 中 同时保持 List 格式不变 实时文本可以处理多种 List 格式 例如编号和项目符号 现在 实时文本也可以 为 Table 提供同样的支持 从而你可以更轻松地 将图像中结构化的 Table 数据 移入备忘录 或 Numbers 表格等 App 中 现在 我便可以选择这张 Table 然后把它复制粘贴到 Numbers 表格中 同时保持结构不变 仔细观察该表格是如何 在必要的情况下自动合并单元格的 然后就像这样 我只需要点击几下 便可以将这些信息可视化为图表了 真不错 但还没有结束 我们还在实时文中添加了 上下文感知数据检测器 在该功能中 数据检测器及其视觉关系 会在添加联系人时发挥作用 仔细观察当我从 电子邮件地址中添加联系人时 周围数据检测器提供的额外信息 是如何包含在联系人中的 从而可以让我一次性 轻松添加所有的这些信息 从名片及传单中 添加联系人从未如此简单 除了这些你可以 免费获得的强大功能之外 VisionKit 还针对文本 推出了一些新的 API 去年 你可以通过访问 数据分析中的转写属性 来获得完整的文本内容 根据你的反馈 现在你不仅可以完全访问 纯文本、属性文本以及选定的范围 同时还可以轻松访问选定的文本 此外 你还可以通过 一个新的委托方法了解 文本选择何时变化 并适当更新你的 UI 现在 我们便可以轻松添加 基于用户选择的功能了 例如 使用菜单构建器 API 你便可以插入一个菜单项 该菜单项根据 当前文本选择创建提醒 首先 我们从具备图像分析交互的 视图控制器开始 第一步 抓取选择文本 并确保其不为空 然后 创建一个命令 该命令在选中时调用处理程序 接着 创建一个 包含该命令的菜单对象 最后 将该菜单作为 共享菜单选项的同级选项插入其后 现在 你便有了一个自定义菜单 以及复制和共享等系统项目 接下来 我来谈谈扩展平台支持 今年 Mac 是所有内容中的重点 我们即将推出的 Catalyst 支持 可以轻松将 iOS App 中的 实时文本引入到 Mac 中 如果你不熟悉原生 macOS API 以及 ImageAnalysisOverlayView 请持续关注 因为我将会重温其中一些细节 以及使用技巧 最后 我将会谈谈菜单的新系统 该系统可以简单地将 VisionKit 无缝集成到你的上下文菜单中 Catalyst 采用非常简单 只需要经过简单的重新编译 图像分析交互便可以在 Catalyst 中正常运作 我们支持实时文本、主体提取 以及可视化查找 但遗憾的是 无论是在 Catalyst 环境 还是 VisionKit 的原生 macOS API 中 我们都暂不支持二维码 但我希望你了解的是 假如你有一个共享实现 将 .machineReadableCodes 保留在 Catalyst 的分析器配置中 是绝对安全的 只是它会变成一个空操作 此外 你还需要注意的是 如果你在 Mac 上 需要二维码检测支持 该功能在 Vision 框架中可得
接下来 我来谈谈 原生 macOs API 与 iOS 一样 在使用 VisionKit 时 你需要了解两个主要类: ImageAnalyzer 以及 ImageAnalysisOverlayView 首先 我们从简单的部分开始 Mac 的图像分析器 和分析过程与 iOS 完全相同 除了机器可读代码是空操作之外 正如我之前提到的 其他内容都一样 使用方式也一样 而 iOS ImageAnalysisInteraction 和 macOS ImageAnalysisOverlayView 之间最主要的差别在于 如何将交互添加到你的 App 中 对于 iOS ImageAnalysisInteraction 是添加到视图中的 UIInteraction 已经存在于 App 的视图层次结构中 但是 Mac 上并没有 UIInteraction 所以你会怎么做呢? 在这种情况下 顾名思义 ImageAnalysisOverlayView 是 NSView 的子类 所以 我只需要将覆盖视图添加到 视图层次结构中 并将其置于图像内容的上方 例如 我可以将其添加在这里 甚至还可以在这里 但最简单的方式还是将其 作为内容视图的子视图进行添加 你无论选择什么方式都可以 但我发现将其作为子视图 进行添加通常更简单 并且更易于管理 因为你无需 在内容视图位置发生改变时 重新定位覆盖视图 现在 你便了解了在 App 中 添加 ImageAnalysisOverlayView 的方式和位置 接下来 我们来谈谈矩形 由于 OverlayView 并不会托管或呈现内容 因此 它便需要确切知道 内容相对于其边界的位置 该位置会由 Contents rect 进行描述 Contents rect 位于单位坐标空间中 其原点位于左上角 哇 这可真是一口大小 接下来这个简单的例子 可以帮助你进行理解 由于覆盖视图 直接放在 imageView 之上 因此这两者的边界相同 我会使用矩形来展示该边界 同时 我还会添加 与其匹配的 Contents rect 最简单的情况是内容与边界匹配 在这里 它只是一个单位矩形 现在 这是 aspect fit 需要注意的是 imageView 这部分 现在在其下面并没有内容 只是在 Contents rect 中 得到了体现 这里是 aspect fill 并且 用户无法看到这一部分图像 仔细观察 Contents rect 在这里是如何改变的 现在 好消息是 就和在 iOS 上使用 UIImageView 一样 如果你正在使用 NSImageView 那么你可以简单地在覆盖层视图上 设置 trackingImageView 属性 接着 它便会自动 为你估算所有的内容 但如果你没有使用 NSImageView 不用担心 你可以通过实现委托方法 contentsRect(for overlayView:) 来提供 Contents rect 在布局过程中 如果覆盖层视图边界 发生变化 覆盖层视图便会发出该请求 但是 你也可以通过在 overlayView 上 调用 setContentsRectNeedsUpdate 来手动请求更新 好的 接下来我们 来聊聊上下文菜单 我相信大家都知道 上下文菜单是 Mac 功能的 重要组成部分 现在 你可以轻松将 VisionKit 提供的功能 直接添加到菜单中 例如实时文本、 可视化查找和主体提取 那么你可能会问 为什么要这样做? 让我们来看看 macOS 中的照片 App 如果我右击文本中的道路标志 那么我只能看到 VisionKit 文本菜单 如果该内容不是文本形式 那么我便会看到 App 菜单 并且其中不包含任何文本项目 这种效果并不理想 但是现在在 macOS Sonoma 中 项目可以合并到一个菜单中 无论菜单事件在何处触发 你都可以轻松访问文本和图像功能 这对用户来说是一个更好的体验 并且实现起来也很简单 接下来 让我们来聊聊 如何在你的 App 中实现这一点 你可以使用新的委托方法 overlayview:updatedmenu:forevent:atpoint 参数包括触发菜单的事件 和覆盖视图边界坐标空间中的坐标 这样 你便可以 创建任何需要的菜单 从这里开始 你只需要 简单地返回想要显示的菜单即可 默认实现会返回 VisionKit 菜单 但是 你可能希望 在该菜单中添加自己的项目 或从菜单中移除项目 并将其添加到自己的菜单中
VisionKit 菜单项由标签识别 并且这些标识都包含在一个结构中 我们有用于复制和分享的项目 用于图像和主体的项目 以及一个用于可视化查找的项目 此外 我们还提供一个特殊项目 你可以使用它查找建议索引 以把项目添加到 VisionKit 提供的菜单中 这一点我们稍后会详细进行介绍 这里我会用几个例子 说明如何使用该特殊选项 如果我已有了一个现有菜单 并且我只对添加 copySubject 选项感兴趣 那么就可以像这样轻松地进行添加 首先 获取你的 App 菜单 接着 获取你感兴趣的项目 在本例中 该项目是 copySubject 并将其插入到你的菜单中 很重要的一点是 请记住 项目只有在实际有效时 才可以使用 例如 如果当前没有 可使用的主体交互类型 copySubject 项目 就不会出现在菜单中 对于由系统提供的文本项目来说 如果适用的话 其也会包含在菜单中 但并不是所有的项目 都可以通过标记进行识别 你甚至可以 根据需要自定义这些项目 例如 我已经把项目 由复制图像改为复制照片 不用担心改变这些属性 这些项目每次都会重新创建 并且你可以根据自己的需要 来改变它们 刚刚我已经介绍了如何 在现有菜单中添加项目 接下来我会通过一个例子来说明 如何向 VisionKit 菜单添加项目 正如我之前提到的 overlayView 可以提供 带有建议索引标签的项目 来插入 recommendedAppItems 项目 你只需简单地请求该项目的索引 并将你的项目插入该索引处即可 使用该索引是可选的 而非必需的 但对于用户来说 保持一致性会是个不错的方式
你可能会注意到其中一些 菜单项目具有特殊的属性 例如 当主体相关项目突出显示时 我的猫 KiKi 周围的区域就会变暗 并且发光动画也会开始运行 从而在用户开始复制 和分享主体前 为他们指出主体 如果主体分析还未开始 VisionKit 会将菜单出现 作为触发器来触发主体分析 所有这些都会为你自动处理 为了提供这些功能 VisionKit 会将自己设置为 你从更新菜单方法中 返回所有菜单的委托 如果你之前依赖这些 NSMenuDelegate 回调 那么现在 VisionKit 提供自己的委托回调 如果你此前使用 NSMenuDelegate 的话 还能让你保留 与菜单项目相关的功能 接下来是一些小建议 如果你当前所处的情况 取决于菜单启动的位置 那么该菜单可能 不是来自 VisionKit 所以你可能希望保留现有的实现 一般来说 让所有内容保持同步 最简单的方法是 使用 OverlayViewDelegate 实现 调用匹配的 NSMenuDelegate 实现 并根据需要进行调整 当然了 确定这一点 对你的 App 非常重要 但通常情况下 该方法都可以成功解决问题 以上就是对 VisionKit 中 一些新功能的快速回顾 我非常高兴 今天和你一起探讨主体提取 和可视化查找 以及新的 macOS API 及其相关信息 我非常期待看到你使用这些新功能 为客户带来愉悦和惊喜的体验 和往常一样 祝你生活愉快! 谢谢大家!
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。