はじめに
当社で製作するAWS DeepRacerコースを使って実走レースを開催する予定があるため、ラップタイムを計測する仕組みをAWSのAIサービスを利用して作ってみました。
ラップタイムの計測方法
動画を分析してオブジェクト(車)の検出ができるAmazon Rekognition Videoを利用してラップタイム計測が出来るかも。と思っていたのですが、現時点では顔以外のオブジェクトの検出は動画ファイルのみ対応しており、動画ストリーミングは対応されていないようでした。
AWS メディアサービスを利用して取り込んだ映像を動画ファイルとしてS3に生成することはできるのですが、タイムラグがあるのでストリームデータによるリアルタイム分析の方がレースの臨場感もあり良さそうです。
そこで、顔の検出ができるように車体に顔写真を貼って走行させることを思いつきました!
用意する機材
- Apple MacBook Air
- Amazon Kinesis Video プロデューサライブラリ(C++)をインストール
- Webカメラ
システム構成
ポイント
- ゴール地点のカメラにAWS DeepRacer(顔写真付き)が写ると、動画ストリームから顔情報を検出し前回の検出の時刻の差分からラップタイムを算出します。
- Rekognition Videoで検出した顔の信頼スコア(%)は重要では無いので(誰の顔でも検出できればよい)、ベースとなるフェイスコレクションの顔画像は1つだけ登録しました。ゴール付近に寝そべったり、仰向けのままトラックを徘徊する人物がいない限り、AWS DeepRacer(顔写真付き)がゴールしたことになります。
- リアルタイム性を重視して、画面上にすぐラップタイムが自動反映されるようにAWS IoTを使いました。
- ラップタイムの履歴保存と参加者のニックネーム表示のためにDynamoDBを使いました。
試してみた
AWS DeepRacerはまだ発売されていないので、電池で走るミニカーで試してみました。
うまく顔を認識してラップタイムもブラウザに1〜2秒後に表示されました(右下:ラップタイムとニックネーム)。ミニカーの速度は20〜30cm/秒くらいです。
※PCに写っている映像はこの写真を記録するため、一時停止した状態にしています
まとめ
シンガポールSummitで参加したAWS DeepRacer League(結果は17位でした)では、実際のAWS DeepRacerはミニカーよりも速いスピードが出ていたので、きちんと計測ができるかわかりませんが、走行できる日が楽しみです。
また、作った後でSageMakerが物体検出アルゴリズムをサポートしていることを知ったので、今度はSageMakerでラップタイムを計測できるか試してみたいと思います。
最後にこのシステムを作るにあたり、以下のサイトを参考にさせていただきました。
ありがとうございました。
[AWS IoT] MQTTを使用して、Lambdaからブラウザを更新する方法〜aws-iot-device-sdk(aws-iot-sdk-browser-bundle.js)を使用する場合〜