AWS Summit Tokyo 2023が、2023年4月20日(木)、21日(金)の2日間にわたって開催されます。富士ソフトは、i-PRO モジュールカメラを使用して現実の環境を仮想空間上に再現するデジタルツインのデモを出展します。
AWS Summit Tokyo 2023にまだお申込みではない方は、こちらからご登録ください。
i-PRO株式会社のモジュールカメラは2023年1月に発表され話題となりました。本コラムでは、デモで使用するi-PRO モジュールカメラのAWS連携の開発方法についてご紹介します。
i-PRO モジュールカメラとは
i-PRO モジュールカメラは、豊富な選択肢があるモジュールを自由に組み合わせ、目的や用途に応じてBTO(Build To Order)ができるカメラです。カメラの中で独自のアプリケーションやAIアプリケーションを動作させることができ、i-PRO社からは以下のAIアプリケーションが提供されています。
- AI動体検知アプリケーション AI-VMD
- AIプライバシーガードアプリケーション
- AI混雑検知アプリケーション
- AIマスク非着用検知アプリケーション
工場内の立入禁止エリアへの侵入検知やフォークリフトの監視など、様々な用途への活用が可能です。
デジタルツインに関するデモにおけるカメラの用途
デジタルツインに関するデモでは、i-PRO モジュールカメラを以下の用途で使用しています。
- IoTゲートウェイと連携し、動画をAWSに蓄積
- カメラのみで人数検知AIが動作し、人数情報をAWSへ送信
それぞれの構築方法を順に解説します。
IoTゲートウェイと連携し、動画をAWSに蓄積
今回のデモではi-PRO モジュールカメラ以外にも様々なIoTデバイスを使用します。IoTデバイスの中にはBluetooth接続のみをサポートしているものもあり、直接AWSとの通信ができません。そのため、AWS IoT GreengrassをインストールしたIoTゲートウェイを配置しています。
AWS IoT Greengrassの機能はコンポーネントという形で提供されます。AWSが、動画をAmazon Kinesis Video Streamsに送信してくれるEdge connector for Kinesis Video Streamsというコンポーネントを提供していますので、今回はこちらを使用します。コンポーネントは独自で作成することも可能ですが、AWS提供のコンポーネントでは設定だけで機能が実現できます。
必要なライブラリーのインストールや、AWSリソースの作成を行うだけで、動画をAWSに蓄積することができます。
カメラのみで人数検知AIが動作し、人数情報をAWSへ送信
i-PRO モジュールカメラは、アプリケーションをインストールして動作させることができ、独自の拡張アプリケーションを開発するためのSDK(Software Development Kit)が提供されています。対応言語はC言語とPythonで、豊富なサンプルプログラムも用意されています。
SDKはこちらのサイトから入手可能です。
デジタルツインに関するデモでは、物体検出を行うサンプルプログラムをベースにAWSとの連携部分を独自で開発しました。
開発手順
サンプルプログラムは以下のようなディレクトリ構成となっています。pythonディレクトリ内にあるpymain.pyというメインで実行されるプログラムを修正します。
yuv_ssd_app/
├── bin
├── conf
├── data
│ └── cnn
├── python
│ └── site-packages
│ └── websockets
│ ├── extensions
│ └── legacy
└── setup
1.依存ライブラリーの導入
依存ライブラリーはsite-packagesディレクトリに配置します。boto3とrequestsをインストールします。
python3.7 -m pip install -t site-packages/ boto3 requests
2.AWS IoT Coreのデバイス証明書を使用してAWSサービスへ接続するセキュリティトークンを取得
AWS IoT SiteWiseへのデータアップロードにはAWS SDKを使用しますが、AWSのリソースへアクセスするための認証情報が必要となります。IoTデバイスに認証情報をハードコーディングすることは望ましくないため、AWS IoT Coreのデバイス証明書を使用して一時的な認証情報を取得する方法を採用しました。
次にこちらのドキュメントを参考に、以下のリソースを作成します。また、デバイス証明書へiot:AssumeRoleWithCertificateのポリシーをアタッチする必要があります。
– IAMロール
– AWS IoT Core ロールエイリアス
準備が整ったら、Pythonプログラムで認証情報プロバイダーエンドポイントへリクエストを送信します。
requests.get(
f"https://{endpoint}/role-aliases/{role_alias}/credentials",
cert=(pem_path, private_key_path),
verify=root_ca,
)
レスポンスとして、認証情報を以下の形式のJSON(JavaScript Object Notation)で受け取ることができます。
{"credentials":{
"accessKeyId":"access key",
"secretAccessKey":"secret access key",
"sessionToken":"session token",
"expiration":"2018-01-18T09:18:06Z"
}
}
3.「人」を検知した際にAWS IoT SiteWiseにデータ送信
サンプルプログラムでは物体検知の結果がSetResultData関数の引数resultとして渡されます。この関数内でwsDataという変数を生成しており、wsDataは以下のような内容になります。
0,1280,720,1068,367,210,349,person
先頭からそれぞれ、インデックス番号、解像度(X)、解像度(Y)、検知した物体の開始座標(X)、検知した物体の開始座標(Y)、検知した物体の幅、検知した物体の高さ、物体ラベルです。 物体ラベルが”person”のものをカウントすることで、人数としています。 デジタルツインをAWS IoT TwinMakerで構築していますが、データはAWS IoT SiteWiseに蓄積するため、SDK を活用しAWS IoT SiteWiseへデータを送信します。
import boto3
client = boto3.Session(${認証情報}).client('iotsitewise')
client.batch_put_asset_property_value(
entries=[
{
"entryId": str(uuid.uuid4()),
"assetId": "<<アセットID>>",
"propertyId": "<<アセットプロパティID>>",
"propertyValues": [
{
"value": {
"integerValue": person_count,
},
"timestamp": {
"timeInSeconds": int(
datetime.now(
tz=timezone(timedelta(hours=9))
).timestamp()
),
"offsetInNanos": 0,
},
"quality": "GOOD",
},
],
},
]
)
まとめ
i-PRO モジュールカメラを使用したAWS連携の開発方法をご紹介しました。AWS Summit Tokyo 2023の富士ソフトブースには、i-PRO社のカメラの実機や様々なセンサーを組み合わせたデジタルツインに関するデモを展示します。ご来場の際には、ぜひお立ち寄りください。
AWS Summit Tokyo 2023にまだお申込みではない方は、こちらからご登録ください。
AWS Summit 2023について、詳しくはこちら
AWS Summit 2023 富士ソフト出展内容
AWS Summit Tokyo 2023 _ 富士ソフトのスポンサーセッション
「国内監視カメラシェアNo.1のi-PRO様と実現したIoTカメラサービス「i-PRO Remo.」アジャイル開発の軌跡と経営効果」はこちらから
富士ソフト スポンサーセッション
i-PRO株式会社様AWS導入事例について、詳しくはこちら
i-PRO株式会社(IoTプラットフォーム on AWS導入支援)
富士ソフトのAWS関連サービスについて、詳しくはこちら
アマゾンウェブサービス(AWS)
IoTプラットフォーム on AWS について、詳しくはこちら
IoTプラットフォーム on AWS
IoT運用支援サービス について、詳しくはこちら
IoT運用支援サービス