Spatial Computing 进阶 20m
Vision 框架的新功能
What's new in Vision
2022年6月6日
一句话判断
Vision 框架在文字识别、条码检测和光流估计三个方向都做了重大升级——尤其是自动语言检测和 ML 驱动的新光流算法,效果提升肉眼可见。
这场 Session 讲了什么
Vision 是 Apple 的计算机视觉框架,提供人脸检测、图像分类、轮廓检测等算法。所有算法共享统一的 API 模式——学会一个就知道怎么用全部。
Session 宣布了三个新的 Revision。文字识别(VNRecognizeTextRequestRevision3)新增韩语和日语支持,以及自动语言检测功能——在 accurate 模式下设置 automaticallyDetectsLanguage = true,Vision 会自动判断文本语言。条码检测(VNDetectBarcodesRequestRevision3)切换到 ML 引擎,多码检测更快更准,边界框更精确,对曲面和反光的抵抗力也更强。光流估计(VNGenerateOpticalFlowRequestRevision2)同样采用 ML,在运动追踪的精确度和连贯性上都有明显提升。
这些技术共同支撑了 VisionKit 的 Data Scanner API——一个即插即用的相机扫描 UI 组件。
值得深挖的点
- 自动语言检测的适用场景:当你无法预知用户会扫描什么语言的文本时才开启。如果你知道目标语言(比如只处理中文票据),手动指定语言仍然更准确。自动检测偶尔会误判。
- 条码检测的 ML 革命:新引擎一次性检测所有条码(不再逐个扫描),多码场景下速度大幅提升。重复检测几乎为零,线性码(如 EAN-13)的边界框从一条线变成了完整的矩形。
- 光流的实际应用:核心用例是安防视频中的运动检测(需要固定摄像头)。还可以配合 Vision 的 Object Tracker 使用——光流帮你找到运动物体的初始位置,Tracker 负责后续追踪。
- VisionKit Data Scanner:这是条码检测和文字识别的封装 UI。你只需要几行代码就能在 App 中集成实时扫描功能,支持条码和文字的同时识别。
代码片段
import Vision
// 文字识别 + 自动语言检测
let request = VNRecognizeTextRequest { request, error in
guard let observations = request.results as? [VNRecognizedTextObservation] else { return }
for observation in observations {
if let text = observation.topCandidates(1).first?.string {
print("识别结果: \(text)")
}
}
}
request.recognitionLevel = .accurate // 自动语言检测只支持 accurate 模式
request.automaticallyDetectsLanguage = true
// 条码检测(Revision 3)
let barcodeRequest = VNDetectBarcodesRequest { request, error in
guard let observations = request.results as? [VNBarcodeObservation] else { return }
for barcode in observations {
print("条码: \(barcode.symbology.rawValue), 值: \(barcode.payloadStringValue ?? "")")
}
}
// 可以指定只检测特定类型的条码
barcodeRequest.symbologies = [.qr, .ean13]
// 光流估计
let opticalFlowRequest = VNGenerateOpticalFlowRequest(
targetedImage: secondFrame,
options: [:]
)
opticalFlowRequest.revision = VNGenerateOpticalFlowRequestRevision2
// 结果是 VNPixelBufferObservation,包含每个像素的运动向量
// X 通道 = 水平运动, Y 通道 = 垂直运动
最佳实践
- 有明确语言场景时手动指定,只在多语言混合场景使用自动检测
- 条码检测现在不需要特殊优化就能同时处理多个码,直接用默认配置
- 光流在固定摄像头场景效果最好,移动摄像头的场景需要额外稳定化处理
- Vision 请求可以通过
VNSequenceRequestHandler复用,避免重复创建 - 所有 Vision 算法都利用 Apple Silicon 加速,在 Intel Mac 上性能会有差异
还有什么值得关注
- “Capture machine-readable codes and text with VisionKit” 介绍了 Data Scanner API
- “Extract document data using Vision” 深入讲解结构化文档识别
- Vision 框架自 2017 年以来持续扩展,是人脸、人体、手部姿态检测的基础
- 光流技术也可以用于视频编辑中的运动追踪效果
WWDC 2022