Vision:コンピュータビジョンフレームワークとiOSでの動作

著者: IT Sectr 公開日: 2026-03-26 読了時間: 8 分

VisionはAppleのコンピュータビジョンフレームワークで、iOS、macOS、iPadOSに組み込まれており、画像、動画、リアルタイムデータを分析するための既製APIを提供します。顔検出、テキスト認識、バーコード、オブジェクトの輪郭、モーション追跡をカバーし、すべてデバイス上でサーバーにデータを送信せずに処理します。Apple Vision Documentation (2026)によると、このフレームワークはA14チップ以降のデバイスで毎秒60フレームまで処理できます。

重要なポイント

  • Vision — 顔、テキスト、オブジェクト検出のためのAPIを備えたAppleのオンデバイスコンピュータビジョンフレームワーク
  • 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(複雑なフォント用)の2つのモードが利用可能です。

  • VNDetectFaceRectanglesRequest — バウンディングボックスを返す顔検出
  • VNDetectFaceLandmarksRequest — 68の顔ランドマークポイント
  • VNRecognizeTextRequest — 30以上の言語に対応するOCR
  • VNDetectBarcodesRequest — QR、EAN、PDF417スキャン
  • VNCoreMLRequest — カスタムCore MLモデルの実行

iOSへのVision統合

Visionを使用するには、フレームワークをインポートし、VNRequestオブジェクトを作成してVNImageRequestHandlerに渡すだけです。画像上のテキスト認識の例を見てみましょう。

Swiftコード例

このコードは、正確な認識モードでVNRecognizeTextRequestを作成し、画像上で実行して、認識されたテキストをコンソールに出力します。この簡単な例は、わずか数行のコードでVNImageRequestHandlerを使用したSwiftプロジェクトへの最小限の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配列は画面に簡単に表示できます。

リアルタイム動画処理には、VNImageRequestHandlerの代わりにVNSequenceRequestHandlerを使用します。これは画像(フレーム)の配列を受け入れ、フレーム間で状態を維持しながら同じリクエストを順次実行します。これはオブジェクト追跡に不可欠です。VNSequenceRequestHandlerはメモリを自動的に管理し、オブジェクトがフレームから外れると古い観測結果を削除します。リアルタイムパフォーマンスはリクエストの複雑さに依存し、顔検出は60 FPS、テキスト認識はA16チップ搭載デバイスで15~30 FPSで動作します。

Vision vs Core Image

VisionとCore Imageは画像を扱うためのAppleの2つのフレームワークですが、根本的に異なるタスクを解決します。Core Imageは画像のフィルタリングと変換(フィルタ適用、色補正、ぼかし)のためのフレームワークです。Visionは画像の内容を理解するためのフレームワークです。

特性VisionCore 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の使用例

Visionは、文書スキャナーから拡張現実アプリまで、幅広いiOSアプリケーションで使用されています。3つの典型的なシナリオを見てみましょう。

文書スキャン

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はANEとGPU向けに自動最適化されたAppleのネイティブフレームワークです。OpenCVはより広範な機能を備えたクロスプラットフォームライブラリですが、手動最適化が必要でNeural Engineをサポートしていません。

VisionにカスタムMLモデルを追加するには?

VNCoreMLRequestを介して:Core MLモデルを作成し、VNCoreMLModelを初期化してVNCoreMLRequestに渡し、VNImageRequestHandlerを通じて実行します。Xcodeが自動的にモデルのSwiftクラスを生成します。

Visionは感情認識をサポートしていますか?

間接的に — VNDetectFaceLandmarksRequestが顔の主要ポイントの位置を特定し、VNDetectFaceExpressionsRequest(iOS 17+)が閉じた目を通じて笑顔やウインクを評価します。

まとめ

  • Vision — 統一されたVNRequest → VNHandler → VNObservationアーキテクチャを備えたAppleのオンデバイスコンピュータビジョンフレームワーク
  • 顔検出は品質評価と頭部回転を伴う最大68の主要ランドマークを識別
  • テキスト認識(OCR)は高速と精密の2モードで30以上の言語をサポート
  • バーコードスキャンはQR、EAN-13、Code 128、PDF417、Aztecに対応
  • Core ML統合によりVNCoreMLRequestを介してカスタムモデルを実行可能
  • オブジェクト追跡は動画フレーム間でリアルタイム最大60 FPSで動作
  • VisionとCore Imageは相互補完:認識+画像フィルタリング

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください