Vision — iOS, macOS, iPadOS에 내장된 Apple의 컴퓨터 비전 프레임워크로, 이미지, 비디오 및 실시간 데이터 분석을 위한 즉시 사용 가능한 API를 제공합니다. 얼굴 감지, 텍스트 인식, 바코드, 객체 윤곽선 감지 및 모션 추적을 다루며, 모든 처리는 데이터를 서버로 보내지 않고 기기 내부에서 이루어집니다. Apple Vision Documentation (2026)에 따르면, 이 프레임워크는 A14 이상 칩을 탑재한 기기에서 초당 최대 60프레임을 처리합니다.
핵심 요약
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개 지점), 30개 이상의 언어를 지원하는 텍스트 인식(OCR), QR 및 EAN 바코드 스캔, 프레임 간 객체 추적, 사각형 및 윤곽선 감지, Core ML을 통한 이미지 분류, 모션 및 광학 흐름 평가, 세그멘테이션을 통한 이미지 내 사람 감지 등 다양한 API가 포함되어 있습니다. 각 작업은 VNRequest의 별도 하위 클래스로 표현됩니다.
Vision은 Request → Handler → Results 아키텍처로 구성되며, 각 요청은 얼굴 찾기, 텍스트 인식, 객체 추적과 같은 특정 작업을 의미합니다. 가장 많이 사용되는 API를 살펴보겠습니다.
VNRequest는 모든 구체적인 Vision 요청이 상속하는 추상 기본 클래스입니다. 각 요청에는 completionHandler, 구성 매개변수 및 이미지 일부를 처리하기 위한 regionOfInterest가 포함됩니다. 요청이 생성된 후에는 VNImageRequestHandler(정적 이미지용) 또는 VNSequenceRequestHandler(비디오 스트림용)로 전달됩니다. 결과는 VNObservation의 하위 클래스인 관찰 객체 배열로 반환됩니다.
VNDetectFaceRectanglesRequest는 이미지에서 모든 얼굴을 찾아 해당 경계 상자를 반환합니다. VNDetectFaceLandmarksRequest는 눈, 눈썹, 코, 입술, 턱 윤곽 등 68개의 핵심 랜드마크를 추가로 식별합니다. VNDetectFaceCaptureQualityRequest는 얼굴 촬영 품질을 0에서 1까지 평가하며 생체 인증에 유용합니다. Apple에 따르면 Neural Engine을 탑재한 기기에서 얼굴 감지 정확도는 정면 각도에서 99%에 달합니다.
VNRecognizeTextRequest는 이미지의 광학 문자 인식(OCR) API입니다. 라틴어, 키릴 문자, 중국어, 일본어, 한국어 및 기타 언어의 인쇄 텍스트를 지원합니다. 결과는 VNRecognizedTextObservation 배열이며, 각 관찰에는 텍스트 문자열, 경계 상자 및 신뢰도 수준이 포함됩니다. 문서 스캔용 빠른(Fast) 모드와 복잡한 글꼴용 정확(Accurate) 모드의 두 가지 모드를 사용할 수 있습니다.
Vision을 사용하려면 프레임워크를 가져오고 VNRequest 객체를 만든 다음 VNImageRequestHandler로 전달하는 것만으로 충분합니다. 이미지에서 텍스트를 인식하는 예제를 살펴보겠습니다.
코드는 정확 인식 모드로 VNRecognizeTextRequest를 생성하고 이를 이미지에서 실행한 다음 인식된 텍스트를 콘솔에 출력합니다. 이 간단한 예제는 VNImageRequestHandler를 사용하여 Swift 프로젝트에 Vision을 몇 줄의 코드로 최소한으로 통합하는 방법을 보여줍니다.
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 배열은 화면에 편리하게 표시할 수 있습니다.
실시간 비디오 처리에는 VNImageRequestHandler 대신 VNSequenceRequestHandler가 사용됩니다. 이 핸들러는 이미지(프레임) 배열을 받아 동일한 요청을 순차적으로 실행하면서 프레임 간 상태를 유지합니다 — 이는 객체 추적에 필요합니다. VNSequenceRequestHandler는 메모리를 자동으로 관리합니다. 객체가 프레임을 벗어나면 이전 관찰 데이터가 제거됩니다. 실시간 성능은 요청의 복잡성에 따라 달라집니다. A16 칩을 탑재한 기기에서 얼굴 감지는 60 FPS, 텍스트 인식은 15–30 FPS로 작동합니다.
Vision과 Core Image는 이미지 작업을 위한 두 가지 Apple 프레임워크이지만 근본적으로 다른 작업을 해결합니다. Core Image는 이미지 필터링 및 변환을 위한 프레임워크입니다(필터 적용, 색상 보정, 블러). Vision은 이미지 콘텐츠를 이해하기 위한 프레임워크입니다 — 이미지에 무엇이 그려져 있는지.
| 특징 | Vision | Core Image |
|---|---|---|
| 작업 | 분석 및 인식 | 필터링 및 처리 |
| 얼굴 감지 | 예, 랜드마크 포함 | CIDetector만 |
| 텍스트 인식 | 예 (OCR) | 아니요 |
| 필터 | 아니요 | 200개 이상의 필터 |
| Core ML 통합 | 예 (VNCoreMLRequest) | 아니요 |
| 객체 추적 | 예 (VNTrackObjectRequest) | 아니요 |
| 성능 | ANE에 최적화 | GPU (Metal) |
이미지에 무엇이 있는지(얼굴, 텍스트, QR 코드, 객체) 파악해야 할 때 Vision을 사용하세요. 이미지를 변경해야 할 때(필터 적용, 색상 조정, 자르기) 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+ 칩 기기에서 총 지연 시간이 16ms 미만입니다.
SwiftUI에서 개발할 때 Vision을 통합하려면 Representable 프로토콜이 사용되며, AVCaptureSession과 VNImageRequestHandler를 UIViewRepresentable로 감쌉니다. 카메라는 PreviewView를 통해 표시되고 각 프레임은 AVCaptureVideoDataOutputSampleBufferDelegate를 통해 VisionRequestHandler로 전달됩니다. 이러한 아키텍처 접근 방식은 SwiftUI의 반응성을 유지하면서 Vision 분석 결과를 @Published 속성으로 받아 인터페이스를 즉시 업데이트할 수 있게 합니다.
Vision은 문서 스캐너부터 증강 현실 앱까지 다양한 iOS 앱에서 사용됩니다. 세 가지 대표적인 시나리오를 살펴보겠습니다.
VNDetectDocumentSegmentationRequest(iOS 17+에서 사용 가능)는 이미지에서 문서 경계를 자동으로 감지하고 원근을 보정한 다음 펴진 이미지를 반환합니다. VNRecognizeTextRequest와 결합하면 영수증, 명함 및 책 페이지를 인식할 수 있는 완전한 OCR 스캐너가 됩니다. Apple에 따르면 A15 칩 기기에서 문서 세그멘테이션은 30–80ms가 걸립니다.
VNTrackObjectRequest는 비디오 스트림의 프레임 사이에서 선택된 객체의 이동을 실시간으로 추적합니다. 개발자는 첫 번째 프레임에서 객체의 경계 상자를 지정하고, Vision은 이후 프레임에서 새 위치를 자동으로 계산합니다. 추적은 비디오 분석 앱, AR 게임 및 감시 시스템에 사용됩니다. A16 칩의 추적 정확도는 프레임당 최대 30픽셀의 객체 이동 속도에서 95%입니다.
VNDetectRectanglesRequest는 화면, 종이, 간판, 문서 등 이미지의 사각형 영역을 찾습니다. API는 원근을 보정한 모서리 좌표를 반환합니다. 사각형을 VNDetectContoursRequest와 결합하면 객체의 정확한 윤곽을 추출할 수 있습니다 — 증강 현실 앱과 그래픽 편집기에 유용합니다. VNDetectContoursRequest는 그리기 위해 UIBezierPath로 변환할 수 있는 윤곽 제어점 배열을 반환합니다.
자주 묻는 질문
기본 API는 iOS 11+, 텍스트 인식(VNRecognizeTextRequest)은 iOS 13+, 문서 세그멘테이션은 iOS 17+입니다. Vision은 macOS 10.13+ 및 iPadOS 13+에서도 사용할 수 있습니다.
네, Vision은 VNSequenceRequestHandler와 AVFoundation을 통해 비디오 스트림을 처리합니다. 프레임워크는 빠른 요청 사용 시 A14+ 칩 기기에서 최대 60 FPS를 지원합니다.
Vision은 ANE 및 GPU에 대한 자동 최적화를 제공하는 Apple의 네이티브 프레임워크입니다. OpenCV는 더 넓은 기능을 제공하지만 수동 최적화가 필요하고 Neural Engine을 지원하지 않는 크로스 플랫폼 라이브러리입니다.
VNCoreMLRequest를 통해: Core ML 모델을 만들고 VNCoreMLModel을 초기화한 다음 이를 VNCoreMLRequest로 전달하고 VNImageRequestHandler를 통해 실행합니다. Xcode는 모델에 대한 Swift 클래스를 자동으로 생성합니다.
간접적으로 — VNDetectFaceLandmarksRequest는 얼굴의 핵심 지점 위치를 결정하고, VNDetectFaceExpressionsRequest(iOS 17+)는 미소와 눈을 감은 윙크를 평가합니다.
정리
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.