Azure Percept Visionのサンプルコード+サンプルAIモデルを動かす

***
**Azure Percept記事一覧**

* [Azure Perceptってどんなもの？](https://qiita.com/matsujirushi/items/407e21a42da561773469)
* [Azure Perceptデバイスのセットアップ](https://qiita.com/matsujirushi/items/3a8be8f4f6d046b9e0f3)
* [Azure Perceptデバイスのセットアップ・ツアー](https://qiita.com/matsujirushi/items/283f13ca10a4ed683c46)
* Azure Percept Visionのサンプルコード+サンプルAIモデルを動かす
* [Azure Percept Visionのサンプルコード+カスタムAIモデルを動かす](https://qiita.com/matsujirushi/items/552e937d87ae38b8a674)
* [Azure Perceptデバイスを初期化](https://qiita.com/matsujirushi/items/37cfa5dc7ebd4295bb13)

***

**Azure Percept**は、プログラマ目線で言うと、次の3段階に分かれています。

1. サンプルコード+サンプルAIモデルを動かす
2. サンプルコード+**カスタムAIモデル**を動かす
3. **カスタムコード**+**カスタムAIモデル**を動かす

今回は、1.のVision系の**サンプルコード+サンプルAIモデル**（sample vision model）を動かしてみました。

# 「サンプルコード+サンプルAIモデル」を動かすには？

サンプルコード+サンプルAIモデルをAzure Perceptデバイスへインストール（デプロイ）する操作になります。
**Azure Percept Studio**に機能があるので、そこをポチすればOKです。

どこにあるかというと、
* Demos & tutorials -> Try out sample vision models
* Devices -> Vision -> Deploy a sample model
の2箇所です。どちらを使っても同じ操作になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/9a0973c2-7db2-8f8e-d911-59060e2f6b22.png)

現在は、
1. General object detection
2. People detection
3. Products on shelf
4. Vehicle detection
の4つを選択することができます。

<img width="400" alt="image.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/55bbde27-5fa6-e707-808d-54705003531b.png">

絵が貼ってあるので、、、なんとなく雰囲気でどういうものか分かりますねｗ

# General object detectionをデプロイ

General object detectionを選んで、下方にあるDeploy to deviceボタンをクリックすると、デプロイが開始されます。
Azureポータルの通知で、デプロイ成功！なメッセージが表示されますが、実際にAzure Perceptへデプロイが完了しているわけではありません。

<img width="400" alt="image.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/b7b55ba9-6faf-7cda-526a-ea89b39198e7.png">

View streamすると、静止画になっていて、画像の上部に「Loading Model」と書かれています。
このまましばらく待って（2～5分程度）デプロイが完了すると、自動的に動画に切り替わります。

<img width="600" alt="image.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/1bd71087-36e9-225d-cc30-800ecb5a0f16.png">

General object detectionが動き出しました！！！
みかん（のおもちゃ）は認識されていますが、自動車（のおもちゃ）は認識されていません。😢

<img width="600" alt="image.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/d0bfeee9-152c-084a-903a-15ac7432fafb.gif">

# Vehicle detectionをデプロイ

この状態でVehicle detectionをデプロイしてみました。
待つこと数分。

自動車（のおもちゃ）だけが認識されるようになりました！！

<img width="600" alt="image.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/fb3554f9-9ca4-d043-a64b-9f8842025d9e.gif">

# Azure IoT HubへのJSON送信

このサンプルコードは、認識した物体の情報をJSON形式でAzure IoT Hubへ送信する機能があります。
[Azure IoT Explorer](https://docs.microsoft.com/en-us/azure/iot-fundamentals/howto-use-iot-explorer?WT.mc_id=AZ-MVP-5002686)を使って、Azure IoT Hubに送信されているデータを見てみました。

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/b6cb11d1-de45-67b1-3039-b5e71bbb45df.png">

```json
{
  "body": {
    "NEURAL_NETWORK": [
      {
        "bbox": [
          0.298,
          0.602,
          0.364,
          0.657
        ],
        "label": "Car",
        "confidence": "0.860823",
        "timestamp": "1632227040940053075"
      },
      {
        "bbox": [
          0.179,
          0.714,
          0.297,
          0.81
        ],
        "label": "Car",
        "confidence": "0.825626",
        "timestamp": "1632227040940053075"
      },
      {
        "bbox": [
          0.472,
          0.666,
          0.549,
          0.753
        ],
        "label": "Car",
        "confidence": "0.794633",
        "timestamp": "1632227040940053075"
      }
    ]
  },
  "enqueuedTime": "Tue Sep 21 2021 21:24:01 GMT+0900 (日本標準時)"
}
```

認識したラベルと確率、位置（bbox）がJSON形式で送られていますね。

# まとめ

Vision系の**サンプルコード+サンプルAIモデル**（sample vision model）を動かしてみました。

* 試せるVision系のサンプルコード+サンプルAIモデルは4種類
* Azure Percept Studioでポチするだけ簡単
* 認識した情報はAzure IoT HubへJSON送信