VisionはAppleのコンピュータビジョンフレームワークで、iOS、macOS、iPadOSに組み込まれており、画像、動画、リアルタイムデータを分析するための既製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ポイント)、テキスト認識(OCR、30以上の言語対応)、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(複雑なフォント用)の2つのモードが利用可能です。
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はメモリを自動的に管理し、オブジェクトがフレームから外れると古い観測結果を削除します。リアルタイムパフォーマンスはリクエストの複雑さに依存し、顔検出は60 FPS、テキスト認識はA16チップ搭載デバイスで15~30 FPSで動作します。
VisionとCore Imageは画像を扱うためのAppleの2つのフレームワークですが、根本的に異なるタスクを解決します。Core Imageは画像のフィルタリングと変換(フィルタ適用、色補正、ぼかし)のためのフレームワークです。Visionは画像の内容を理解するためのフレームワークです。
| 特性 | Vision | Core Image |
|---|---|---|
| タスク | 分析と認識 | フィルタリングと処理 |
| 顔検出 | あり(ランドマーク付き) | CIDetectorのみ |
| テキスト認識 | あり(OCR) | なし |
| フィルタ | なし | 200以上のフィルタ |
| Core ML統合 | あり(VNCoreMLRequest) | なし |
| オブジェクト追跡 | あり(VNTrackObjectRequest) | なし |
| パフォーマンス | ANE向けに最適化 | GPU(Metal) |
画像に何が含まれているかを理解する必要がある場合(顔、テキスト、QRコード、オブジェクト)はVisionを使用します。画像を修正する必要がある場合(フィルタ適用、色調整、トリミング)はCore Imageを使用します。多くの場合、これら2つのフレームワークは組み合わせて使用されます。最初にCore Imageが画質を向上させ、次にVisionがテキストを認識します。
実際には、VisionとCore Imageは文書スキャンアプリケーションで一緒に使用されます。Core Imageは自動的にコントラストを高め、影を除去し(CIFilter with CIPhotoEffectNoir)、Visionは強化された画像でテキストを認識します。Apple(WWDC 2025)によると、生のカメラフレームと比較してCore Imageで画像を前処理すると、OCR精度が15~20%向上します。
組み合わせ使用のもう1つの重要なユースケースは、拡張現実アプリケーションのためのリアルタイム顔分析です。Visionが顔を検出して68のランドマークを識別し、Core Imageが検出された領域にフィルタを適用します。ARKitは顔追跡にVisionを、エフェクトレンダリングにCore Imageを使用し、A15+チップ搭載デバイスで16ms未満の総レイテンシを実現します。
SwiftUIでVision統合を開発する場合、Representableプロトコルを使用してAVCaptureSessionとVNImageRequestHandlerをUIViewRepresentableでラップします。カメラはPreviewViewを通じて表示され、各フレームはAVCaptureVideoDataOutputSampleBufferDelegateを介してVisionRequestHandlerに渡されます。このアーキテクチャアプローチはSwiftUIのリアクティビティを維持し、Vision分析結果を@Publishedプロパティとして配信して即時UI更新を実現します。
Visionは、文書スキャナーから拡張現実アプリまで、幅広いiOSアプリケーションで使用されています。3つの典型的なシナリオを見てみましょう。
VNDetectDocumentSegmentationRequest(iOS 17+以降で利用可能)は、画像内の文書の境界を自動的に検出し、遠近法を補正して、修正された画像を返します。VNRecognizeTextRequestと組み合わせることで、請求書、名刺、本のページを認識できるフル機能のOCRスキャナーが作成されます。Appleによると、文書セグメンテーションはA15チップ搭載デバイスで30~80ミリ秒かかります。
VNTrackObjectRequestは、選択したオブジェクトの動画フレーム間の動きをリアルタイムで追跡します。開発者は最初のフレームでオブジェクトのバウンディングボックスを指定し、Visionが後続のフレームでその新しい位置を自動的に計算します。追跡は、動画分析アプリケーション、ARゲーム、監視システムで使用されます。A16チップでの追跡精度は、毎秒30ピクセルまでのオブジェクト移動速度で95%です。
VNDetectRectanglesRequestは画像内の矩形領域(画面、紙、看板、文書)を見つけます。APIは遠近法補正付きで角の座標を返します。VNDetectContoursRequestと矩形を組み合わせることで、正確なオブジェクトの輪郭を抽出できます。これは拡張現実アプリケーションやグラフィックエディタに役立ちます。VNDetectContoursRequestはレンダリング用にUIBezierPathに変換できる輪郭制御点の配列を返します。
よくある質問
iOS 11+で基本API、iOS 13+でテキスト認識(VNRecognizeTextRequest)、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アプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。