Vision:什么是它,计算机视觉框架及在iOS上的运作

作者: IT Sectr 发布日期: 2026-03-26 阅读时间: 8 分钟

Vision — Apple的计算机视觉框架,内置于iOS、macOS和iPadOS,提供用于分析图像、视频和实时数据的现成API。它涵盖人脸检测、文本识别、条形码、物体轮廓和运动跟踪——全部在设备上完成,无需将数据发送到服务器。根据Apple Vision Documentation (2026),该框架在搭载A14及更新芯片的设备上每秒可处理多达60帧。

要点

  • Vision — Apple的设备端计算机视觉框架,提供用于人脸、文本和物体检测的API
  • VNRequest — 所有操作的基础类:检测、分类、跟踪和识别
  • 文本识别 支持拉丁文、西里尔文、中文及30多种语言
  • 人脸检测 可确定多达68个关键特征点,并评估情绪和头部旋转
  • 与Core ML集成 允许通过VNCoreMLRequest运行自定义模型

什么是Vision?

Vision — 是Apple在WWDC 2017上推出的高级计算机视觉框架。它为开发者提供统一的接口来执行各种图像和视频分析任务,无需深入了解计算机视觉数学或针对特定神经处理器进行优化。Vision在搭载A12+芯片的设备上自动使用Apple Neural Engine。

与OpenCV等低级库不同,Vision抽象了复杂性:开发者创建VNRequest对象,配置参数,并通过VNImageRequestHandler启动处理。框架自行决定在哪个计算单元上执行任务——CPU、GPU还是ANE——并返回结构化结果。据Apple(WWDC 2025)称,Vision被用于App Store中40%处理图像的应用。

主要功能

Vision包括用于检测人脸及其特征点(多达68个点)、文本识别(OCR)支持30+语言、扫描QR和EAN条形码、跟踪帧间物体、检测矩形和轮廓、通过Core ML进行图像分类、评估运动和光流以及通过分割检测图像中人物的API。每个操作都由VNRequest的独立子类表示。

Vision的关键API

Vision基于Request → Handler → Results架构构建,其中每个请求都是一个特定任务:查找人脸、识别文本、跟踪物体。让我们看看最常用的API。

VNRequest — 所有操作的基础

VNRequest — 是一个抽象基类,所有具体的Vision请求都继承自它。每个请求包含completionHandler、配置参数和用于处理部分图像的regionOfInterest。创建后,请求被传递给VNImageRequestHandler(用于静态图像)或VNSequenceRequestHandler(用于视频流)。结果以观察数组的形式返回——即VNObservation的子类。

人脸和轮廓检测

VNDetectFaceRectanglesRequest查找图像中的所有人脸并返回其边框。VNDetectFaceLandmarksRequest额外确定68个关键特征点:眼睛、眉毛、鼻子、嘴唇和下颌的轮廓。VNDetectFaceCaptureQualityRequest评估人脸照片的质量——从0到1——对生物识别很有用。据Apple称,在配备Neural Engine的设备上,正面角度的人脸检测精度达到99%。

文本识别

VNRecognizeTextRequest — 用于图像上光学字符识别(OCR)的API。支持拉丁文、西里尔文、中文、日文、韩文等语言的印刷文本。结果 — VNRecognizedTextObservation数组,每个包含文本字符串、边界框和置信度水平。两种模式可用:快速(Fast)用于文档扫描和精确(Accurate)用于复杂字体。

  • VNDetectFaceRectanglesRequest — 搜索人脸并返回边框
  • VNDetectFaceLandmarksRequest — 人脸的68个关键点
  • VNRecognizeTextRequest — 支持30+语言的OCR
  • VNDetectBarcodesRequest — 扫描QR、EAN、PDF417
  • VNCoreMLRequest — 运行自定义Core ML模型

在iOS中集成Vision

要使用Vision,只需导入框架,创建VNRequest对象并将其传递给VNImageRequestHandler。让我们看看图像上文本识别的示例。

Swift代码示例

代码创建具有精确识别模式的VNRecognizeTextRequest,在图像上运行它,并将识别出的文本输出到控制台。这个简单的示例演示了在Swift项目中使用VNImageRequestHandler在几行代码中实现Vision的最小集成。

swift
import Vision

// 1. 创建文本识别请求
let request = VNRecognizeTextRequest { request, error in
    guard let observations = request.results
        as? [VNRecognizedTextObservation]
    else { return }

    for observation in observations {
        let topCandidate = observation
            .topCandidates(1)
            .first
        print("文本:\(topCandidate?.string ?? "")")
    }
}

// 2. 启用精确模式
request.recognitionLevel = .accurate
request.usesLanguageCorrection = true

// 3. 开始处理
let handler = VNImageRequestHandler(
    url: imageURL, options: [:]
)
try? handler.perform([request])

Swift代码配置VNRecognizeTextRequest,使用精确识别级别并启用语言校正。VNImageRequestHandler从URL加载图像并执行请求。结果包含带有边界框和每个令牌置信度级别的识别文本字符串。VNRecognizedTextObservation数组可以方便地显示在屏幕上。

对于实时视频处理,使用VNSequenceRequestHandler代替VNImageRequestHandler。它接收图像(帧)数组并按顺序执行相同的请求,保持帧间的状态——这对于物体跟踪是必要的。VNSequenceRequestHandler自动管理内存:当物体离开帧时,旧观察结果被删除。实时性能取决于请求的复杂性:人脸检测在60 FPS下工作,而文本识别在搭载A16芯片的设备上以15–30 FPS的速度运行。

Vision与Core Image对比

Vision和Core Image——两个Apple用于处理图像的框架,但它们解决根本不同的任务。Core Image是用于过滤和转换图像的框架(应用滤镜、颜色校正、模糊)。Vision是用于理解图像内容的框架:图像中有什么。

特征VisionCore Image
任务分析和识别过滤和处理
人脸检测是,带特征点仅CIDetector
文本识别是(OCR)
滤镜200+滤镜
Core ML集成是(VNCoreMLRequest)
物体跟踪是(VNTrackObjectRequest)
性能针对ANE优化GPU(Metal)

当您想了解图像中有什么时使用Vision:人脸、文本、QR码、物体。当您想修改图像时使用Core Image:应用滤镜、调整颜色、裁剪。通常这两个框架会结合使用:首先Core Image提高图像质量,然后Vision识别其中的文本。

在实践中,Vision和Core Image在文档扫描应用中一起使用。Core Image自动增加对比度并去除阴影(使用CIPhotoEffectNoir的CIFilter),而Vision在增强后的图像上识别文本。据Apple(WWDC 2025)称,与相机原始帧相比,通过Core Image进行图像预处理后,OCR精度提高了15–20%。

另一个重要的联合使用场景——用于增强现实应用的实时人脸分析。Vision检测人脸并确定68个特征点,而Core Image在检测到的区域上应用滤镜。ARKit使用Vision进行人脸跟踪,使用Core Image进行效果渲染,在搭载A15+芯片的设备上总延迟低于16毫秒。

在SwiftUI开发中集成Vision时,使用Representable协议,将AVCaptureSession和VNImageRequestHandler包装进UIViewRepresentable。摄像头通过PreviewView显示,每个帧通过AVCaptureVideoDataOutputSampleBufferDelegate传递给VisionRequestHandler。这种架构方法保持了SwiftUI的反应性,并将Vision分析结果作为@Published属性获取,以便即时更新界面。

Vision使用示例

Vision广泛应用于各类iOS应用:从文档扫描器到增强现实应用。让我们看三个典型场景。

文档扫描

VNDetectDocumentSegmentationRequest(从iOS 17+可用)自动检测图像中文档的边界,校正透视并返回拉直的图像。与VNRecognizeTextRequest结合,可获得完整的OCR扫描器,能够识别收据、名片和书页。据Apple称,文档分割在搭载A15芯片的设备上需要30–80毫秒。

视频中的物体跟踪

VNTrackObjectRequest实时跟踪选定物体在视频流帧间的移动。开发者在第一帧指定物体的边界框,Vision自动计算其在后续帧中的新位置。跟踪应用于视频分析应用、AR游戏和监控系统。在A16芯片上,物体移动速度高达每帧30像素时,跟踪精度为95%。

轮廓和矩形检测

VNDetectRectanglesRequest查找图像中的矩形区域:屏幕、纸张、标牌、文档。API返回带有透视校正的角坐标。将矩形与VNDetectContoursRequest结合,可以提取物体的精确轮廓——对增强现实应用和图形编辑器很有用。VNDetectContoursRequest返回轮廓的控制点数组,可转换为UIBezierPath进行绘制。

常见问题

Vision从哪些iOS版本开始可用?

iOS 11+用于基础API,iOS 13+用于文本识别(VNRecognizeTextRequest),iOS 17+用于文档分割。Vision也可在macOS 10.13+和iPadOS 13+上使用。

Vision可以处理实时视频吗?

可以,Vision通过VNSequenceRequestHandler和AVFoundation处理视频流。该框架在使用快速请求时,在搭载A14+芯片的设备上支持高达60 FPS。

Vision与OpenCV有何不同?

Vision — Apple的原生框架,自动针对ANE和GPU进行优化。OpenCV — 跨平台库,功能更广泛但需要手动优化,且不支持Neural Engine。

如何向Vision添加自定义ML模型?

通过VNCoreMLRequest:创建Core ML模型,初始化VNCoreMLModel,将其传递给VNCoreMLRequest并通过VNImageRequestHandler运行。Xcode会自动为模型生成Swift类。

Vision支持情感识别吗?

间接支持 — VNDetectFaceLandmarksRequest确定人脸关键点的位置,VNDetectFaceExpressionsRequest(iOS 17+)通过闭眼评估微笑和眨眼。

总结

  • Vision — Apple的设备端计算机视觉框架,采用统一的VNRequest → VNHandler → VNObservation架构
  • 人脸检测可确定多达68个关键特征点,并评估质量和头部旋转
  • 文本识别(OCR)支持30+语言,两种模式:快速和精确
  • 条形码扫描支持QR、EAN-13、Code 128、PDF417和Aztec
  • Core ML集成通过VNCoreMLRequest允许运行自定义模型
  • 物体跟踪在视频流帧间实时工作,最高60 FPS
  • Vision和Core Image相辅相成:识别 + 图像过滤

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读