本ページは i-PRO株式会社 の有志メンバーにより記載されたものです。
本ページの情報は ライセンス に記載の条件で提供されます。
AWS Panorama はAmazon Web Services (AWS) が展開しているAIサービスの一つで、機械学習ができるデバイス(専用ハードウェア) とSDKで構成されています。
AWS Panoramaデバイス を既存のIPカメラが存在するオンプレミス環境に設置することで、AWSから様々な画像解析アプリケーションをデバイスへデプロイし、推論の実施とその結果をAWSへアップロードすることができるようになります。
つまり、既存の一般的なネットワーク監視環境 (ネットワークカメラ + レコーダまたはサーバーソフトウェア) に、Panorama デバイスの設置とAWSとの接続を行うだけで、様々なAIを動かすことができる、というわけですね。さらに検出したデータはAWSとつながり、AWSの様々なサービスで活用できるようになります。
具体的な例としては、
といったことが期待できそうです。
このような製造業のDXやマーケティング等、多種多様なニーズに応えることのできる BTOカメラ i-PRO moduca でも当然導入できるはず、ということで moduca と AWS Panoramaデバイス を組み合わせてどのようなことができるか、検証してみました。

moduca と AWS Panoramaデバイス を接続して物体検知を行った様子
AWS Panoramaの全体像は以下の図のようになっています[1]。

ML Models は画像解析のモデルファイルです。Amazon SageMakerで作成できる様々なモデルや、サードパーティ製の様々なモデルを使用することができます。
AWS Panorama はAWSクラウド上に存在するサービスとなります。このサービスを使用して、オンプレミス環境にあるAWS Panoramaデバイス に様々なML Modelsをデプロイしたり、推論結果をAWS上で確認したりすることができます。
AWS Panorama Appliance は AWS Panorama から制御することができる専用ハードウェアです。対応デバイスの一覧は こちら から確認することができます。
上図で「Your existing IP cameras」と記載されているものが IPカメラです。2023年3月現在、AWS公式ページ上で確認できるテストされた対応カメラのリストは サポートされているコンピュータービジョンモデルとカメラ から確認することができますが、ローカルネットワーク経由でRTSPを出力し、H.264ビデオストリームが出力できるカメラであればなんでも対応できそうです。
AWS PanoramaはAWSのサービスの一つのため、AWSのアカウントおよび月額使用料が必要となります。また、開発用のPCおよびDockerが動作する環境が必要となります。
AWS Panoramaを使用するためには AWSのアカウントが必要となります。発生する料金として以下のものがあります。正確な情報は エッジにおけるコンピュータビジョンアプリケーション を参照してください。
本ドキュメント作成のために使用した環境は以下となります。
AWS Panorama デバイス:
| 製品名 : | Lenovo社製 ThinkEdge SE70 (AWS Panorama認証モデル) | |
| ファームウェアバージョン : | 5.0.7 | |
ドキュメント作成時現在、AWS Panoramaデバイス として認定されているデバイスはAmazon社のAWS Panoramaアプライアンス と Lenovo ThinkEdge SE70 の二種類となります。日本で現在入手できるモデルは ThinkEdge SE70です。
開発用PC:
| CPU : | Intel Core i5-4440S CPU @ 2.80GHz | |
| メモリ : | 8GB + 4GB, DDR3 | |
| OS : | Linux 5.15.0 | |
| ディストリビューション : | Ubuntu 20.04.5 LTS | |
開発PCにインストールしたソフトウェア:
| Docker CE : | Version 20.10.23 | |
| Python : | 3.8.1 / pip 23.0.1 | |
| Visual Studio Code(※) : | 1.75.1 | |
| AWSコマンドラインインターフェイス (aws-cli) : | 1.27.89 | |
| AWS Panoramaクライアント (panoramacli) | 1.1.6 | |
※ Visual Studio Codeのインストールは任意です。
本ドキュメントではLinux PCを使用しましたが、Docker Desktop をインストールすれば Windows や Mac OS でも使用可能なようです。
開発用のPCにAWSコマンドラインインターフェイス(AWS CLI) および Panoramaクライアント をインストールするコマンドは以下となります。
pip3 install --upgrade awscli panoramacli
以下のコマンドでインストールされたことを確認します。
aws --version
もしここで コマンドが見つからないエラーが出た場合、パスが指定されていない可能性があります。
Ubuntuの場合上記コマンドでインストールすると/home/[ユーザー名]/.local/bin にインストールされますのでここをPATHに追加します。
/home/[ユーザー名]/.bashrc の一番最後に以下を追加します。
export PATH=$PATH:$HOME/.local/bin
ファイルを変更した後は以下のコマンドで設定を再読み込みします。
source ~/.bashrc
カメラ:
i-PRO モジュールカメラ moduca を使用しました。
* moduca の他に、i-PRO miniや i-PRO のセキュリティカメラも同様に使用できます。
インターネット回線:
AWSに接続するためのインターネット回線が必要です。AWS Panorama の利点の一つは、エッジ (ローカルネットワーク内) で AIを実施することです。画像データをインターネットにストリーミングすることなく、検知結果のみをクラウドに送信することで、使用帯域を抑えています。
AWSコマンドラインインターフェイスの認証設定:
AWSコマンドラインインターフェイス を用いてAWSへアクセスするには、事前に認証の設定が必要です。

aws configurecsvファイル内に記載されている情報に基づいてAWS Access Key IDおよびSecret access keyを入力します。
多要素認証 (MFA) を設定している場合はさらに以下の手順が必要です。
aws sts get-session-token --serial-number arn:aws:iam::[アカウントID]:mfa/[ユーザー名] --token-code [アプリで表示される値]
export AWS_ACCESS_KEY_ID=[AccessKeyId] export AWS_SECRET_ACCESS_KEY=[SecretAccessKey] export AWS_SESSION_TOKEN=[SessionToken]
その他:
その他、以下の機器を準備します。
ネットワーク接続図:

AWS Panoramaのホームページにて ディベロッパーガイド が公開されています。基本的にはこちらに従ってサンプルのAIモデルのデプロイまでを実施してみました。




ThinkEdgeの場合、 Port番号が1, 2と割り振られていますので、Port 1に接続した場合「Ethernet port 0」を選択します。



手順2はネットワークカメラの登録です。Getting started の Step-2: Add camera streams を実施していきましょう。






Getting
Startedの手順に従うと次はアプリケーションのデプロイですが、その前にデプロイするアプリケーションを登録する必要があります。
以下手順ではチュートリアルで使用されているサンプルアプリケーションを登録します。
panorama-cli import-application
Sucessfully imported applicationまた、このときaws-panorama-sample/packages以下の2つフォルダの先頭がアカウントIDにリネームされます。
このコマンドで認証エラーが出た場合は、準備の「AWS CLIの認証設定」が正しく行われているかを確認してください。
ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account')
panorama-cli build-container --container-asset-name code_asset --package-path packages/${ACCOUNT_ID}-SAMPLE_CODE-1.0
このコマンドの出力例は以下のようになります。以下の例では何回か実施しているので一部キャッシュが効いています。ipro@ipro-P30AD:~/aws-panorama-sample$ panorama-cli build-container --container-asset-name code_asset --package-path packages/${ACCOUNT_ID}-SAMPLE_CODE-1.0
TMPDIR=$(pwd) docker build -t code_asset packages/[account ID]-SAMPLE_CODE-1.0 --pull
[+] Building 3.4s (9/9) FINISHED
=> [internal] load .dockerignore 0.7s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 1.0s
=> => transferring dockerfile: 223B 0.0s
=> [internal] load metadata for public.ecr.aws/panorama/panorama-application:latest 1.7s
=> [1/4] FROM public.ecr.aws/panorama/panorama-application@sha256:2fffe48c2f42c321ae84e2c4c419aeba30af7a28e668afb6a4a2b6eba03aae71 0.0s
=> [internal] load build context 0.3s
=> => transferring context: 1.55kB 0.0s
=> CACHED [2/4] WORKDIR /panorama 0.0s
=> CACHED [3/4] COPY . . 0.0s
=> CACHED [4/4] RUN pip install --no-cache-dir --upgrade pip && pip install --no-cache-dir -r requirements.txt 0.0s
=> exporting to image 0.1s
=> => exporting layers 0.0s
=> => writing image sha256:5f3f654d5cc153711750f41d0b07c8db144a78be79d7263aed233aa2ff7971fb 0.1s
=> => naming to docker.io/library/code_asset 0.1s
docker export --output=code_asset.tar $(docker create code_asset:latest)
WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested
gzip -1 code_asset.tar
{
"name": "code_asset",
"implementations": [
{
"type": "container",
"assetUri": "4b4c01a2d1fea3a68a625321bde552a47fe9422d190e94f62e6fad46f0a5d84c.tar.gz",
"descriptorUri": "1872d0b1129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json"
}
]
}
Container asset for the package has been succesfully built at /aws-panorama-sample/assets/4b4c01a2d1fea3a68a625321bde552a47fe9422d190e94f62e6fad46f0a5d84c.tar.gz
この操作では以下のことを実施しています。panorama-cli package-applicationこのコマンドの出力例は以下になります。
ipro@ipro-P30AD:~/aws-panorama-sample$ panorama-cli package-application
Uploading package SQUEEZENET_PYTORCH_V1
Patch Version 8561e0a3e77c82fc7704586aec94a85f228d182ca41142f90d4eefcccc32fcc2 already registered, ignoring upload
Uploading package SAMPLE_CODE
Patch version for the package 54576b700051d4033882bccb3b36acd2a05f5a51c35240f38d26b8f8807aa4cd
upload: assets/4b4c01a2d1fea3a68a625321bde552a47fe9422d190e94f62e6fad46f0a5d84c.tar.gz to s3://arn:aws:s3:us-east-1:[account ID]:accesspoint/panorama-[account ID]-hta7kszxoagb7lpymghdbduege/[account ID/nodePackages/SAMPLE_CODE/binaries/4b4c01a2d1fea3a68a625321bde552a47fe9422d190e94f62e6fad46f0a5d84c.tar.gz
Descriptor 1872d0b1129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json already exists, ignoring upload
{
"ETag": "\"5d7eff9a6437798667189e95c1cd1174\"",
"ServerSideEncryption": "AES256",
"VersionId": "j5KGIubBa.501bcmxqN7CjwnLxQUjc9W"
}
Called register package version for SAMPLE_CODE with patch version 54576b700051d4033882bccb3b36acd2a05f5a51c35240f38d26b8f8807aa4cd
Register patch version complete for SQUEEZENET_PYTORCH_V1 with patch version 8561e0a3e77c82fc7704586aec94a85f228d182ca41142f90d4eefcccc32fcc2
Waiting for register package version to finish for SAMPLE_CODE
Register patch version complete for SAMPLE_CODE with patch version 54576b700051d4033882bccb3b36acd2a05f5a51c35240f38d26b8f8807aa4cd
Deregistering previous latest patch version 1abe985642b36e7c573f5c07d0e4db9b6c4ad04c6b18d35325948599804b1ba4 for SAMPLE_CODE
All packages uploaded and registered successfully
この操作では以下のことを実施しています。aws panorama list-packages













デプロイに成功すると、デバイスに接続したHDMIモニターにカメラの映像と検知結果が表示されるようになります。
これはキーボードを映した結果です。

こちらはマグカップを映した結果です。water bottle (水筒) と判断されています。

今回はサンプルのものを使用していますが、AIアプリケーションを差し替えることで様々な画像解析を動作させることができます。
カスタムのAIアプリケーションをデプロイする方法は、次回に紹介しようと思います。
本ページの情報は、特記無い限り下記ライセンスで提供されます。
| 2023/4/18 | - | 新規作成, | 吉村 尚洋 |
i-PRO - Programming Items トップページ