Power Automate DesktopでCloud Vision APIを使ったOCRを実現

Power Automate Desktopの記事がウェブ上を見てると、ぼちぼち出てきていますね。VBAなどの場合もそうなのですが、こういったいろいろな人の知見や手法などが広がる事がなかったのがこれまでのRPAの現実。広がってきて民主化が進んでいるのを感じます。

さて、前回の記事では、基本的な機能でのみPower Automate Desktopを使った手法を紹介しましたが今回は、OCRの項目でスルーした「Google Cloud Vision APIを使ってOCR」をPower Automate Desktopで実現してみたいと思います。

難易度:

図:4工程で実現します

今回使用するアプリとサービス

事前準備

Cloud Vision APIの概要

Googleが提供している機械学習を行う画像認識APIがCloud Vision APIです。単に画像から文字起こしだけでなく、画像を認識して処理するような事まで幅広く担当しているAPIですが、Speech API同様課金対象のAPIです。ですが、月間の無料枠があるので、その枠内であれば、勝手に課金されるといった事はありません。料金はこちらから。用途別で変わってきます。今回は、OCRについてだけ取り上げてみたいと思います。

また、テキスト検出についてのサンプルなどはこちらのページに用意されています。

項目名 内容
画像ファイル JPG形式,  PNG形式(但し、640×480以上のサイズであること)
ファイルサイズ 20MBまで(返り値のJSONオブジェクトは10MBまで)。また1リクエストあたり16枚まで。
リクエスト Base64形式で渡すか?Cloud Storageへ配置する必要がある(プログラムの場合)
無償上限単位 1000ユニット/月まで。それ以上は課金対象(1画像1ユニット)
有償課金 1.5ドル/月(500万ユニットまで)
制限 1分あたり1,800枚まで。1ヶ月あたり20,000,000 枚まで

APIキーの作成

今回のフローの準備で最も面倒なのはこのAPIキーの作成です。サービスアカウントの作成自体は以前Google Cloud Consoleを弄ってみるの回で紹介しています。ですが、今回改めてCloud Vision APIの利用まで含めてここで紹介いたします。認証は、OAuth2.0認証の他にシンプルなAPI方式もあります(今回はPADから使うので、API方式を利用します)

  1. Google Cloud Consoleにログインする
  2. 「APIとサービスの有効化」をクリックする
  3. visionで検索し、「Cloud Vision API」をクリックする。
  4. 請求の有効化画面が出るので「請求アカウントの作成」をクリック
  5. ウィザードに従い、同意して続行しクレジットカード情報を登録します。
  6. プロジェクトへの認証情報の追加画面では、Cloud Vision APIを選択し、App Engineで使う予定の問いには、「いいえ」で答える
  7. 認証情報の作成に進む
  8. 上部の認証情報の作成をクリックし、APIキーを選択する
  9. すぐにキーが作成されるのでコピーする
  10. 続けて、そのAPIキーの名前部分をクリック
  11. APIの制限の項目にて、キーを制限にチェックを入れて、Cloud Vision APIを選択する(Vision API以外では利用させない為の措置です)
  12. 保存をクリックする

きちんと請求アカウントを作り、APIキーを作り、Vision APIの使用の準備をしていないと、403エラーが返ってきてしまいます。また、API方式なのでOAuth2.0認証などはありません。APIキーは漏れたりしないように厳重に管理しましょう。

図:Cloud Vision APIの有効化画面

図:請求アカウントを作らなければいけません

画像ファイルについて

画像ファイルですが、Power Automate Desktopの場合、直接フルパスでどこぞに格納してるjpgファイルなどを指定して送りつける事が可能になっています。Google Apps Scriptなどの場合にはBase64エンコードなどが必要なのですが、この辺りの処理はVision APIを使うコネクタが後ろで色々よしなにやってくれてるのだと思います。

今回使用するファイルは青空文庫の太宰治の「富嶽百景」を画像として読み込ませました。

図:富嶽百景の冒頭を切り取って画像化してみた

フローを作成する

ここまでで、Google Cloud Vision APIの使用準備が整いました。ここからフローを作るのですが、フロー自体は非常にシンプルで簡単に作る事が可能です。一点だけ、OCRした結果はJSONで返ってくるので、JSONからその部分を取り出す点が今回のポイントになります。

作成手順

以下の手順で作成します。

  1. 特別なフォルダアクションにて、デスクトップのパスを%desktop%として取得する
  2. 変数の設定アクションにて、1.のデスクトップパスに加えて、¥ocr.jpgをつなげて、%fullpath%として保存
  3. コグニティブ→Google→ビジョン→テキスト検出のアクションを追加する
  4. 取得しておいたAPIキーを入力。画像ファイルは2.の変数を指定する
  5. 次にテキストをファイルに書き込むアクションを追加します
  6. ファイルパスは、1.と¥vision.txtをつなげて指定します。
  7. ここがポイントですが、OCR結果は、%JSONResponse%に返ってきます。ステータスコードは%StatusCode%に成功すれば、200が返ってきます。
  8. 書き込むテキストは、7.の内容からJSONを取り出す形で指定する。%JSONResponse.responses[0].fullTextAnnotation.text%という形で書き込むと、OCR結果の文字列が取り出せます。
  9. 新しい行を追加するはチェックを外します。

これで完成です。複数のファイルを回したい場合には、for eachや名付けるファイル名などをなんとかすれば、このRPAのみで一斉に画像認識でテキスト化が自動化可能です。

図:テキスト検出以外にもあります

図:テキスト書込みがポイント

フローのコード

4工程のみで実現してるので、シンプルです。

OCR結果

Cloud Vision APIでOCRしてみた結果は以下の通り。

以前Google Apps ScriptでCloud Vision APIを使った時よりも精度が上がっているみたいです。旧仮名遣いであったり、旧漢字の認識も良い感じです。

ルビが入ってしまってるので、それらは独立した行になってしまっていますが、ルビの入っていない通常の文書であればかなり現実的なOCRを低価格で自前で用意できるのはGoodですね。

関連リンク

共有してみる:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。