What's new in Vision
Spatial Computing 进阶 20m

Vision 框架的新功能

What's new in Vision

2022年6月6日

在 Apple 官方观看视频

一句话判断

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