9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ショートカットアプリで撮影したスクリーンショットにOCRをかけて指定のテキストデータを取得する方法

Last updated at Posted at 2022-02-28

経緯

  • OCRを使用してアプリ上で表示されたコピー不可のテキストを読み取る方法を検討していた。
  • こちらの記事より、iOSアプリのショートカットで「イメージからテキストを抽出」アクションを使用することで画像データから文字データを取得できることが分かり、実際に試してみることにした。

確認したこと

「写真を選択」(設定はデフォルト)→「写真からテキスト抽出」を実行するショートカットを作成して結果を確認したところ以下のことがわかりました。

  • 画像のサイズが変わると認識対象が変わる
  • 英数字記号は読み取れるが日本語は読み取れない
  • 英語では黒字以外も読み取れるが、サイズが小さいと正しく認識されないケースがある
  • アイコンも文字として認識するケースがある
使用したOSバージョン
  • iOS 15.3.1
  • macOS Monterey 12.1
テスト画像(iPhoneで保存したスクリーンショット画像)
結果
2A288 ARB
Today
APPLE ARCADE
ARMa
tHEO
Apple Arcade
Little Orpheus
AF
R5/5 d. Ib^ !
FLYE
AREA O App
LINE
LINE
y-UTITY7-+/T
8 <
Q
Today
7'-A
App
Arcade
†ASE

また、iPhoneではテキスト認識表示で画像内の文字データをコピーすることができますが、上記画像の「奇想天外な地底冒険」をコピーしたところ下記のように認識されました。(「な」が「在」と変換されています)
認識結果はショートカットの結果と異なるので動いている処理が異なる可能性が高いですが、どちらにせよ、日本語の精度は低いので改善されることを期待します。

奇想天外在
地底の冒險

ここまででOCR機能について確認ができたので、次に日本語には使用しないことを前提して、実際にアプリ上で撮影したスクリーンショットからテキストデータを取得する方法として以下2点を検討しました。

  1. 画像データを切り取り後にOCRをかける
  2. 画像全体に対するテキスト抽出結果から取得したい文字データを指定する

検討したこと

例としてiPhoneの時計アプリを起動して、「イメージからテキストを抽出」アクションから時間の文字データを取得するショートカットを作成します。

1. 画像データを切り取り後にOCRをかける

作成した処理
  1. スクリーンショットで作成した画像データに対して指定の座標で切り取る
  2. 1.の切り取り後の画像に対してテキスト表示アクションを実行し、OCRをかける
使用したアクション
  • Appを開く
  • スクリーンショットを撮る
  • イメージを切り取り
    • カスタム
    • X座標,Y座標,幅,高さ
  • イメージからテキストを抽出
  • 結果を表示
  • ショートカットを停止
作成したショートカット(.gif)

作成したショートカットではニューヨークの時間部分を切り取るように切り取り指定しました。
座標を細かく設定する必要があるため使いづらさはありますが、問題なく認識できています。
切り取り.gif

2. 画像全体に対するテキスト抽出結果から取得したい文字データを指定する

作成した処理
  1. スクリーンショットで作成した画像データに対してテキスト表示アクションを実行し、画像全体に対してOCRをかける(リストに保存)
  2. 1.の結果のままでは認識結果が多くなるため、候補を絞るため正規表現で絞り込み(リストに保存)
  3. 保存されたリストに対して表示したいインデックスの結果を数字で入力
使用したアクション
  • Appを開く
  • スクリーンショットを撮る
  • イメージからテキストを抽出
  • 一致するテキスト
    • 一致する文字列:.*:.*
  • 入力を要求
  • リストから項目を取得
  • 結果を表示
  • ショートカットを停止
作成したショートカット(.gif)

抽出されるテキストはアプリに依存しますが、正規表現で指定することで取得したデータを絞ることができ、リストから選択しやすくなります。
全体.gif

その他に試したこと

前回投稿した記事で保有する暗号資産をAPI経由で日本円換算する方法を紹介しました。
2.の方法でDocs記載のアカウント(Polkadot.pro - Realgar)を表示してスクリーンショットを撮り、OCRをかけてBalanceを取得し、Cingecko APIで取得したDOTJPYの値をかけることで同様に日本円換算した値を取得することができました。
DOTJPYsc.gif

まとめ

  • iOSアプリのショートカットで「イメージからテキストを抽出」アクションを使用することで画像データにOCRをかけてアプリのスクリーンショットから文字データを取得できることを確認しました。
  • 使用したショートカットのOCRでは日本語を認識できませんでしたが、取得したいデータは指定できるため、大量のデータを取得しない場合は扱いやすいと思いました。
  • ショートカットはiOSとmacOS共通で使用できますが、端末によっては文章が変わったり、Macでは「Appを開く」が使用できない(iOSアプリのため)などあるため、諸々今後改善されることを期待します。
9
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?