この記事ではPower Automate Desktop(以下:PAD)で画像から文字を抜き出す方法について解説します。
この記事で解説すること
- Power Automate for Desktopで使えるOCRの種類の解説
- Power Automate for DesktopでAzure Cognitive Services(コグニティブサービス)のComputer Visionを使ったOCRのやり方
画像から文字列を抽出する技術をOCRといいます。
Power Automate for Desktopでも簡単にOCRを使うことができます。
Power Automate for DesktopにはOCR関連のアクションが3つあります。
Power Automate DesktopのOCR系のアクション
- OCRグループの中の「OCRを使ってテキストを抽出」アクション
- Microsoft コグニティブグループ – Computer Visionグループの中の「OCR」アクション
- Googleコグニティブ – ビジョングループの中の「テキスト検出」アクション
PDFファイルからテキストを抽出するには「PDFからテキストを抽出」アクションがあります。
Power Automate DesktopのOCRアクションの比較
OCRグループ 「OCRを使ってテキストを抽出」アクション | Microsoftコグニティブ Computer Visionグループ 「OCR」アクション | Googleコグニティブ ビジョングループ 「テキスト検出」アクション | |
---|---|---|---|
利用する方法 | Power Automate Desktopをインストールすれば最初から利用できる。 | Microsoft Azureのアカウント登録をしてサブスクリプションキーの取得が必要。 | Google Cloud Platform(GCP)のアカウント登録とAPIキーの取得が必要。 |
使用されるOCR技術 | Tesseract-OCR | Microsoft Azure Computer Vision | Google Cloud Vision API |
料金 | 無料 | 従量課金制 期間限定で無料試用可能。 | 従量課金制 無料枠(Alwas-free)あり。 |
日本語対応状況 | 日本語パックのインストールが必要。少しわかりにくいかも。 | 日本語標準対応 | 日本語標準対応 |
精度 | ? | ? | ? |
精度については、後日比較してみたいと思います。
気になる無料枠ですが、Microsoft Azureは12か月の無料試用期間中は回数制限付きで無料で利用できます。期間を過ぎたあとは無料で使える枠は無さそうです。GCPは12か月の無料試用期間を過ぎてもAlways-freeという枠がありますので、その枠内であれば継続して無料使用ができそうです。
- Microsoft Azure Cognitive Services(Computer Vision)
https://azure.microsoft.com/ja-jp/pricing/details/cognitive-services/computer-vision/ - Google Cloud Visionの料金
https://cloud.google.com/vision/pricing?hl=ja#prices
料金については必ず最新の公式の情報を確認するようにお願いします。
Computer VisionのOCRを使ってみたいと思います。
この記事ではComputer Visionを使ったOCRを試してみたいと思います。Computer Visionを使うにはMicrosoft Azureの登録とサブスクリプションキーの取得が必要です。手順については下記の記事で解説していますのであわせてご覧ください。
PADフロー完成図
下の画像から文字列を読み取り、テキストファイルに出力します。
Power Automate for Desktopフロー作成手順
- サーバの場所:東日本
- サブスクリプションキー:AzureでComputer Visionアプリを作成したときに発行されたキーを張り付けます。
- 画像を提供します:「GCSから」か「ファイルから」を選択します。GCSはインターネット上の画像のことです。ファイルはパソコンに保存済みの画像です。ここでは「GCSから」を選択します。
- 画像のURL:画像のURLを入力します。③で「ファイルから」を選択した場合は、ファイルパスを入力します。
ファイルパスの例:C:\Users\user\OneDrive\Pictures\Screenshots\Screenpresso\miyazawakenji.jpg - 言語:日本語の場合は「ja」を選択します。自動検出の場合は「unk」を入力します。
- 向きを検出します:画像の向きを検出するかどうかを設定します。true:する、false:しない
JSONResponseを見るとわかるように、regions/lines/words/textのように構造化データがかえってきます。
regionが文章の塊、linesが行、wordsが1行の文章の塊、textが1文字に対応していてそれぞれリスト形式で取得されます。For eachで1文字ずつ取得していきます。
▲「ループ」グループの中にある「For each」アクションを追加します。
- 反復処理を行う値:%JSONResponse[‘regions’]%
- 生成された変数:%region%
「生成された変数」はデフォルトでは%CurrentItem%という名前ですが、このあとFor eachを複数追加していくとわかりづらくなるため、わかりやすい名前に変更しています。
- 反復処理を行う値:%region[‘lines’]%
- 生成された変数:%line%
- 反復処理を行う値:%line[‘words’]%
- 生成された変数:%word%
▲「変数の設定」アクションを追加します。変数に1文字ずつ変数に追記していきます。
- 設定:%result%
- 宛先:%result%%word[‘text’]%
- 元のテキスト:%result%
- 追加するテキスト:(空白)
行のループのうしろに改行コードを挿入するために、テキストを行に追加アクションを追加します。「追加するテキスト」を空白に設定することで改行することができます。
テキストに行を追加アクションについての解説は下記の記事で解説しています。
▲フローの最後に結果をテキストファイルに出力します。
- ファイルパス:%result%
- 書き込むテキスト:%result%
- ファイルが存在する場合:既存の内容を上書きする
- エンコード:UTF-8
完璧ではないですがそこそこのレベルで取得できました。
Power Automate Desktopソースコード
下記はソースコードです。PADのフローデザイナーにコピペすると私が作成したフローを再現できます。
MicrosoftCognitive.OCRMicrosoft.OCRFromFile ServerLocation: Cognitive.MicrosoftServerLocation.JapanEast SubscriptionKey: $'''a239a8a1b404448ead7786d814dad835''' ImageFile: $'''C:\\Users\\user\\OneDrive\\Pictures\\Screenshots\\Screenpresso\\miyazawakenji.jpg''' Language: $'''unk''' DetectOrientation: $'''false''' Timeout: 30 Response=> JSONResponse StatusCode=> StatusCode LOOP FOREACH region IN JSONResponse['regions'] LOOP FOREACH line IN region['lines'] LOOP FOREACH word IN line['words'] SET result TO $'''%result%%word['text']%''' END Text.AppendLine Text: result LineToAppend: $'''''' Result=> Result END END File.WriteText File: $'''C:\\Users\\user\\Documents\\OCRResult.txt''' TextToWrite: result AppendNewLine: True IfFileExists: File.IfFileExists.Overwrite Encoding: File.FileEncoding.DefaultEncoding
まとめ
以上で、Microsoft AzureのComputer Visionを使ったOCRについて紹介しました。
参考
- Cognitive Services APIs Reference – Computer Vision API (v3.2)
https://westcentralus.dev.cognitive.microsoft.com/docs/services/computer-vision-v3-2/operations/56f91f2e778daf14a499f20d