AWS Panorama でAIを動作させる

 

本ページは 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デバイス を組み合わせてどのようなことができるか、検証してみました。

 

panorama result2

moduca と AWS Panoramaデバイス を接続して物体検知を行った様子

 

 


 

1. AWS Panoramaについて

AWS Panoramaの全体像は以下の図のようになっています[1]。

panorama-overview

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ビデオストリームが出力できるカメラであればなんでも対応できそうです。

 

 

 

2. 準備

[概要]

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へアクセスするには、事前に認証の設定が必要です。

 

  1. AWS マネジメントコンソール にログインし、画面右上のアカウント名をクリックし、「セキュリティ認証情報」を選択します。
    aws-management-console

  2. アクセスキー セクションの「アクセスキーを作成」→「コマンドラインインターフェイス (CLI)」を選択し、「上記のレコメンデーションを理解し、アクセスキーを作成します」にチェックを入れ、「次へ」を選択します。

  3. 「アクセスキーを作成」を選択します。

  4. 「.csvファイルをダウンロード」を選択し、csvファイルを保存します。

  5. Linuxのシェル上で以下を入力します。
    aws configure
    csvファイル内に記載されている情報に基づいてAWS Access Key IDおよびSecret access keyを入力します。 
    Default region nameはus-east-1を入力します。Default output formatは空白のままで問題ありません。

多要素認証 (MFA) を設定している場合はさらに以下の手順が必要です。

  1. Linuxのシェル上で以下を入力します。 [アプリで表示される値]はMFAデバイスのアプリ上に表示されるワンタイムパスワードとなります。
    aws sts get-session-token --serial-number arn:aws:iam::[アカウントID]:mfa/[ユーザー名] --token-code [アプリで表示される値]

  2. 取得できた値を以下のように環境変数に設定します。
    export AWS_ACCESS_KEY_ID=[AccessKeyId]
    export AWS_SECRET_ACCESS_KEY=[SecretAccessKey]
    export AWS_SESSION_TOKEN=[SessionToken]

その他:

その他、以下の機器を準備します。

ネットワーク接続図:

network-overview


3. サンプルのAIモデルをデプロイする

[概要]

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

[手順1 - デバイスの登録]

  1. AWSのマネジメントコンソールにログイン後、https://us-east-1.console.aws.amazon.com/panorama/home?region=us-east-1#getting-started にアクセスします。Panoramaデバイス にアプリをデプロイするまでの手順がStepに従って示されています。日本リージョンではまだサービスが提供されていないため、ここでは「バージニア北部」を選択しています。
    reg-appliance1

  2. Step-1の Add device を選択します。以下の5ステップでデバイスの登録を実施します。

  3. デバイス名を入力します。「i-PROAppliance」と入力しました。オプションでデバイスの説明やタグ付けも可能ですが今回はスキップしました。
    reg appliance2

  4. 指示に従ってデバイスの電源をONにしてケーブルを接続します。ThinkEdge SE70はLANのポートが二つありますが、ポート1の方に接続しました。
    reg-appliance3

    LANの接続が認識され、通信ができていれば、フロントのLEDは左が緑の点灯、右が緑の点滅になります。
    device LED


  5. 次のステップでネットワーク設定を行います。DHCPが有効な環境であれば何もする必要はないと思われますが、今回はDHCPが無効ですので設定を行います。
    「Advanced network settings」ボタンを押し、「Ethernet port 0」タブに必要な設定を入力します。
    reg-appliance4

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

  1. 接続用の情報が生成されます。「Download」ボタンを押すと certificates-omni_[デバイス名].zipというファイルがダウンロードされます。
    このファイルをUSBメモリのトップディレクトリに保存し、「Next」ボタンを押します。
    reg appliance5

  2. USBメモリをデバイスの前面のUSBポートに挿入します。自動的にデータが読み込まれAWS Panorama と Panoramaデバイス が関連付けされます。
    以下のように表示されると関連付けは成功です。この情報ファイルは5分間のみ有効となります。
    reg appliance6

  3. これで接続は完了です。
    reg appliance7

 

[手順2 - カメラの登録]

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

  1. moduca に電源ケーブル・LANケーブルを接続し起動します。固定IPアドレスの設定が必要ですので、ネットワーク設定でIPアドレスを設定します。
    また、現在H.265は使用できず、H.264のみ対応しているようです。ストリームの設定でコーデックH.264、解像度1920x1080に設定します。以下に手順を記載します。
    ブラウザで moduca にアクセスし、画面右上のipromini setting iconをクリックすると、画面下部にメニューが表示されます。
    moduca top

    コーデックを変更するには詳細設定メニューに入ります。「カメラの詳細設定」ボタンを押します。
    moduca detail
  2. 以下の表示されたメニューの左側 「+映像/音声」をクリックして「映像」メニューを表示します。「ストリーム(1)」より下がストリームの設定です。カッコ内の番号 (1~4) がRTSPでリクエストする際の stream_1 から stream_4 に対応していますので、「ストリーム(1)」の「圧縮方式」のラジオボタンを確認します。

    moduca stream selection

    「圧縮方式」を H.264 に変更し、画面の下の方にある「設定」をクリックします。
    moduca setting2

    これで moduca の設定は完了です。トップページの上部に表示されているストリームのコーデックが 「H.264」と表示されます。
    moduca top2

  3. 再びAWSのマネジメントコンソールに戻り、AWSの「Add data source」- 「Camera stream details」でストリームに名前を設定します。ここでは「i-PROmoduca-Stream1」という名前を設定しました。
    reg camera4

  4. その下の「RTSP & credentials」にも入力します。
    i-PRO社ネットワークカメラのRTSP URLは こちら で詳しく説明していますが、AWS Panoramaの入力ページではカメラのユーザーIDとパスワードを分けて入力するようになっています。
    ここでは「rtsp://192.168.100.33/MediaInput/stream_1」と入力します。
    そして「Credentials - optional」のところにカメラのブラウザアクセスで使用するユーザーIDとパスワードを入力します。
    入力するユーザーはストリーム配信の権限があればよく、管理者権限は不要です。
    reg camera2

  5. 「Save」ボタンを押すと、カメラストリームが生成されます。成功すると以下のようにData sourceに追加されます。
    reg camera5



[手順3 - アプリケーションの登録]

Getting Startedの手順に従うと次はアプリケーションのデプロイですが、その前にデプロイするアプリケーションを登録する必要があります。
以下手順ではチュートリアルで使用されているサンプルアプリケーションを登録します。

  1. https://github.com/awsdocs/aws-panorama-developer-guide/releases/download/v1.0-ga/aws-panorama-sample.zip よりPanoramaデバイス 向けのサンプルアプリケーションをダウンロードします。

  2. zipを展開し、端末で展開したフォルダ内に移動します。

  3. 以下のコマンドを入力してサンプルアプリケーションをインポートします。
    panorama-cli import-application

    以下のように表示されたら成功です。
    Sucessfully imported application
    また、このときaws-panorama-sample/packages以下の2つフォルダの先頭がアカウントIDにリネームされます。

    このコマンドで認証エラーが出た場合は、準備の「AWS CLIの認証設定」が正しく行われているかを確認してください。


  4. 次にデバイス上で動作するアプリケーションコンテナをビルドします。まずは以下のコマンドでAWSアカウントIDを変数に設定します。
    ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account')
  5. その後以下のコマンドでコンテナのビルドを行います。
    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
    この操作では以下のことを実施しています。
    • packages/[アカウントID]-SAMPLE_CODE-1.0/Dockerfileの記述にしたがって、Panorama デバイス内で実行できる環境をプルする。
    • 同フォルダ内にあるapplication.py等のファイルをイメージ内にコピーする。
    • code_asset.tarというファイル名でイメージをエクスポートする。
    • 同フォルダ内にあるpackage.jsonの”assets”に”code_asset”の情報を追加する。

  6. 次に以下のコマンドでアプリケーションのパッケージ化と登録、Amazon S3アクセスポイントへのアップロードを行います。
    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
    
    この操作では以下のことを実施しています。
    • assetsディレクトリ内のSQUEEZENET_PYTORCH_V1イメージ及びSAMPLE_CODEイメージをs3へアップロードする。
    • アップロードしたパッケージを登録する。

  7. アップロードされたパッケージの一覧は以下のコマンドで参照することができます。
    aws panorama list-packages

 

[手順4 - アプリケーションのデプロイ]

  1. 再びAWS マネジメントコンソール のPanorama ページから、Get startedを選択し、「Deploy application」ボタンを押します。

  2. 以下のようなウィンドウが表示されますので「Ok」を選択します。
    Deploy application1

  3. 表示されるウィンドウに、ビルドしたパッケージ内のgraphs/aws-panorama-sample/graph.jsonの内容を貼り付けます。以下の図は一部省略しています。
    「Next」ボタンを押します。
    Deploy application2

  4. サンプルアプリ名に「aws-panorama-sample」と入力し「Proceed to deploy」を選択します。
    Deploy application3

  5. 課金に対する説明が表示されます。各カメラが配信するストリームごとに月額で課金されるということが説明されています。
    Deploy application4

  6. デプロイについての説明です。そのまま「Begin deployment」を選択します。
    Deploy application5

  7. アプリケーションに対してIAMロールを設定します。今回は何も入力せずに「Next」を選択します。
    Deploy application6

  8. デバイスの選択画面です。「Select device」を選択します。
    Deploy application7

  9. 手順1で登録したデバイス (i-PROAppliance) を選択し「Select」を押します。
    Deploy application8

  10. このように表示されます。デバイスが「Online」であることを確認します。
    Deploy application9

  11. 次はデータ入力ソースの選択です。「View input(s)」を選択します。
    Deploy application10

  12. 「Select data sources」を選択した後、手順2で作成した moduca のストリーム 「i-PROmoduca-Stream1」を選択し、「Save」を押します。
    Deploy application17

  13. 表示されるURLが正しいことを確認し「Save」を押します。元の画面に戻りますので「Next」を選択します。
    Deploy application18

  14. 次はアプリケーションの設定です。今回はデフォルトを使用しますので、そのまま「Next」を選択します。
    Deploy application13

  15. 最後の画面です。内容に問題がないか確認し、「Deploy」を選択します。
    Deploy application19

  16. 次のステップの説明が表示されます。「Done」を押すとデプロイが開始されます。
  17. AWS Panoramaのトップ画面に戻り、画面上部に以下のような表示が出ます。15分待ちましょう。
    Deploy application15

    無事にデプロイが成功した場合、緑色に変化します。
    Deploy application16


[手順5 - 動作確認]

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

これはキーボードを映した結果です。

Result keyboard

 

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

 

今回はサンプルのものを使用していますが、AIアプリケーションを差し替えることで様々な画像解析を動作させることができます。

カスタムのAIアプリケーションをデプロイする方法は、次回に紹介しようと思います。

 

 

 

ライセンス

本ページの情報は、特記無い限り下記ライセンスで提供されます。


Copyright 2023 i-PRO Co., Ltd.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

 

 

参考

 

 


 

変更履歴

2023/4/18 - 新規作成, 吉村 尚洋

 

i-PRO - Programming Items トップページ

プライバシーポリシー