【活用事例】深層学習で人物検出・クラウド管理
【活用事例】深層学習で人物検出・クラウド管理
- このトピックには0件の返信、1人の参加者があり、最後にYohsuke Shiikiにより2021-02-26 04:53に更新されました。
- 投稿者投稿
- 2021-02-26 04:53 #12048Yohsuke Shiiki参加者
こちらは、KDDI協賛 Leafony応用コンテストの参加作品です。
目次
- 自己紹介
- 作品概要
- 使ったもの
- STM32リーフでの人物検出
- クラウド構成
- グラフ描画
- LTE-Mリーフと組み合わせ
- 全体の動作
自己紹介
慶應義塾大学 石黒研の学生の椎木 陽介です.
人工嗅覚に関連する研究を行っており,主にセンサ用インタフェース回路を担当しています.作品概要
カメラでリアルタイムに取得した画像をSTM32マイコンで人物検出まで行ってしまい,LTE-Mリーフでクラウドに転送してお手軽データ管理・ビジュアライゼーションをするシステムを作成してみました.
マイコン内でデータ処理を行ってしまえばクラウドに転送するデータが非常に小さくなるので,低電力動作につながります.(今回は実際に低電力を突き詰めた動作はしていないです)
データ処理部分にはSTマイクロ社が提供されているX-CUBE-AIというツールを利用させてもらいました.人物検出はFP-AI-VISIONというパックに入っている学習済みネットワークで,こちらを利用させてもらいました.機械学習を勉強されている方であればTensorflowやPytorchなどで学習したネットワークの情報をFP-AI-VISIONに読み込ませることで,マイコン用ライブラリに変換してくれます.
クラウドへの転送部分にはKDDI社から提供してもらったLTE-Mリーフを利用させてもらいました.AWSを利用しており,Amazon Elasticsearch Serviceを利用することでグラフ描画までAWS内で完結します.
読んでくださった方で,こういった画像処理ができると面白いねとかアドバイスして貰えるととても嬉しいです.
使ったもの
開発環境
- Windows 10のPC
- STM32CUBE IDE
- STM32CUBE Programmer
リーフ
- STM32リーフ(AP04 STM32 MCU 2Bus)
- プログラム書き込み用USBリーフ(AZ01 USB)
- ピンヘッダリーフ(AX08 29pin header)
- LTE-Mリーフ
- ブザーリーフ(AI02 SP&PIR)
その他
STM32リーフでの人物検出
X-CUBE-AI
今回利用したいX-CUBE-AIという人工知能実装用のライブラリはHALライブラリで記述されています.
HALを利用するにはSTマイクロ社公式の開発環境であるSTM32CUBE IDEを利用するのが一番簡単なので,こちらからインストールします.私はバージョン1.5.1を利用しました.
X-CUBE-AIはSTM32CUBE IDEでのマイコンのコンフィギュレーション画面で以下の手順でダウンロードできます.- Software Packs -> Manage Software PacksでEmbedded Software Packages Managerを開く
- Embedded Software Packages Manager内で,STMicroelectronics -> X-CUBE-AI -> Artificial Intelligence(今回は5.2.0を利用しました)
FP-AI-VISION
これはSTマイクロ社が用意しているコンピュータビジョン用のパッケージを利用します.ここからダウンロードしてください.
私はこのパッケージのうち以下のファイルだけ利用しました.- FP_AI_VISION1/Utilities/AI_resources/PersonDetection/Google_Model/person_detect.tflite
- X-CUBE-AIにこのモデルを読み込ませます
- FP_AI_VISION1/Middlewares/ST/STM32_Image/*(全てのファイルをコピー)
- カメラデータのリサイズ・グレイスケール変換などを行います
Arducam
Leafonyが用意するSTM32リーフにはハードウェアのカメラインタフェースが無いみたいなので,SPI通信で利用できるArducamを利用しました.私はArducam Miniモジュール(2メガピクセル)を利用しました.
STM32マイコン用のライブラリは提供されているが,HALライブラリよりも前に使われていたStandard Peripheral Libraryで記述されているので,通信部分は書き換える必要があります.
Pmod MTDS
SPI通信で描画出来て,320×240の画像データを描画できたのでPmod MTDSを利用しました.
検出している様子
LeafonyとArducamとPmod MTDSを組み合わせるとこんな感じになります.
実際にカメラで人物検出している様子を動画にしました.
人物検出されたときはPmod MTDSの画面フレームが赤で点滅し,ブザーも鳴らしています.
検出されない時は画面のフレームが青色で表示されますクラウド構成
AWSのIoTサービスを使うためのハブとなってくれるAWS IoT Coreを使ってみました.
今回はグラフ描画しかしていませんが他のデータ分析サービスもたくさんあるようなので,使いこなせると面白そうです.簡単なチュートリアルがAWS IOT CORE 初級ハンズオンに記載されているので,興味のある方は確認してみてください.
LTE-Mリーフにmi-saitouさんが用意されたHTTPSライブラリがあり,それを使ってAWS IoT Coreにデータを送信できればよかったのですが,デバイスの認証情報を入れ込むことができなかったので,手前にAmazon API Gatewayを置きました.
今回のようなグラフ表示だけで分析しないのであれば,Amazon Elasticsearch ServiceにAmazon API Gatewayから直接データを送るようにも設定できると思います.
グラフ描画
Amazon Elasticsearch Serviceを利用して作成したグラフはこんな感じです.
X軸はLTE-Mリーフで取得した時刻を,Y軸には人物検出したときに1, していない時に-1のとなるような関数を表しています.
このグラフを作成するのに慣れれば5分とかからないので,とても便利でした.
LTE-Mリーフとの組み合わせ
先ほどまでに作成したSTM32リーフと合体させるとこのようになります.
ディスプレイがぶら下がってしまってかなり邪魔だったのですが,ちょうどLTE-Mリーフのねじの位置と近い場所にあったのでLTE-Mリーフの裏面に取り付けることができました.実用的にはディスプレイは全く必要ないのでそこまで取り回しは不便ではないと思います.
全体の動作
STM32のリーフでカメラ画像の取得と画像認識を行い,LTE-Mリーフを使用してAWSのクラウドへ送りグラフ化する様子を動画にしました.
LTE-Mの動作に関して,3つのLED(赤,青,緑)が実行中の動作を表示しており,次のように制御されています.
- 緑:AWSへデータを送信しているとき点灯
- 赤:人物検出されなかったデータを転送する場合に点灯
- 青:人物検出されたデータを転送する場合に点灯
Elasticsearchのkibanaというツールでグラフ表示しています.
逐次更新ではないので,Refreshボタンを押すとデータをデータベースからとってきて,グラフを更新してくれます.
時間範囲も好みで変更できます.デモ動画は現在時刻から3分前までの時間範囲で更新させています.ディスプレイは本当は裏面で動作していますが,ブザーが鳴ることで検出結果が分かるので映しませんでした.
STM32リーフの動作とLTE-Mリーフの動作は非同期になっているので,認識タイミングと送信タイミングには数秒ずれが生じています.
- 投稿者投稿
- このトピックに返信するにはログインが必要です。