AITRIOSの推論結果をIBM Cloud VPSのVSIに転送するTipsとサンプル

## 0. はじめに
この記事では、AITRIOS Console Developer Editionに接続されているデバイスからの推論結果をIBM Cloud VPC内VSIに転送する具体的な手順や方法を共有します。
AITRIOSの公式Documentに、http転送の方法に関するガイドがありますが、これをIBM CloudのVSI向けに噛み砕いたガイドとなります。

## 1. 前提
当記事の前提として、IBM CloudのVPCやVSIでのサーバーの構築を経験したことがある方向けとなっていますので、VPCやVSIの作り方や設定の詳細については別の記事を参考にしてください。また、AITRIOS Console Developer Editionにアクセスできる権限が必要です。

## 2. IBM Cloud VPC / VSI構成について
VPC / VSIを作成する上での注意点としては、AITRIOSデバイスからhttp接続でデータがPUTされてきますので、外部からのアクセスを受けられるフローティングIPが必要です。また、セキュリティー設定として、httpサーバーで送受信するためのポートを決めて開けておく必要があります。（今回の例では、8080を使っています。）
必要に応じて、sshのポートや証明書などの設定もしておくようにします。

## 3. AITRIOSデバイスの設定
AITROSデバイス側の設定は、デバイスの推論を制御するコマンドパラメーターファイルを編集して、転送方法にhttpを指定し、保存したいディレクトリーを指定することで、転送が可能になります。
デバイスのCommand Parameterファイル管理については、[公式のガイド](https://developer.aitrios.sony-semicon.com/edge-ai-sensing/documents/console-user-manual?version=2025-04-23&progLang=#_Command_Parameter_File_management)などをご参照ください。

``` json
{
    "commands": [
        {
            "command_name": "StartUploadInferenceData",
            "parameters": {
                "Mode": 2,
                "UploadMethod": "HTTPStorage",
                "StorageName": "http://162.111.111.111:8080",
                "StorageSubDirectoryPath": "/image/a53",
                "FileFormat": "JPG",
                "UploadMethodIR": "HTTPStorage",
                "StorageNameIR": "http://162.111.111.111:8080",
                "StorageSubDirectoryPathIR": "/meta/a53",
                "CropHOffset": 0,
                "CropVOffset": 0,
                "CropHSize": 4056,
                "CropVSize": 3040,
                "NumberOfImages": 0,
                "UploadInterval": 60,
                "NumberOfInferencesPerMessage": 1,
                "PPLParameter": {
                    "header": {
                        "id": "00",
                        "version": "01.01.00"
                    },
                    "dnn_output_detections": 100,
                    "max_detections": 20,
                    "threshold": 0.3,
                    "input_width": 320,
                    "input_height": 320
                }
            }
        }
    ]
}

```

具体的には、
* UploadMethodとUploadMethodIRに**HTTPStorage**を記載
* StorageNameとStorageNameIRには、httpサーバーの**フローティングIPと使用するポート**を記載
* StorageSubDirectoryPathとStorageSubDirectoryPathIRには、サーバーのホームからの相対パスで、**データの保存先**を指定。イメージと推論結果のメタは別々に指定するか同じにするかは、後段のアプリケーションの作り方によって決めてください。
* FileFormatは、**JPGかBMP**のいずれかを指定

IR付きとなしの項目がありますが、IR付きは、Inference Resultの略で、推論結果の意味で、なしの方はイメージの設定となります。

## 4. データ受け取り側の設定
今回、IBM CloudのVPC上にVSIをDebianで構築し、そこでhttpサーバーを起動し、AITRIOSデバイスから送られてくるImageとMetaデータを同じVSI内に保管していくコードを作成しました。[github](https://github.com/TechMind428/aitrios_receiver)にコードを公開してありますので、cloneしてご利用いただけます。


### 4.1 インストール
```
git clone git@github.com:TechMind428/aitrios_receiver.git
cd aitrios_receiver
python3 -m venv venv
. venv/bin/activate
pip3 install -r requirements.txt
```

### 4.2 起動
Cloneしたaitrios_receiverのディレクトリー直下にあるstartup.shを起動させることで、httpサーバーを含め一連の仕組みが起動します。
```
./startup.sh
```

AITRIOSデバイスのコマンドパラメーター設定が正しくセットされ、推論が開始されると順次送られてきたデータがVSIの指定されたディレクトリーに蓄積されていきます。

このプログラムには、蓄積されたデータを消す機能はついていませんので、適時削除しないとパフォーマンスやリソースにインパクトを与えますので、後段のプログラムや、cronなどを使い古いデータを定期的に削除して、ヘルシーにお使いください。