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

著者: IT Sectr 公開日: 2026-07-19 読了時間: 9 分

Vision はAppleのコンピュータビジョンフレームワークで、2017年にiOS 11で初めて導入されました。Visionは顔検出、テキスト認識(OCR)、バーコード検出、オブジェクトトラッキング、画像分類、輪郭分析のための既製のアルゴリズムを提供します — すべてNeural Engineを使用してデバイス上で実行されます。Apple WWDC 2023によると、Visionは標準の写真アプリでの顔認識やカメラアプリでのiPhoneとiPadでのリアルタイムテキスト検出に使用されています。

重要ポイント

  • Vision はデバイス上で完全な分析サイクルを備えたAppleのオンデバイスコンピュータビジョンフレームワークです。
  • 顔検出、テキスト認識(OCR)、バーコード、分類、オブジェクトトラッキングをサポートします。
  • 統一された VNRequest メカニズムを通じて動作します — 画像またはビデオストリームへのリクエスト。
  • VNCoreMLRequestを介してカスタムモデル用に Core ML と統合します。
  • フレームワークはリアルタイムパフォーマンスのためにA12+チップの Neural Engine 向けに最適化されています。

iOSのVisionとは?

Vision は、複雑な機械学習アルゴリズムをシンプルなリクエストAPI(VNRequest)の背後に抽象化する高レベルコンピュータビジョンフレームワークです。開発者は畳み込みニューラルネットワークを理解する必要はありません — 適切なリクエストタイプを作成し、画像を渡して結果を得るだけです。

Visionのアーキテクチャは Request → Handler → Result の原則に基づいています:VNImageRequestHandlerが画像を受け入れ、VNRequestを実行し、結果とともにVNObservationの配列を返します。これにより、1つの画像に複数のリクエストを組み合わせることができます — 例えば、写真内の顔とテキストを同時に検出するなど。

Visionは iOS 11+ とmacOS 10.13+をサポートしています。Neural EngineによるハードウェアアクセラレーションにはA12 Bionicチップ以上が必要です。A17 ProおよびMシリーズデバイスでは、Visionはストリーミングビデオに対して毎秒60フレームまで処理します。

主な利点 は完全なプライバシーです:すべての計算はデバイス上で実行され、画像がサーバーに送信されることはありません。これにより、医療アプリや銀行アプリなどの機密データを扱うアプリケーションでフレームワークを使用できます。

顔検出と認識

VNDetectFaceRectanglesRequest は、画像内の顔を検出するためのVisionの基本的なリクエストです。特定の人物を識別せずに、各顔を囲む矩形の座標を返します。

より詳細な分析には、VNDetectFaceLandmarksRequest を使用します。これは顔のキーポイント(目、眉毛、鼻、口、あごの輪郭)を識別します。このデータは、マスクの適用、絵文字のアニメーション、リアルタイムフィルター(FaceTimeやSnapchatなど)に使用されます。

swift
import Vision
import UIKit

guard let image = UIImage(named: "photo") else { return }
let request = VNDetectFaceRectanglesRequest()
let handler = VNImageRequestHandler(cgImage: image.cgImage!, options: [:])

try handler.perform([request])
for observation in request.results ?? [] {
    let bbox = observation.boundingBox
    print("Face at x=\\(bbox.origin.x), y=\\(bbox.origin.y)")
}

VNFaceObservation には、boundingBoxだけでなく、confidence(0〜1)と、リクエストがVNDetectFaceLandmarksRequestだった場合の顔のランドマーク(点の配列)も含まれます。0.5未満のconfidenceは通常、誤検出を示します — そのような結果は破棄することをお勧めします。

Visionは VNDetectFaceCaptureQualityRequest もサポートしており、顔画像の品質(照明、シャープネス、回転角度)を評価します。これはユーザー登録時に最適なフレームを選択したり、アバターを作成したりするのに役立ちます。

Visionを使ったテキスト認識(OCR)

VNRecognizeTextRequest はAppleの内蔵OCRエンジンで、iOS 13で導入されました。13の言語(英語、ロシア語、中国語、日本語、韓国語、イタリア語、ドイツ語、スペイン語、ポルトガル語、フランス語、アラビア語、ベトナム語、タイ語)をサポートして、画像内の印刷テキストを認識します。

VNRecognizeTextRequest は2つの精度レベルをサポートしています:.fast(高速、コントラストのある背景上のシンプルなテキスト用)と.accurate(高精度、さまざまなフォントや角度の複雑なシーン用)。.fastは3〜5倍高速ですが、手書きテキストや非標準フォントの処理効率は低くなります。

swift
import Vision

let textRequest = VNRecognizeTextRequest { request, _ in
    guard let observations = request.results as? [VNRecognizedTextObservation]
    else { return }
    for observation in observations {
        let topCandidate = observation.topCandidates(1).first
        print(topCandidate?.string ?? "")
    }
}
textRequest.recognitionLevel = .accurate
textRequest.usesLanguageCorrection = true

usesLanguageCorrection プロパティは、言語モデルを使用した認識テキストの補正を有効にします。これにより英語の精度が10〜15%向上しますが、処理時間が増加します。適切な認識が指定されている場合、ロシア語の補正も利用可能です。

Apple ML Research 2022 によると、.accurateレベルのVNRecognizeTextRequestの精度は、英語の鮮明な書類写真で96%、ロシア語で約88%です。パッケージ、看板、画面のテキストでは、精度は75〜85%に低下します。

認識レベル速度精度(英語)ロシア語対応
.fast0.1〜0.3秒〜85%はい
.accurate0.3〜1.0秒〜96%はい

バーコードとQRコードの検出

VNDetectBarcodesRequest は、画像内のバーコードとQRコードを検出およびデコードするためのVisionリクエストです。EAN-8、EAN-13、UPC-A、UPC-E、Code 39、Code 93、Code 128、PDF417、Aztec、QRなど、すべての主要フォーマットがサポートされています。

AVFoundation(AVCaptureMetadataOutput)とは異なり、Visionはビデオストリームだけでなく静止画像でも動作します — これにより、既存の写真やスクリーンショットからコードをスキャンできます。Visionはコードの boundingBox をピクセル精度で決定し、検出されたコードの周りにフレームをアニメーション表示するのに便利です。

swift
import Vision

let barcodeRequest = VNDetectBarcodesRequest { request, _ in
    guard let observations = request.results as? [VNBarcodeObservation]
    else { return }
    for observation in observations {
        let payload = observation.payloadStringValue ?? ""
        print("Barcode: \\(payload), Symbology: \\(observation.symbology.rawValue)"
    }
}

VNBarcodeObservation には、payloadStringValue(デコードされたコンテンツ)、symbology(コードタイプ)、confidenceが含まれます。QRコードの場合、ペイロードはURL、テキスト、またはJSONになります。EAN/UPCの場合は、データベースで商品を検索するために使用できる数値の製品コードが返されます。

Visionは1つの画像で 複数のバーコード を処理できます — observations配列には、検出されたコードごとに1つのオブジェクトが含まれます。これは、製品のバッチや複数のバーコードを持つドキュメントのスキャンに便利です。

ビデオストリームでのオブジェクトトラッキング

VNDetectObjectAtPointRequestVNSequenceRequestHandler は、ビデオストリーム内のオブジェクトを追跡するためのVisionツールです。前者はユーザーのタッチポイントによってオブジェクトを識別し、後者はビデオフレーム間でオブジェクトを追跡します。

VNSequenceRequestHandler は一連の画像(ビデオフレーム)を受け入れ、各フレームの追跡オブジェクトの更新された位置を返します。これは拡張現実アプリ、ビデオエディタ、監視システムで使用されます。

swift
import Vision

let trackingRequest = VNTrackObjectRequest(detectedObjectObservation: initialObservation)
let sequenceHandler = VNSequenceRequestHandler()

for frame in videoFrames {
    try sequenceHandler.perform([trackingRequest],
        on: frame.cgImage!)
    let newBBox = trackingRequest.results?.first?.boundingBox
    // 画面上のオブジェクト位置を更新
}

VNTrackObjectRequest はオプティカルフローベースの追跡アルゴリズムを使用します — 毎フレームで検出器を再トレーニングするのではなく、前の位置からのオブジェクトの変位を計算します。これにより、Neural Engineがないデバイスでもリアルタイムパフォーマンスが可能になります。

制限事項:高速移動、遮蔽、急な照明変化により追跡がオブジェクトを見失う可能性があります。Appleはトラッキング補正のために10〜15フレームごとに検出(VNDetectObjectAtPointRequest)を再起動することを推奨しています。

画像分類と輪郭分析

VNClassifyImageRequest は、Visionの組み込み画像分類モデルで、1000カテゴリ(ImageNetでトレーニングされたResNet-50モデル)をカバーしています。リクエストは、カテゴリ名とconfidenceを含むVNClassificationObservationの配列を返します。

VNDetectContoursRequest は画像の輪郭分析を実行します — オブジェクトの境界を抽出し、セグメンテーション、輪郭抽出、認識前の前処理に役立ちます。リクエストは画像内の各輪郭を記述する点の配列を返します。

swift
import Vision

// 画像分類
let classificationRequest = VNClassifyImageRequest { request, _ in
    guard let results = request.results as? [VNClassificationObservation]
    else { return }
    let topMatch = results.prefix(3).filter { $0.confidence > 0.3 }
    for match in topMatch {
        print("\\(match.identifier): \\(match.confidence)"
    }
}

VNClassifyImageRequest は一般的なカテゴリ(猫、犬、車、食べ物)には適していますが、特定のオブジェクトには適していません — その場合は、カスタムCore MLモデルをトレーニングしてVNCoreMLRequestを使用する必要があります。Appleのモデルはモバイルデバイス向けに最適化されており、わずか5 MBです。

VNDetectContoursRequest は輪郭タイプ(外部、内部、穴)とともに点の配列として輪郭を返します。このリクエストは、OCR前の画像の前処理(テキストコントラストの改善)、エフェクトの描画(オブジェクトの輪郭抽出)、形状分析に使用されます。

Visionリクエスト目的iOSバージョン
VNDetectFaceRectanglesRequest画像内の顔検出iOS 11
VNRecognizeTextRequestテキスト認識(OCR)iOS 13
VNDetectBarcodesRequestバーコードとQR検出iOS 11
VNClassifyImageRequest画像分類iOS 13
VNDetectContoursRequest輪郭分析iOS 14
VNTrackObjectRequestオブジェクトトラッキングiOS 11

よくある質問

コンピュータビジョンにおけるVisionとCore MLの違いは何ですか?

Vision はモデルトレーニングなしで既製のアルゴリズム(顔検出、OCR、バーコード)を提供します。Core MLはカスタムモデルを実行するためのエンジンです。Vision + VNCoreMLRequestを使用すると、Visionパイプライン内でCore MLモデルを実行でき、両方の利点(Visionの既製検出器 + Core MLのカスタム分類)を得られます。

Visionはビデオでリアルタイム動作しますか?

はい、Vision はVNSequenceRequestHandlerによるトラッキングとAVCaptureVideoDataOutputによるフレームごとの処理を通じて、リアルタイムのビデオストリーム処理をサポートしています。A12+とNeural Engineを搭載したデバイスでは、Visionは顔検出で最大60 fpsを処理します。負荷の高いタスク(OCR、分類)では、5〜10フレームごとに処理することをお勧めします。

VNRecognizeTextRequestはどの言語をサポートしていますか?

VNRecognizeTextRequest は13の言語(英語、ロシア語、中国語(簡体字および繁体字)、日本語、韓国語、イタリア語、ドイツ語、スペイン語、ポルトガル語、フランス語、アラビア語、ベトナム語、タイ語)をサポートしています。1つの画像で複数の言語を認識するには、recognitionLanguagesプロパティに配列を指定します。

VisionをCore MLモデルと一緒に使用できますか?

はい、VNCoreMLRequest を介して使用できます。VNCoreMLModelでラップされたCore MLモデルを作成し、VNCoreMLRequestに渡します。Visionは自動的に画像の前処理(スケーリング、クロッピング)を処理し、Core MLモデルに供給します。結果はモデルの出力データとともにVNCoreMLFeatureValueObservationとして返されます。

VisionはAppleのサーバーに画像を送信しますか?

いいえ、Vision はすべての分析を完全にデバイス上で実行します。画像がユーザーのデバイスから出ることはありません。これはAppleの基本アーキテクチャです:すべてのMLフレームワーク(Vision、NaturalLanguage、Core ML、Speech)はプライバシーを確保するためにオンデバイスで動作します。Appleのサーバーにデータが送信されることはありません。

まとめ

  • Vision — VNRequestベースのAPIを備えたAppleのオンデバイスコンピュータビジョンフレームワーク、iOS 11以降すべてのAppleデバイスで利用可能。
  • VNDetectFaceRectanglesRequestVNDetectFaceLandmarksRequest はフィルター、マスク、アニメーション用に顔とキーポイントを検出します。
  • VNRecognizeTextRequest — 13言語対応の内蔵OCR、.fastと.accurateレベル、書類で最大96%の精度。
  • VNDetectBarcodesRequest は写真とビデオストリームの両方で人気のバーコードとQRコード形式をすべてデコードします。
  • VNTrackObjectRequest は検出器を再トレーニングせずにオプティカルフローを介してビデオフレーム間でオブジェクトを追跡します。
  • VNCoreMLRequestによる Core ML統合 により、Visionパイプライン内でカスタム分類および検出モデルを実行できます。
  • すべての計算はNeural Engineを使用して デバイス上で 実行され、サーバーに画像が送信されることはなく、完全なデータプライバシーが確保されます。

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

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

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

こちらもお読みください