📑

【iOS】Live Text APIで画像内のテキストを抽出するための最小実装

2023/05/20に公開

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
https://developer.apple.com/videos/play/wwdc2022/10026/

Discussion