Power Automate Desktop「テキスト検出」アクションを使った文章OCR

## 概要
Power Automate DesktopコグニティブアクションのGoogle「テキスト検出」を使った文章OCRを試しました。
少し前にWinautomationでも試したことはあるのですが、2020年12月Power Automate DesktopがGAされたので改めて手順を確認してみようと思います。
##前提
2020年12月の情報になります。
Power Automate Desktop バージョン2.2.20339.22608
Windows10Pro 20H2


##注意
Google Cloud Platform（以下GCP）アカウント必須です。
アカウント取得にクレジットカードが必要になります。
無料枠では90日300ドルのクレジットがついています。
https://cloud.google.com/free/
https://cloud.google.com/free/docs/gcp-free-tier
また無料枠終了後もVision APIは1000ユニットまで無料利用可能とのことです。
https://cloud.google.com/vision/pricing/?hl=JA
詳しくは公式ドキュメントを参照

GCPアカウント取得とVision APIの設定、キーの取得についてはGCPドキュメント及びWEB上に記事がたくさんありますのでここでは触れません。

##今回作るフロー
Power Automate DesktopでGoogle Cloud Platform vision APIで文章OCRする。
複数画像でも処理できるようにする。
処理の終わった画像とテキストフォルダを別フォルダに移動する。


##準備
1. Vision APIのAPIキーを取得しておきます。
2. デスクトップに任意のフォルダーを2つ作成。（処理前、処理後のフォルダーとしてPAD_GCP_OCRとOCR_Doneにしています）


##Power Automate Desktopフロー作成
###1.「特別なフォルダを取得」アクション
よく使うやつ
デスクトップを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/28e86e86-26d7-0819-4c1f-379bbc94f45f.png)
###2.「フォルダー内のファイルを取得」アクション
準備した処理前フォルダーの指定　
jpgファイルのみパスを取りたいのでフィルターを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/652075f0-16e9-1e11-2914-42dfc0c3af7d.png)
###3.「For each」アクション
取得した画像ファイル全てを読み取りしたいのでFor eachを使ってループ処理。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/7225554b-c916-6d42-a5bd-29867e26d912.png)
###4.「テキスト検出」アクション
コグニティブ>Google>ビジョン>テキスト検出をFor eachとEndの間に入れます。
APIキー = Vision APIで発行したキー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/af41da69-570f-80eb-83e6-84f42d5ffa65.png)
###5.「テキストをファイルに書き込みます」アクション
この状態で一度返却されるJSONを確認するために、アクションを追加します。
ファイル名を%CurrentItem.NameWithoutExtension%.jsonとすることで画像と同じファイル名で拡張子だけ変えて保存できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/12825aff-ff6c-67b1-11e7-56d751dc827a.png)
###6.保存＞実行してjsonを取得し、エディターで構造確認
処理前（PAD_GCP_OCR）フォルダーに任意の画像を入れて実行するとJSONが取得できるので。
エディター（notepad++を使っています）で開いてJSONの構造を確認します。

使った画像
![74381.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/3cf81c26-c087-1d00-a0fe-413e24a1cd51.jpeg)
notepad++で開いてみると、
7行目のdescriptionとまたは5596行目のtextに読み取りした文章が格納されているのがわかりました。

7行目
![スクリーンショット 2020-12-12 231934.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/19cbf134-3e64-65a1-7144-57ede16c91cd.jpeg)
5596行目
![スクリーンショット 2020-12-12 232113.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/863d3611-02f1-f770-5471-25f525fe0da2.jpeg)
それぞれ文章までのパスをPower Automate Desktop内で表記すると、
7行目
JSONResponse.responses[0].textAnnotations[0].description
5596行目
JSONResponse.responses[0].fullTextAnnotation.text
となるのがわかりました。

パスの表記方法は格納された値の上位層が　[　大括弧の時は配列なのでインデックスを振ります。
今回はいずれも1番目なのでインデックスは[0]となります。

###7.「変数の設定」アクション
JSONファイルはとりあえず必要ないので「テキストをファイルに書き込みます」アクションは無効にしておきます。
JSONの文章までのパスを変数にしておきます。
変数にすることで複数を処理できるようになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/9f2b734f-a085-8462-59ce-e8991581980a.png)

###8.「テキストをファイルに書き込みます」アクション
読み取った文章は変数FullTextなので準備した処理後（OCR_Done）フォルダーに保存します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/2063cde2-27f9-db60-9ff3-4b5c2c368ecc.png)
###9.「ファイルの移動」アクション
処理が済んだ画像ファイルを処理後(OCR_Done)フォルダーに移動します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/0b76216c-fc01-461b-265a-b9685f4fc5d2.png)
##Power Automate Desktop完成フロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/655ecce2-60e6-7793-fdbe-62f256435201.png)

##まとめ
専門プロダクトのようにはいかないかもしれませんが、Power Automate DesktopとVision APIの組み合わせでかなり精度のよい簡易文章OCRができます。
ただしテキストの座標でコントロールしようと思うと返却されたJSONをゴニョゴニョする必要があります。

Winautomationではトリガーとしてファイルをフォルダーにドラッグドロップすると発動するようにしていました。
素早く実行できるので気に入って使っていました。
Power Automate DesktopでもPower Automateからオンプレミスファイルの操作をトリガーにすることは可能ですが、発動までが遅いので実用的かどうかはそれぞれの判断になると思います。
![IMG_0696.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/ff9ea3d9-fe9b-9b13-dcde-8a52f801571e.jpeg)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/64b958e6-ee31-4594-e757-a71886196907.png)