AI-102 学習メモ (5) : コンピューター ビジョン ソリューションを実装する

# はじめに
この投稿は AI-102: Microsoft Azure AI エンジニア の学習をした内容のメモです。

投稿の一覧は以下のリンク先にあります。

https://qiita.com/atsmin77/items/5235dfe16ad1bed065ca

# 前の投稿

https://qiita.com/atsmin77/items/f94b62ed44a5643da0ea

# 画像を分析する

Azure AI 画像分析には以下のような機能があります。

| 名前 | 説明 |
|:-:|:-:|
| タグ付け | 画像のコンテキストを表す場所や物の単語を出力 |
| 物体検出 | 画像に含まれる物体を画像内の座標と共に出力 |
| 画像分類 | 画像の内容に基づいて適切にラベル付けする  |
| 人物検出 | 画像に含まれる人物の座標を出力 |
| キャプション生成 | 画像のキャプションを生成 |

https://learn.microsoft.com/ja-jp/azure/ai-services/computer-vision/overview-image-analysis?tabs=4-0

https://learn.microsoft.com/ja-jp/azure/ai-services/computer-vision/quickstarts-sdk/image-analysis-client-library-40?tabs=visual-studio%2Cwindows&pivots=programming-language-csharp

# カスタム コンピューター ビジョン モデルの作成

カスタム コンピューター ビジョン モデルを作成すると、自分で用意した画像によりモデルを訓練することができます。

例として、[Github](https://github.com/Azure-Samples/cognitive-services-sample-data-files/tree/master
) でサンプルとして公開されている 2 種類の葉っぱの画像を用意して、それらを分類する画像分類モデルを作成してみます。

| 名前 | 画像例 |
|:-:|:-:|
| Hemlock  |![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/9dec32a9-539f-2eef-41d9-5cbc92fa8975.png)|
| Cherry  |![image.png](https://github.com/Azure-Samples/cognitive-services-sample-data-files/blob/master/CustomVision/ImageClassification/Images/Japanese_Cherry/japanese_cherry_1.jpg?raw=true)|

::: note info
あらかじめ Azure 上で Blob ストレージにコンテナを作成し、[公開されているサンプル画像](https://github.com/Azure-Samples/cognitive-services-sample-data-files/tree/master/CustomVision/ImageClassification/Images)をアップロードしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/8255d633-3b49-172d-d755-5a5ecf3df662.png)

:::

以下の手順で行います。
1. Azure 上で Azure AI サービスリソース、または Custom Vision リソースを作成
※ [以前の記事](https://qiita.com/atsmin77/items/ed4c37f04aa5a31bbd4f#azure-ai-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)で作成したリソースを使用します。
1. [Vision Studio](https://portal.vision.cognitive.azure.com/) または [Azure AI Foundry](https://ai.azure.com/explore/aiservices/vision) データセットを作成し、ラベル付け
1. ラベル付けしたデータによって、モデルをトレーニング

以下で、2 の手順を順に見ていきます。

## データセットの作成

Vision Studio で画像分類プロジェクトを作成します。まず、使用する Azure AI サービスリソースを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/2b9d887f-dd84-f258-1f9e-d6df631af0c3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/cf994e6f-11ef-c696-d427-dd150342780a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/5913e159-8a8c-bdd8-ce2a-3fe762bcde2c.png)

::: note warn
Azure AI サービスのリージョンによってはカスタムモデルの作成が利用できません。利用できない場合は以下のような警告が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/8c4d04b6-48e4-83f4-2e1f-316b73436ffb.png)
:::
 
次に、データセットを作成します。データセットの作成時に、 画像ファイルをアップロードした Blob ストレージのコンテナを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/29d29b03-5f10-1ea3-d499-7cb254a2a52e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/c6f39f32-3062-f6ad-2418-ae23f945d15a.png)

## データセットのラベル付け

サンプル画像をラベル付けします。今回は 2 種類の画像があるので "hemlock" または "cherry" とラベル付けします。

まず、プロジェクトとワークスペースを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/8308b3b3-10e6-2810-eb6d-a9535b7a4929.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/a14eced1-321c-6d13-6fa9-0db92b08ffc2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/c0c87173-45cd-9f3c-a359-010ee41435e3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/d9322e94-1265-e269-1f58-48ba01935e5e.png)

次に、ラベルのカテゴリを指定します。ラベルとして "hemlock" と "cherry" を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/899236e6-051b-c861-4d8d-dd00a03c1e73.png)

::: note warn
検証した際はラベル付けのウィザードで、以下の [ML Assist によるラベル付けを有効にする] のチェックをオフにしないと、クォータが足りない旨のエラーになりラベル付けが行えませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/0bb09e20-7538-3e22-0f28-2a44b1189cf1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/f8f926c9-2961-1f43-886a-33c12fb14b94.png)
:::

最後に、各サンプル画像をラベル付けします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/9a93a7b4-f6c3-6162-c4de-faa834d7a9df.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/c8a036de-be7e-a502-8e45-4124cc2c30b0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/dd5331b1-5081-85bf-ec08-2cfe947613ad.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/78cd32f0-2468-8ad5-223f-748e803e7261.png)


## カスタム画像モデルをトレーニングする

以下の画面で [+ Add COCO file] ボタンから、ラベル付けした結果をインポートします。
その後、[Custom Models] からモデルの作成を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/5e5d72cd-c9e3-4f31-5875-743ca78a6482.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/9f395f71-60c8-b84b-a230-30c92370f493.png)

モデル作成の際は訓練に利用する最大時間を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/5c1d0763-dd68-d950-3eb8-5edf73ca6da9.png)

学習が完了すると、ステータスが Succeeded になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/80591f6f-38f9-1cdb-6a4e-fc75dda30938.png)

## カスタム ビジョン モデルのメトリックを評価する

学習したモデルをテストするには、まず、同じ手順でテスト用のデータセットを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/08492aa4-5ae2-67d3-57c1-1c9542461bf5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/12962462-958e-85a0-5c0d-43bacdcdb2b6.png)

その後、テスト用のデータセットを指定してモデルの評価を実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/5df66e43-fdad-1e4f-c5a5-d8d67eabd539.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/0d6fd3d2-c12f-392a-9de4-72bee5ef2c4a.png)

## カスタム ビジョン モデルを使用する

[Try it Out] ボタンから、作成したモデルをテストすることができます。画像をアップロードして応答を確認したり、モデルを使用するサンプルコードを確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/33159a1a-2a5d-b70d-9557-775ff2d10fec.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/0881fdc1-3cdd-e5cc-59cd-d316ff4ed644.png)

# ビデオを分析する
## Azure AI Video Indexer

Azure AI Vision ではビデオの分析も行うことができます。 [Azure AI Video Indexer](https://www.videoindexer.ai/media/library) を利用すると、ビデオの登場人物やトピックを抽出することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/d7339365-bff3-0dba-32fb-c6a9af577644.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/064a3983-3bc8-7675-f55f-4bc01c5aa678.png)

https://learn.microsoft.com/ja-jp/azure/azure-video-indexer/video-indexer-overview

## Azure AI 空間分析

Azure AI 空間分析により、ビデオ内に人の移動を追跡する、といったこともできます。

[Vision Studio](https://portal.vision.cognitive.azure.com/)に用意されているサンプルデータで簡単に試すことができます。

### 人の出入りの分析

[Spatial analysis] - [Detect when people enter/exit a zone] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/65e0540d-ae54-7558-d855-677ff5758c6b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/fd8c7b6f-eb96-9ee6-b198-708aaafdb867.png)

サンプルのビデオを選択すると、人物が検知されて、枠内の人数がカウントされていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/d80ae052-df1f-d2a5-a4ee-78ce0a0a1db0.png)

### ビデオの要約

ビデオの内容をシーンごとに要約し、キーワードでビデオ内のシーンを検索することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/6fd70aaf-2fdd-7174-7975-5d92bb67b09b.png)

サンプルデータについて、キーワード検索によって一致するシーンを表示されることを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/998d69f6-768f-816f-ec9b-f8420aea52c1.png)

https://learn.microsoft.com/ja-jp/azure/ai-services/computer-vision/intro-to-spatial-analysis-public-preview?tabs=sa#spatial-analysis

# 次の投稿

https://qiita.com/atsmin77/items/018a7fe76c753f71455f