paint-brush
Apple の Vision Framework を使い始める: 開発者の視点@threadmaster
新しい歴史

Apple の Vision Framework を使い始める: 開発者の視点

Boris Dobretsov5m2025/02/19
Read on Terminal Reader

長すぎる; 読むには

Apple の Vision フレームワークは iOS 11 で導入されました。これにより、開発者は視覚コンテンツを分析し、必要に応じて後続の処理を実行できます。この記事では、コード例を使用して、Vision を使用する主なシナリオについて説明します。
featured image - Apple の Vision Framework を使い始める: 開発者の視点
Boris Dobretsov HackerNoon profile picture
0-item
1-item

Vision フレームワークは、2017 年の WWDC で iOS 11 の一部として Apple によって導入されました。そのリリースは、マシン ビジョンと画像分析の進化における転換点となり、開発者に視覚コンテンツを分析し、必要に応じて後続の処理を実行するためのネイティブ ツールを提供しました。


2017 年に Vision は以下を導入しました。

  • テキスト認識
  • 顔認識
  • 長方形の検出
  • バーコードとQRコードの認識


Apple は、デビュー以来、Vision フレームワークを継続的に強化し、現代の要件を満たすように進化させてきました。2024 年末の iOS 18 のリリースにより、Vision は次の機能を提供します。

  • 多数の言語をサポートし、テキスト認識精度が向上
  • 顔とその特徴の検出
  • 動きを分析する能力
  • 手の位置や人体の要点など、ポーズを認識する能力
  • ビデオ内のオブジェクト追跡のサポート
  • カスタム機械学習モデルを操作するための CoreML との統合の改善
  • AVKit、ARKitなどの関連フレームワークとの緊密な統合


Vision フレームワークの登場により、開発者はサードパーティのソリューションに頼ることなく、高度な画像およびビデオ分析タスクをネイティブに実行できるようになりました。これらの機能には、ドキュメントのスキャン、テキストの認識、顔やポーズの識別、重複画像の検出、ビジネス オペレーションを効率化するさまざまなプロセスの自動化などが含まれます。


この記事では、Vision を使用する主なシナリオをコード例とともに見ていきます。これにより、Vision の使い方を理解し、それが難しくないことを理解し、実際にアプリケーションに適用し始めることができます。

VNリクエスト

Vision には、Vision のデータ要求構造を定義する抽象クラスVNRequestがあり、子孫クラスは、イメージを使用して特定のタスクを実行するための特定の要求を実装します。


すべてのサブクラスは、 VNRequestクラスから初期化子を継承します。

 public init(completionHandler: VNRequestCompletionHandler? = nil)

リクエストの処理結果を返します。リクエストの結果は、リクエストが送信されたのと同じキューに返されることを明確にすることが重要です。


ここで、 VNRequestCompletionHandlerは typealias です。

 public typealias VNRequestCompletionHandler = (VNRequest, (any Error)?) -> Void

リクエストの結果を含むVNRequestを返します。システム エラー、不正な画像などによりリクエストが実行されなかった場合は、エラーを返します。


抽象VNRequestクラスのVNRecognizeTextRequestクラスは、画像内のテキスト認識要求を処理するように設計されています。


テキスト認識のリクエストを実装する例:

 import Vision import UIKit func recognizeText(from image: UIImage) { guard let cgImage = image.cgImage else { return } let request = VNRecognizeTextRequest { request, error in // 1 guard let observations = request.results as? [VNRecognizedTextObservation] else { return } // 2 for observation in observations { if let topCandidate = observation.topCandidates(1).first { print("Recognized text: \(topCandidate.string)") print("Text boundingBox: \(observation.boundingBox)") print("Accuracy: \(topCandidate.confidence)") } } } request.recognitionLevel = .accurate request.usesLanguageCorrection = true let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) // 3 try? handler.perform([request]) // 3 }


  1. テキスト認識用のVNRecognizeTextRequestを作成します。


  2. テキスト認識要求の結果を VNRecognizedTextObservation オブジェクトの配列として受信します。


VNRecognizedTextObservationオブジェクトには以下が含まれます。

  • 認識されたテキストの配列 (V NRecognizedText().string )
  • 認識精度 ( VNRecognizedText().confidence )
  • 画像上で認識されたテキストの座標 ( VNRecognizedText().boundingBox )


  1. 画像処理のリクエストを作成し、テキスト認識のリクエストを送信します。


  2. 例:文書認識用の独自のSDKを開発する場合の納税者番号とパスポート番号の認識

VNDetectFaceRectanglesリクエスト

このクラスは画像内の顔を見つけて、その座標を返します。


顔認識リクエストの実装例:

 import Vision import UIKit func detectFaces(from image: UIImage) { guard let cgImage = image.cgImage else { return } let request = VNDetectFaceRectanglesRequest { request, error in // 1 guard let results = request.results as? [VNFaceObservation] else { return } // 2 for face in results { print("Face detected: \(face.boundingBox)") } } let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) // 3 try? handler.perform([request]) // 3 }


  1. 画像内の顔認識用のVNDetectFaceRectanglesRequestを作成します。


  2. テキスト認識要求の結果をVNFaceObservationオブジェクトの配列として受信します。


VNFaceObservationオブジェクトには以下が含まれます。

  1. 認識された顔の座標VNFaceObservation().boundingBox。


  2. 画像処理のリクエストを作成し、顔認識のリクエストを送信します。


  3. 例:銀行では、パスポートと一緒に写真を撮る KYC オンボーディングがあり、これにより、これが実際の人物の顔であることを確認できます。


VNバーコード検出リクエスト

このクラスは、画像からバーコードと QR コードを認識して読み取ります。


バーコードと QR コードを認識して読み取るリクエストを実装する例:

 import Vision import UIKit func detectBarcodes(from image: UIImage) { guard let cgImage = image.cgImage else { return } let request = VNDetectBarcodesRequest { request, error in // 1 guard let results = request.results as? [VNBarcodeObservation] else { return } // 2 for qrcode in results { print("qr code was found: \(qrcode.payloadStringValue ?? "not data")") } } let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) // 3 try? handler.perform([request]) // 3 }


  1. 認識用のVNDetectBarcodesRequestを作成します。


  2. VNBarcodeObservationオブジェクト配列要求の結果を取得します。


VNBarcodeObservationオブジェクトには、次のような多くのプロパティが含まれています。

  1. VNFaceObservation().payloadStringValue - バーコードまたは QR コードの文字列値。


  2. 画像処理のリクエストを作成し、顔認識のリクエストを送信します。


  3. 例:支払い用の QR コードを読み取る QR スキャナー。


この強力なツールを使い始めるのに役立つように、Vision の 3 つの主要なクエリの種類について説明しました。