VisionKit 的新变化
What's new in VisionKit
2023年6月5日
一句话判断
Subject Lifting、Visual Look Up、光学流追踪和货币识别——VisionKit 今年加了不少实用能力。
这场 Session 讲了什么
VisionKit 在 iOS 17 中新增了多项功能。最引人注目的是 Subject Lifting(主体提取)——长按照片中的主体,它就会从背景中分离出来,呈现出美丽的动画光晕效果。你可以分享提取的主体,或用它创建带有闪亮、蓬松等特效的贴纸。更棒的是,如果你的 app 去年已经接入了图像分析 API,Subject Lifting 已经自动可用,无需任何代码改动。
Visual Look Up 也被集成到 VisionKit 中。它允许用户识别宠物、自然、地标、艺术品等,iOS 17 新增了食物、产品和标志符号的识别支持。Visual Look Up 可以与 Subject Lifting 联动——如果提取的主体恰好只有一个相关联的 Look Up 结果,菜单中会直接显示”Look Up”选项。
DataScannerViewController 获得了光学流追踪和货币识别两个新功能。光学流追踪让实时摄像头中的文字高亮更加稳定流畅。货币识别让 app 可以扫描和识别货币金额。
值得深挖的点
Subject Lifting 的性能设计值得注意。为了省电和性能,Subject Lifting 的分析是延迟进行的——iOS 上在图片显示几秒后才开始分析,macOS 上在首次显示菜单时才分析。你不需要处理用户快速滑动浏览大量图片的情况,interaction 会替你处理。
Visual Look Up 的两阶段处理架构也很有趣。初始分析完全在设备上完成,只有在用户主动发起 Look Up 时才会将特征提取结果发送到服务器。这意味着你的 app 不会在没有用户交互的情况下发送网络请求。
代码片段
// Subject Lifting - 去年已有的代码自动支持
let analyzer = ImageAnalyzer()
let analysis = try? await analyzer.analyze(image, configuration: .init())
let interaction = ImageAnalysisInteraction()
interaction.analysis = analysis
interaction.preferredInteractionTypes = .automatic // 包含 Subject Lifting
// 只要 Subject Lifting
interaction.preferredInteractionTypes = .imageSegmentation
// 只要文字功能,不要 Subject Lifting
interaction.preferredInteractionTypes = .automaticTextOnly
// Visual Look Up 模态交互
interaction.preferredInteractionTypes = .visualLookUp
// DataScanner 货币识别
let scanner = try DataScannerViewController(
recognizedDataTypes: [.text(textContentType: .currency)],
qualityLevel: .fast
)
// 扫描结果中包含货币符号和金额
for item in recognizedItems {
let transcript = item.transcript
// 解析货币金额
}
最佳实践
- 使用
.automatic获得完整的开箱即用体验 - Subject Lifting 分析自动延迟,无需担心性能
- Visual Look Up 结果只在用户主动请求时才联网
- 货币识别配合本地 locale 使用效果最佳
- 如果不需要 Subject Lifting,使用
.automaticTextOnly
还有什么值得关注
- Subject Lifting 支持创建带特效的贴纸
- Visual Look Up 新增食物、产品和标志符号识别
- 光学流追踪需要
highFrameRateTracking启用(默认开启) - Live Text API 也获得了平台扩展和新的集成方式