Custom Vision 物体検知モデル⇒画像切抜き⇒分類モデルをバッチ化する Logic Apps

# はじめに
前記事で、Custom Vision 物体検知モデル⇒画像切抜き⇒分類モデルを自動化する Azure Functions（Python）を作成しました

https://qiita.com/mimocihz/items/5afc7448fef276643d5e

Function 化することで、アプリからも呼び出せますし、Azure Logic Apps や Azure Data Factory から呼び出してバッチ処理させることもできます
活用の幅が広がりますね！
さて本記事では、Logic Apps から 前記事で作成したAzure Functions（Python）を呼び出し、Blob Storage の指定フォルダに存在する画像を全て画像解析処理をさせるバッチ実装について説明します

# 実装イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/5af9c7b4-9157-9455-a5b6-1cded7922a9b.png)

# Logic Apps 処理の流れ
① HTTPリクエストトリガー
② Blob Storage の指定フォルダに存在する画像ファイルをリスト化する
③ 画像ファイル分Azure Functions（Python）の解析処理をループ処理

# Logic Apps 作成
Azure ポータルから Logic Apps リソースを作成します
Logic Apps の作成は、以下ドキュメント参照下さい
※プランの種類は「従量課金プラン」を選択しました

https://docs.microsoft.com/ja-jp/azure/logic-apps/quickstart-create-first-logic-app-workflow

・空のロジックアプリをテンプレート選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/61c346ed-b0a6-0bcb-44b5-a616caae399f.png)

### ① HTTPリクエストトリガー
・トリガーは、ビルトイン > 要求 > [HTTP 要求の受信時] を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/48431f81-ea52-681b-85d7-883efaf0a806.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/2d095444-bbe6-95ce-c366-da4c54ffba20.png)

・[+新しいステップ]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/2531c8e5-6b00-55d7-af44-d73a261ddd6a.png)

### ② Blob Storage の指定フォルダに存在する画像ファイルをリスト化する
・すべて > Azure Blob Storage > [BLOBを一覧表示する(V2)] を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/3d9159cc-b13c-14d5-9cdb-bcf760d3170c.png)
・解析したい画像ファイルのAzure Storage アカウント名とアカウントキーを設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/6248d336-908f-f3d6-a7fc-fa94c5b0fb74.png)
・ストレージアカウント名を選択し、解析したい画像ファイルが格納されているフォルダを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/7745cb75-94bb-6683-a60c-8bbe917a66ad.png)
・[+新しいステップ]をクリック

### ③ 画像ファイル分Azure Functions（Python）の解析処理をループ処理
・ビルトイン > 制御 > For each を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/cd1e8d21-9885-6f2b-de4b-057ac0b7d6f1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/2537b923-1c94-4414-5a4d-9e66f313763a.png)
・以前の手順からの出力を選択で、BLOB　のvalue を選択し
・For each 内の [アクションの追加] をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/4f9af96e-c704-5748-3f08-2eba6f400881.png)
・ビルトイン > Azure Functions > [Azure 関数を選択する] をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/8ccb0d6a-24b7-d9d8-384a-45098bfd9ee5.png)
・対象の Function を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/1b236588-7e6a-cf29-8898-3a00a50d19f6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/fffbd43d-06e6-165b-daef-6eebbf51bda7.png)
・[Add new parameter] をクリックして、[クエリ]にチェックをつける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/23e5d2c4-1247-6959-c200-507c002b87ce.png)
・クエリにパラメータを指定する
######
```
{
  "filename": @{items('For_each')?['Name']}
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/b594e043-1cd6-1cbb-6697-c27fbdaf4994.png)

# Logic Apps 実行
作成した Logic Apps を実行します
・トリガー実行 > 実行をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/fb4ac22c-d95d-dd79-b457-e576fe20252c.png)
・実行結果を確認する（正常実行時は緑のチェックマークがつく）
・アウトプットについては、Blob Storage の各フォルダの中身を確認しましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482258/07d7e915-c4cf-4a8c-2c06-47d5e3a34c8e.png)


# さいごに
Logic Apps で 3ステップで簡単にバッチ化できてしまいましたね!
出力判定結果を DBテーブルに格納したりする場合は、Azure Data Factory の Pipeline で実装する方がよいと思います