Howto

Armadillo-IoT G4 を用いた物体認識プログラムの動作確認と AWS 各サービスの利用による分析方法 (物体認識プログラム動作確認編)

Armadillo-IoT G4 を用いた物体認識プログラムの動作確認と AWS 各サービスの利用による分析方法 (G4 セットアップ編) で作成した "my_container" 内で物体認識プログラムを動作させます。


以下の工程で実施します。

1. 物体認識プログラム

Armadillo-IoT G4 上に "my_container" が作成されていると思います。以下のコマンドでコンテナを起動してアタッチします。

[armadillo ~]# podman start my_container
[armadillo ~]# podman attach my_container

/root ディレクトリ内に "object_detection" フォルダが存在していると思います。

[container ~]# ls /root
key object_detection

"object_detection" フォルダ内にある config.ini ファイルには物体認識プログラムで利用する変数が含まれており、動作環境に合わせて修正が必要です。物体認識プログラムはデバイスシャドウの更新の機能を利用して物体認識結果を更新します。

1.1 設定ファイル

"object_detection" フォルダ内にある config.ini に物体認識プログラムで利用する変数が含まれています。動作環境に合わせて修正してください。

[SETTING] には物体認識プログラムの動作に必要な設定項目になります。

項目名 設定値 説明
model detect.tflite 物体認識プログラムが利用するモデル名です。もし自分で学習させたモデルを使用したい場合は変更してください。
labels coco_labels.txt 物体認識プログラムが利用するラベルの一覧ファイル名です。もし自分で作成したラベルの一覧ファイルを使用したい場合は変更してください。
camera_id 2 /dev/video<camera_id> のデバイス名として使用するカメラ IDです。/dev ディレクトリの video の ID に変更してください。
gateway_id 0000001234567890 G4 のシリアル番号です。1. SE050からデバイス証明書とリファレンスキーを取得する で取得した"SerialNo(ThingName)" の値に変更してください。
threshold 0.4 物体認識プログラムのスコア用のしきい値です。
wanted_labels ["person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe"] 物体認識プログラムが判別するラベル名の一覧です。一覧にあるラベル名が物体認識された場合の物体認識結果と画像を AWS サービスに送信します。

[SE050] には AWS サービスへの接続に必要な設定項目になります。

項目名 設定値 説明
rootCA /root/key/AmazonRootCA1.pem CA証明書のファイルパスです。
cert /root/key/device_cert.pem X.509証明書のファイルパスです。
key /root/key/key.pem リファレンスキーのファイルパスです。
port 443 ポート番号です。
device_data_endpoint xxxxxxxxxx.iot.ap-northeast-1.amazonaws.com デバイスデータエンドポイントです。2.4 AWS IoT Core にThing(デバイス)を登録する の "IoT Core デバイスデータエンドポイント取得" で取得したデバイスデータエンドポイントを指定してください。
credential_endpoint xxxxxxxxxx.credentials.iot.ap-northeast-1.amazonaws.com クレデンシャルプロバイダが使用するクレデンシャルエンドポイントです。2.5 IoT Core 認証情報プロバイダ設定 の"IoT Core 認証情報プロバイダエンドポイント取得" で取得した認証情報プロバイダエンドポイントを指定してください。
role_alias G4_IoTCore_RoleAlias ロールエイリアス名です。Howto 通りであれば変更する必要はありません。
request_delay 1 リクエスト間の時間(秒単位)です。
s3_bucket upload-images-bucket S3 バケット名です。1. Amazon S3で作成した S3 バケット名を指定してください。

1.2 接続機器

物体認識プログラムの動作のために必要な接続機器は以下になります。

  • USB ハブ
  • USB カメラ
  • パトランプ(任意)
  • ディスプレイ(任意)

また AWS サービスとの接続のため、ネットワーク接続も必須になります。Armadillo-IoT G4 のインターフェイスについては4.3. インターフェースレイアウトを確認してください。列挙したデバイス以外を接続したい場合はプログラムを修正してください。

  • USB ハブ
    Armadillo-IoT G4 には USB ポートが1つのため、複数の USB デバイスを接続するためには USB ハブが必要になります。今回は USB カメラとパトランプを接続するため2ポート以上の USB ハブを使用します。また、接続するパトランプによってはセルフパワー型 USB ハブを使用してください。当 Howto では以下の製品を使用しました。
製品名 型番 URL
バスパワータイプUSBハブ BSHT310SV https://www.buffalo.jp/product/detail/manual/bsht310sv.html
  • USB カメラ
    物体認識プログラムでは USB カメラからの入力を用いて物体認識を行うため、USB カメラの接続が必須になります。当 Howto では以下の製品を使用しました。
製品名 型番 URL
WEBカメラ UCAM-DLV300TBK https://www2.elecom.co.jp/multimedia/pc-camera/ucam-dlv300t/
  • パトランプ(任意)
    パトランプの接続は任意となっているため、該当するパトランプを所持していない場合でも物体認識プログラムは動作します。しかし、他製品を使用する場合はプログラムの修正が必要になります。 当 Howto では以下の製品を使用しました。
製品名 型番 URL
USB制御積層信号灯 LR6-3USB-RYG https://www.patlite.co.jp/product/detail0000000689.html
  • ディスプレイ(任意)
    物体認識した画像は S3 にアップロードされるためディスプレイの接続は任意となります。リアルタイムで物体認識した画像を確認したい場合はディスプレイを HDMI ケーブルを用いて接続してください。当 Howto では使用しません。

1.3 動作確認

以下のコマンドを実行して物体認識プログラムを起動します。

[container ~]# weston --tty=1 &
[container ~]# gpioset gpiochip0 12=1
[container ~]# python3 detect_usbcamera.py

以下は起動時の出力です。ディスプレイが接続されていないため、出力に失敗していますが動作には問題ありません。

INFO: Created TensorFlow Lite delegate for NNAPI.
WARNING: Operator CUSTOM (v1) refused by NNAPI delegate: Unsupported operation type.
Applied NNAPI delegate.
[ INFO:0] global ../modules/videoio/src/videoio_registry.cpp (191) VideoBackendRegistry VIDEOIO: Enabled backends(8, sorted by priority): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); MSMF(970); V4L2(960); CV_IMAGES(950); CV_MJPEG(940); GPHOTO2(930)
ssse-flw: EmbSe_Init(): Entry
App   :INFO :Using PortName='/dev/i2c-2:0x48' (ENV: EX_SSS_BOOT_SSS_PORT=/dev/i2c-2:0x48)
sss   :INFO :atr (Len=35)
      00 A0 00 00    03 96 04 03    E8 00 FE 02    0B 03 E8 08
      01 00 00 00    00 64 00 00    0A 4A 43 4F    50 34 20 41
      54 50 4F
sss   :WARN :Communication channel is Plain.
sss   :WARN :!!!Not recommended for production use.!!!
ssse-flw: Version: 1.0.5
ssse-flw: EmbSe_Init(): Exit
ssse-flw: Control Command EMBSE_LOG_LEVEL; requested log level = 4
{'credentials': {'accessKeyId': 'ASIA5MP7XUMZ3T42HB5T', 'secretAccessKey': 'WykIFdASCAaf1BDWzXgm0LnElRmCIJZI5kucagPm', 'sessionToken': 'IQoJb3JpZ2luX2VjEAcaDmFwLW5vcnRoZWFzdC0xIkYwRAIgfecU40Z3Da0LSTuUlXJBYbt7Kq4EsHH3qAiJX12MwV8CIG46EuLENy11BK9bcYxfMFX06NZGMSeI1hYKB/+rW7QoKpoECKD//////////wEQAhoMOTIwMTk2MTk1MTIzIgw2v76t4GKN3kssQF0q7gNprqDpDdF/JjHmDh8/nFczCzv3JNHMv54yPHL9ig1WP3AqAadWc+bvFErVn2rdgCEso/FhIjrHS8uha4+bF7/E3Zoo+GATQyQmHeGo/aCUdMlBv+GCx8ajxo15p+5CWIKeX7k+jm/0FoLTg29gxpmaaFa2sgIvAtNFnPZjfT6EGPp5GXsE6KXjvtf7AXemhDk09Bfzpoex7xeCBwcrebeQtbpPdh/y1VOg24v5XznBm+Ne94CGljQ9qFhYHKkiNwL9khmFODlu3RwVYkiufgvjYQ/DtB1HoyHcbOr4XnJwFJQ1OY0h4Lfz5d+hDFzbZN+gko3jlUH3InCCm0/roMDPnL84sDjsf91Ythqsgw5sw7eCnIP+Ay0k2x3wWfbHSYu+pW5HHP3kt++EdUq1Lvrp7ynCFUFI1VXGH/EJeyd4W9XGqh4d/eljg+UhwsFN1zVnxdPlaLcqpb6ourSf+21rTm1454lN/eEW1EiNewyZLs/Kinz9SY1rwuFOFf5jdWnA0NiIGS6pmdsKso+sHPMtqYdlBvGDDXoY8/1xeAeo0CvoaWEx6mLDfcRFtl/4W7ZImfv8dP/egPTZ/c/UJcfgB9pUHRzFmoe6v4JEW7hWXA1/gXmjz1Ejgo2CJv2V35KHbMfBOqiIWzzQbraiujCE/bSSBjrHARUuWDPZWiazGzreD4gpkeX9Td/Nn8RQiKBJwr4JDbC2R2t1fDswhUAcW3YDeCxRX4UpD5ptkGpfNKQ8Oa3GxnNCe/XrWpcP6pbNDs5dWak5C4DHWCdYdkhHAob7Q7GufEfunCwQc073AyYkZqwbP0KOJ+lsWyTPBhXGR4SYX73MIVvAKNkmbiafI+udLqKeJ+SzyfueH0PuF2jcfZ91XWiQ5MzUDyHXh2Z4kZu/3hK8l5s8cRf0U0ZGbf7uGofDw083QG+OOzc=', 'expiration': '2022-04-06T08:17:24Z'}}
~~省略~~
(Object Detection Demo:10): Gdk-CRITICAL **: 07:17:25.245: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed

"credentials" が表示されない場合はネットワークを確認してください。物体認識され、S3 に画像がアップロードされた時の出力は以下のようになります。

file upload success.
add data in list and send 2022-04-06/2022-04-06_162402_062.jpg
file upload success.
add data in list and send 2022-04-06/2022-04-06_162403_045.jpg
file upload success.
add data in list and send 2022-04-06/2022-04-06_162403_606.jpg
file upload success.
add data in list and send 2022-04-06/2022-04-06_162403_977.jpg
update shadow and send data in RDS.
~~~~~~~~~~~~~~~~~~~~~~~
Update request with token: 55c00405-4aa2-44b1-82b6-cd13429a62c8 accepted!
property: [{'object': [{'class_id': 'person', 'score': 0.5}, {'class_id': 'person', 'score': 0.4375}], 'timestamp': '2022-04-06 16:24:02.062', 'gateway_id': '000000C900010068', 'camera_id': 2, 'object_key': '2022-04-06/2022-04-06_162402_062.jpg'}, {'object': [{'class_id': 'knife', 'score': 0.51171875}, {'class_id': 'knife', 'score': 0.4609375}, {'class_id': 'person', 'score': 0.42578125}], 'timestamp': '2022-04-06 16:24:03.045', 'gateway_id': '000000C900010068', 'camera_id': 2, 'object_key': '2022-04-06/2022-04-06_162403_045.jpg'}, {'object': [{'class_id': 'person', 'score': 0.609375}, {'class_id': 'person', 'score': 0.44921875}], 'timestamp': '2022-04-06 16:24:03.606', 'gateway_id': '000000C900010068', 'camera_id': 2, 'object_key': '2022-04-06/2022-04-06_162403_606.jpg'}, {'object': [{'class_id': 'person', 'score': 0.4375}], 'timestamp': '2022-04-06 16:24:03.977', 'gateway_id': '000000C900010068', 'camera_id': 2, 'object_key': '2022-04-06/2022-04-06_162403_977.jpg'}]
~~~~~~~~~~~~~~~~~~~~~~~

物体認識された場合は指定の Eメールアドレスにメールが送信されているはずです。以下は送信されたメール本文の一例になります。

侵入物体を検知しました。
最も高いスコアのラベル名:person です。2022-04-06/2022-04-06_162403_606.jpg を確認してください。

メール本文には一番スコアが高い画像のファイル名が記載されています。S3 バケットにアップロードされている該当ファイルを確認してください。また、物体認識結果は RDS に格納されています。

2. Amazon Quicksight

Amazon QuickSight は VPC 接続するためエンタープライズ版を使用します。スタンダード版を使用している場合はエンタープライズ版にアップグレードしてください。ただし、アップグレード後はダウングレードできない のでご注意ください。アップグレードは [QuickSight の管理]画面の上部にある[今すぐアップグレード]を選択してください。

2.1 Amazon RDS の分析設定

2.1.1 VPC 接続の追加

項目名 設定値
VPC 接続名 RDS
VPC ID g4-howto-vpc
サブネット ID <プライベートサブネットの一つを指定>
セキュリティグループ ID < Amazon QuickSight 用のセキュリティグループ>
DNS リゾルバーのエンドポイント (オプション)

2.1.2 データセットの追加

データベースからのデータセットの作成を参考に RDS のデータセットを追加します。

項目名 設定値
データソース名 detect_object_mysql
インスタンス ID database-1
接続タイプ <プライベートサブネットの一つを指定>
データベース名 object_detect_db
ユーザ名 < Amazon RDS 接続用のマスタユーザ名 >
パスワード < Amazon RDS 接続用のパスワード >

[データソースを作成]を選択後、テーブル名を選択します。

2.2 分析画面

分析画面を表示するにはチュートリアル: Amazon QuickSight 分析を作成するチュートリアル: Amazon QuickSight ビジュアルを変更するを参考にしてください。 以下は設定例です。

項目名 設定値
ビジュアルタイプ クラスター棒コンボグラフ
X軸 timestamp
棒グラフの値 score(合計)
棒のグループ/色 class_id

描画されたグラフは以下のようになります。

検出されたラベルの頻出頻度がわかります。


以上で Howto を終了します。 各 AWS サービスが不要になった場合はただちに削除・停止を行ってください。