Power Automate Desktopで画像解析をしてみよう!
この記事では、Power Automate for Desktop(以下:PAD)のアクション、[Microsoft コグニティブ]グループの[Computer Vision]グループの中にあるアクションについて試してみましたのでそれぞれの役割や使用方法について初心者向けに解説したいと思います。
PADならノンプログラマーでも画像解析できるよ!
Computer Visionとは、画像解析用のAIを用いたMicrosoftのサービスです。
この記事でやること
- Power Automate for DesktopのMicrosoft コグニティブグループの中にあるアクションを使うためのAzure登録方法の解説
- Power Automate for DesktopのComputer Visionグループの中にあるアクションの概要の解説
- Power Automate for Desktopの「画像を記述します」アクションの使い方
- Power Automate for Desktopの「画像をタグ付けします」アクションの使い方
画像解析をするための前提条件
Microsoft コグニティブグループをアクションを利用するためにMicrosoft Azureの利用登録が必要です
Power Automate for Desktopで、Computer Visionを使ったアクションは、「Microsoftコグニティブ」の中に位置しています。これらのアクションを利用するには、Microsoft Azureの利用登録とアプリケーションの作成が必要です。下記の記事で利用登録の方法について解説していますのでAzure利用登録をされていない方はご覧ください。アプリケーションの作成後にサブスクリプションキーが発行されます。キーはPADのフロー作成の時に必要になりますのでメモ帳などにコピーしておいてくださいね。
Microsoft Azureは無料枠の範囲で無料試用することができます。この記事でも無料枠を使ってフローを作成します。
Microsoft コグニティブグループのアクションを利用するために必要なこと
- Microsoft Azureの利用登録
- Azure上でComputer Vision APIアプリケーションの作成
Computer Visionグループのアクション一覧
何度も言いますが、PADでAzureを使って画像解析するにはComputer Visionグループの中のアクションを使います。Computer Visionグループには現在4つのアクションが存在しています。
Computer Visionグループの中のアクション一覧
- 画像を分析します
- 画像を記述します
- OCR
- 画像をタグ付けします
それぞれ、以下のような役割があります。
PADのアクション | 対応するComputer Visionの機能 | アクションの概要 |
---|---|---|
画像を分析します | Analyze Image | 画像の下記のような様々な情報を分析します。 縦横のサイズ、拡張子、アダルトコンテンツか否か、含まれるブランド、顔の年齢や性別や座標、カテゴリ、タグ |
画像を記述します | Describe Image | 画像が、どのような画像であるかを分析し説明文章を作成します。 |
OCR | OCR | 画像に含まれる文字列を抽出します。 |
画像をタグ付けします | Tag Image | 画像に含まれる要素をもとに関連語句でタグ付けを行い、文字列として取得します。例えば、”芝生の庭がある一軒家” の写真を渡すと「芝生、住宅、家、緑」というタグがリストで返ってきます。 |
[画像を記述します]アクションとは?
今回は上の画像をサンプルとして使用します。
https://www.teijitaisya.com/wp-content/uploads/2021/11/rockandbus.jpg
[画像を記述します]アクションの実行方法
「画像を記述します」アクションは「Microsoftコグニティブ」グループの中の「Computer Vision」グループの中にあります。
- サーバの場所:東日本
- サブスクリプションキー:AzureでComputer Visionアプリケーションを作成した時に発行されたキーを張り付けます。
- 画像を提供します:「ファイルから」か「GCSから」を選択します。パソコンに保存された画像を使う場合は「ファイルから」、インターネット上に公開された画像を使用する場合は「GCSから」を選択します。
- 画像のURL:GCSを選択した場合は画像のURL、ファイルを選択した場合はファイルパスを入力します。クォーテーションは不要です。
- 候補の最大数:説明文書をいくつ取得するかを数字で指定します。例えば5とすると信頼性の高いものから5個説明文章を取得できます。(候補が指定した数字よりも少ない場合は必ず数字の数だけ結果が取得されるとは限りません。)
このアクションで、JSONResponseというカスタムオブジェクト型変数に結果が返ってきます。
「 画像を記述します 」アクションの結果の出力先として生成されるJSONResponseの中身を確認するためにJSONResponseをテキストファイルとして出力します。テキストファイルとして出力するには「テキストをファイルに書き込みます」アクションを使用します。
▲「ファイル」グループの中の「テキストをファイルに書き込みます」アクションを追加します。
- ファイルパス:テキストファイルをどこに出力するかを指定します。ここでは、
C:\Users\user\Documents\メモ.txt
とします。指定したテキストファイルが存在しない場合、新規作成します。存在する場合、ファイルを上書きか追記します。 - 書き込むテキスト:
%JSONResponse%
と入力します。
フローを実行してみましょう。問題なく実行されるとPADのフローデザイナー右側に表示されているフロー変数の中のStatusCode変数の中に正常を意味するコード200が返却されます。
▲アクションが正常に実行されたかどうかを確認できるStatusCode変数。200が正常。
StatusCode変数の中に、エラーコードを意味する400や401が返却された場合は、下記を確認してもう一度実行してみましょう。
- PADに指定したサブスクリプションキーが間違っている。
- PADに指定した画像のファイルパスあるいはURLが間違っている。
- PADで指定したサーバの場所と、Azureで作成したアプリケーションのリージョンが一致していない。基本的にどちらも東日本で大丈夫です。
- Azureアプリケーションの作成できていない。
正常性が確認できたら次のステップに進みます。
正常にアクションが実行されていれば、テキストファイルが出力されているはずです。「テキストをファイルに書き込みます」アクションで指定したファイルパスに存在するテキストファイルを開いてみましょう。
テキストファイルを開くと下記のようなJSONが確認できました。次の項でファイル中身を詳しく見てみます。
{ "description": { "tags": [ "outdoor", "mountain", "rock", "nature", "building", "rocky", "stone", "front", "motorcycle", "walking", "side", "desert", "street", "road", "driving", "man", "old", "dirt", "traveling", "brick", "riding", "stop", "parked", "hill", "track", "sign", "standing", "bus" ], "captions": [ { "Properties": { "text": "a stone building with Arches National Park in the background", "confidence": 0.948075120322047 } }, { "Properties": { "text": "a stone building with Arches National Park in the desert", "confidence": 0.947075120322047 } }, { "Properties": { "text": "a close up of a stone building with Arches National Park in the background", "confidence": 0.927155835294065 } }, { "Properties": { "text": "Arches National Park with a mountain in the desert", "confidence": 0.926155835294065 } }, { "Properties": { "text": "a close up of a stone building with Arches National Park in the desert", "confidence": 0.925155835294065 } } ] }, "requestId": "35d458ac-f0d3-4305-b29a-8e1f47425796", "metadata": { "height": 396.0, "width": 560.0, "format": "Jpeg" } }
[画像を記述します]アクションで取得できるもの
[画像を記述します]アクションでどのような結果が出力されたかを確認してみます。
- tags
-
tagsは、画像に近しい単語です。
「乾燥した荒野の脇の車道を走るワゴン車」の画像を渡したので、nature,rock,desert,track,busなど、それっぽい単語を取得できました。
タグは現在英語でのみ取得できるようです。
"description": { "tags": [ "outdoor", "mountain", "rock", "nature", "building", "rocky", 省略
- captions
-
captionsは画像を表す文章を取得できます。”text”キーの値が文章です。”confidence”キーの値は信頼度スコアのようなもので1に近いほど信頼度が高いです。text値が複数返却されることがありますが、スコアが高いテキストほど画像にふさわしい文章ということになります。ただ、人間が見たときに必ずしもそうではないことがあるので人間の判断は必要かもしれません。
"captions": [ { "Properties": { "text": "a stone building with Arches National Park in the background", "confidence": 0.948075120322047 } }, { "Properties": { "text": "a stone building with Arches National Park in the desert", "confidence": 0.947075120322047 } }, 省略 ]
文章は現在のところ英語のみ対応しているようです。
”a close up of a stone building with Arches National Park in the background”
“a stone building with Arches National Park in the desert”
- requestId
-
アクション実行の度に発行される固有のIDです。Azure側でデバッグする際に使うものと思われます。
- metadata
-
画像の縦幅、横幅のサイズと拡張子を取得できます。
"metadata": { "height": 396.0, "width": 560.0, "format": "Jpeg" }
[画像をタグ付けします]アクションとは?
[画像をタグ付けします]アクションも試してみます!先と同じサンプル画像を使用します。
「画像をタグ付けします」アクションは「Microsoftコグニティブ」グループの中の「Computer Vision」グループの中にあります。
- サーバの場所:東日本
- サブスクリプションキー:AzureでComputer Visionアプリケーションを作成した時に発行されたキーを張り付けます。
- 画像を提供します:「ファイルから」か「GCSから」を選択します。パソコンに保存された画像を使う場合は「ファイルから」、インターネット上に公開された画像を使用する場合は「GCSから」を選択します。
- 画像のURL:GCSを選択した場合は画像のURL、ファイルを選択した場合はファイルパスを入力します。クォーテーションは不要です。
このアクションで、JSONResponseというカスタムオブジェクト型変数に結果が返ってきます。
「 画像を記述します 」アクションの結果の出力先として生成されるJSONResponseの中身を確認するためにJSONResponseをテキストファイルとして出力します。テキストファイルとして出力するには「テキストをファイルに書き込みます」アクションを使用します。
▲「ファイル」グループの中の「テキストをファイルに書き込みます」アクションを追加します。
- ファイルパス:テキストファイルをどこに出力するかを指定します。ここでは、
C:\Users\user\Documents\メモ.txt
とします。指定したテキストファイルが存在しない場合、新規作成します。存在する場合、ファイルを上書きか追記します。 - 書き込むテキスト:
%JSONResponse%
と入力します。
フローを実行してみましょう。問題なく実行されるとPADのフローデザイナー右側に表示されているフロー変数の中のStatusCode変数の中に正常を意味するコード200が返却されます。
▲アクションが正常に実行されたかどうかを確認できるStatusCode変数。200が正常。
StatusCode変数の中に、エラーコードを意味する400や401が返却された場合は、下記を確認してもう一度実行してみましょう。
- PADに指定したサブスクリプションキーが間違っている。
- PADに指定した画像のファイルパスあるいはURLが間違っている。
- PADで指定したサーバの場所と、Azureで作成したアプリケーションのリージョンが一致していない。基本的にどちらも東日本で大丈夫です。
- Azureアプリケーションの作成できていない。
正常性が確認できたら次のステップに進みます。
正常にアクションが実行されていれば、テキストファイルが出力されているはずです。「テキストをファイルに書き込みます」アクションで指定したファイルパスに存在するテキストファイルを開いてみましょう。
テキストファイルを開くと下記のようなJSONが確認できました。次の項でファイル中身を詳しく見てみます。
{ "tags": [ { "Properties": { "name": "outdoor", "confidence": 0.99900096654892 } }, { "Properties": { "name": "desert", "confidence": 0.975922703742981 } }, { "Properties": { "name": "land vehicle", "confidence": 0.971066951751709 } }, { "Properties": { "name": "vehicle", "confidence": 0.968591332435608 } }, { "Properties": { "name": "mountain", "confidence": 0.946652889251709 } }, { "Properties": { "name": "car", "confidence": 0.916579842567444 } }, { "Properties": { "name": "canyon", "confidence": 0.883803606033325 } }, { "Properties": { "name": "rock", "confidence": 0.880791425704956 } }, { "Properties": { "name": "nature", "confidence": 0.833149790763855 } }, { "Properties": { "name": "sky", "confidence": 0.827626824378967 } }, { "Properties": { "name": "wheel", "confidence": 0.654154479503632 } }, { "Properties": { "name": "yellow", "confidence": 0.63519823551178 } }, { "Properties": { "name": "arch", "confidence": 0.587687432765961 } }, { "Properties": { "name": "stone", "confidence": 0.471102476119995 } } ], "requestId": "c597b6a8-99f5-4184-b7f2-8be88c256e51", "metadata": { "height": 396.0, "width": 560.0, "format": "Jpeg" } }
[画像をタグ付けします]アクションで取得できるもの
[画像をタグ付けします]アクションでどのような結果が出力されたかを確認してみます。
- tags
-
tagsは、画像に近しい単語です。outdoor、desert(砂漠)など、人間が画像をみてイメージできるような単語がかえって来ていることが分かります。
nameキーの値がタグです。”confidence”キーの値は信頼度スコアのようなもので1に近いほど信頼度が高いです。タグが複数返却されることがありますが、スコアが高いタグほど画像にふさわしいタグであろう、ということになります。ただ、人間が見たときに必ずしもそうではないことがあるので人間の判断は必要かもしれません。
タグは現在英語でのみ取得できるようです。
-
"tags": [ { "Properties": { "name": "outdoor", "confidence": 0.99900096654892 } }, { "Properties": { "name": "desert", "confidence": 0.975922703742981 } }, 省略
- requestId
-
アクション実行の度に発行される固有のIDです。Azure側でデバッグする際に使うものと思われます。
- metadata
-
画像の縦幅、横幅のサイズと拡張子を取得できます。
"metadata": { "height": 396.0, "width": 560.0, "format": "Jpeg" }
まとめ
この記事では、Computer Visionグループの中にある2つのアクション、「画像をタグ付けします」アクションと、「画像を記述します」アクションについて解説しました。2つのアクションでは下記のことができました。
- 「画像をタグ付けします」アクション
- 画像にふさわしい説明文章を取得できる。
- 「画像を記述します」アクション
- 画像にふさわしいタグ(英単語)を取得できる。
次の記事では、画像からブランドを検出してみちゃいます!
参考
- 画像の説明 – 人間が判読できる言語で画像を説明する
https://docs.microsoft.com/ja-jp/azure/cognitive-services/computer-vision/concept-describing-images - 画像の分類 – 主題によるイメージの分類
https://docs.microsoft.com/ja-jp/azure/cognitive-services/computer-vision/concept-categorizing-images - コンテンツタグ – コンテンツ タグの画像への適用
https://docs.microsoft.com/ja-jp/azure/cognitive-services/computer-vision/concept-tagging-images - Microsoft cognitive – Power Automate
https://docs.microsoft.com/ja-jp/power-automate/desktop-flows/actions-reference/microsoftcognitive - Microsoft Cognitive Services APIs Reference – Computer Vision API
https://westcentralus.dev.cognitive.microsoft.com/docs/services/computer-vision-v3-2/operations/56f91f2e778daf14a499f21b