【iOS】Live Text APIで画像内のテキストを抽出するための最小実装
WWDC22で発表されたLive Text APIを使用すると、簡単に画像内のテキストを抽出することができるようになりました。さらに、抽出したテキストに対して、コピー、翻訳、Web検索といった様々なアクションを行うことができます。
本記事では、Live Text APIを使用して、テキストを抽出するための最小実装方法について書きます。
Live Textのサポート環境を確認
Live Text APIで画像内のテキストを抽出する前に、デバイスがLive Textをサポートしているかを、ImageAnalyzer
クラスのisSupported
プロパティで確認します。iOS Appの場合、iOS 16以上でかつ、A12 Bionic以降のチップを搭載したデバイスがLive Textをサポートしています。
ImageAnalysisInteraction
オブジェクトをViewに追加
テキストを抽出したい画像を含むViewに対して、addInteraction
メソッドでImageAnalysisInteraction
オブジェクトを追加します。
ViewにImageAnalysisInteraction
オブジェクトを追加することで、Viewをダブルタップ、ロングプレスした時に、Live Textインターフェイスを表示することができるようになります。
ImageAnalysisInteraction
オブジェクトの初期化処理
画像内のテキストを抽出する処理を行う前に、ImageAnalysisInteraction
オブジェクトのanalysis
プロパティにnil
を代入して前回の画像解析結果を無効にし、preferredInteractionTypes
プロパティに空配列を代入してインタラクションタイプを無効にします。インタラクションタイプについては後ほど説明します。
ImageAnalyzer
オブジェクトの設定
画像内のテキストを抽出する処理を行うには、ImageAnalyzer
オブジェクトを使用します。最初に、ImageAnalyzer
オブジェクトの設定を定義した、ImageAnalyzer.Configuration
オブジェクトを作成します。
ImageAnalyzer.Configuration
のイニシャライザにはImageAnalyzer.AnalysisTypes
オブジェクトを指定します。.text
はテキストの読み込みを可能に、 .machineReadableCode
はQRコードの読み込みを可能にします。
テキスト抽出処理の実行
ImageAnalyzer
オブジェクトのanalyze
メソッドでテキスト抽出処理を行います。analyze
メソッドの引数には、テキスト抽出対象のUIImage
オブジェクトと、前項で作成したImageAnalyzer.Configuration
オブジェクトを指定します。テキスト抽出結果はImageAnalysis
オブジェクトに格納されるので、結果をImageAnalysisInteraction
オブジェクトのanalysis
プロパティに格納します。
最後に、preferredInteractionTypes
プロパティにインタラクションタイプを指定します。インタラクションタイプとは、画像内に含まれるテキストデータをどの様に扱うかを定義したものです。
インタラクションタイプはいくつかの種類が用意されています。
インタラクションタイプ | 効果 |
---|---|
automatic | アナライザが抽出した画像内に含まれる、全ての抽出データに対して、アクションを行うことに適したインタラクションタイプ |
textSelection | アナライザが抽出したテキストに対して、アクションを行うことに適したインタラクションタイプ |
dataDetectors | アナライザが抽出したURL、電子メールアドレス、物理アドレスといったアドレスに対して、アクションを行うことに適したインタラクションタイプ |
各インタラクションタイプの動作は以下の様になります。
-
automatic
-
textSelection
-
dataDetectors
テキスト抽出結果
画像内のテキストを抽出することができています。テキストが地名の時、テキスト部分をロングタップすると、位置情報を表すマップが表示されます。また、テキストがURLの時、テキスト部分をロングタップすると、ポップアップでURL先のページを表示することもできます。
サンプルソース
UIKit版
SwiftUI版
参考資料
・Add Live Text interaction to your app
Discussion