360 Live Streaming で物体検出。KR260+PYNQ-DPU編

本サイトはアフィリエイト広告を利用しています。
AI

360 Live Streaming の画像データをリアルタイムで物体検出してみました。

360°カメラはRICOH THETA を使っています。

KR260とPYNQ-DPUで物体検出して、GPIOやPWMを動作させた旨を紹介します。

 

スポンサーリンク

360 Live Streaming で物体検出。KR260+PYNQ-DPU編

360 Live Streaming の画像データをリアルタイムで物体検出してみました。

360°カメラはRICOH THETA を使っています。

まずはKR260のDPUを使って、物体検出(Yolo)を実施しています。

 

次にKR260とPYNQ-DPUで物体検出して、LED(GPIO)含めて動作させた旨を紹介します。

 

また人を物体検出させて、その向きにカーロボットを自動回転させています。

PWMとモータドライバ+DCモータで制御させました。

 

テスト動画は下記です。

 

 

 

プログラムやGstreamer、OpenCVの処理含めて説明していきます

 

PYNQのOpenCVにはGStreamerが入っていない

今回、物体検出(Yolo)をPYNQ-DPUで実施しています。

DPUを動かすには、PYNQの仮想環境で実行する必要がありました。

 

ただし、PYNQのOpenCVのビルド情報を見ると、GStreamerが含まれていませんでした。

360°ビデオストリームをリアルタイムで処理するにはGStreamerが必要です。

OpenCVのビルド情報を確認したプログラムは下記に置いています。

 https://github.com/iotengineer22/AMD-Pervasive-AI-Developer-Contest/blob/main/src/gst-test/gst-back-check.py

 

PYNQの仮想環境でのOpenCVのビルド情報が下記です。

GStreamer: NO

 

ただし、KR260のUbuntu環境にはGStreamerが入っていることを下記記事で確認しています。

360°カメラ(RICOH THETA)をGstreamer+OpenCVで処理してみた

360°カメラ(RICOH THETA)をGStreamer+OpenCVで処理してみた
KR260と360°カメラ(RICOH THETA)でリアルタイムの画像処理をしました。GStreamerでパイプラインを繋ぎ、OpenCVで処理しています。インストール方法・プログラム含めて紹介します。360°カメラ(RICOH THET...

 

またKria-PYNQインストール時にはopencv-pythonを入れていることが下記から分かります。

Kria-PYNQ/install.sh at main · Xilinx/Kria-PYNQ
PYNQ support and examples for Kria SOMs. Contribute to Xilinx/Kria-PYNQ development by creating an account on GitHub.

 

そのため、PYNQ仮想環境上で、一度opencv-pythonをアンインストールしました。

 

アンインストール後はKR260のUbuntuに切り替わり、GStreamerが使えるようになりました。

あまり良くない方法だと思いますが、テスト的にこれで進めていきます。

 

360 Live Streaming + 物体検出(DPU)のテスト

360 Live Streaming の画像データをリアルタイムで物体検出してみました。

360°カメラはRICOH THETA を使っています。プログラムは下記GitHubに置いています

 https://github.com/iotengineer22/AMD-Pervasive-AI-Developer-Contest/tree/main/src/gst-dpu-test

app_gst-real-360-yolov3_tf2.py

 

またこのプロジェクトではKR260のDPUを動かします。

「.bit」「.xclbin」「.hwh」のファイルが必要になります。

必要なファイルも上記リンク先に保存しています。

 

またテスト動画は下記です。

 

最初にPythonのプログラムを実行します。

 

2k(1920x960)の360°画像データを、480x480の4枚の画像に分割・カットしています。

通常の物体検出のYoloモデルだと非常に横長い360°画像を適用させても、物体検出できないためです。

前処理の画面のリサイズの箇所で画像が大きく崩れてしまいます。

 

4分割して、480x480にクロップしています。

各セクションで物体検出できることが分かります。

 

360°画像を分割して物体検出する

360°画像を分割して、物体検出しているプログラムの一部です。

画像分割して、単純にfor文で回しているだけです。詳細はプログラムを参考ください。

 

 

360 Live Streaming + 物体検出(DPU) + GPIO

KR260とPYNQ-DPUで物体検出して、LED(GPIO)含めて動作させた旨を紹介します。

DPUとGPIOを組み合わせた、FPGAのOverlayに関しては下記記事で説明しています。

DPUのIPを合成して、PYNQで動かしてみた

DPUのIPを合成して、PYNQで動かしてみた
VivadoとVitisを利用して、DPUのIPを合成したプロジェクトを作りました。KR260でPYNQ上で作成したDPUを使い、Vitis AIの物体検出(YOLOv3)をしています。その上でKR260にて、GPIO(PWM)も一緒に動か...

 

プログラムは先ほどと同じです。

GPIO動作を確認するため、PMODコネクタにデバッグ(LED・SW)基板を接続しています。

 

この基板の詳細に関しては、下記記GitHubで紹介しています。

 https://github.com/iotengineer22/PCB-KV260-PMOD-TEST

GitHub - iotengineer22/PCB-KV260-PMOD-TEST: PCB-KV260(KR260)-PMOD-INOUT
PCB-KV260(KR260)-PMOD-INOUT. Contribute to iotengineer22/PCB-KV260-PMOD-TEST development by creating an account on GitHu...

 

実行するプログラムは、基板接続する前のものと同じです。

テスト動画は下記です。

 

360°画像でボールを検出した領域を区分して、赤・緑・青色のLEDを点灯させます。

 

先ほどと同様に360°画像データを、480x480の4枚の画像に分割・カットしています。

 

section 1(Front side)でボールを検出すると、全LEDがONするようにしています。

 

section4(Left side)でボールを検出すると、青LEDがONするようにしています。

 

section3(Back side)でボールを検出すると、緑LEDがONするようにしています。

 

section2(Right side)でボールを検出すると、緑LEDがONするようにしています。

 

360 Live Streaming + 物体検出(DPU) + PWM

KR260とPYNQ-DPUで物体検出して、PWM含めて動作させた旨を紹介します。

テストプログラムは下記です。

 https://github.com/iotengineer22/AMD-Pervasive-AI-Developer-Contest/blob/main/src/gst-dpu-test/app_360-detect-robot-car.py

 

テスト動画は下記です。

 

360°カメラで人(の手)を検出すると、人の向きにモータを回転させます。

横90°の位置に人を検出すると、90°動くようにしています

また後180°の位置に人を検出すると、180°動くようにしています

 

 

 

 

まとめ

360 Live Streaming の画像データをリアルタイムで物体検出してみました。

KR260とPYNQ-DPUで物体検出して、GPIOやPWMも動作できています。

 

今回のKR260で実施した内容は、下記記事で紹介したテストの一部です。

AMD(Xilinx)のFPGAコンテストに参加した感想

AMD(Xilinx)のFPGAコンテストに参加した感想
AMD(Xilinx)とHackster(Avnet)が合同主催する、海外のコンテストに参加していました。AMD Pervasive AI Developer Contest の「Robotics AI」部門です。KR260というFPGAボ...

コメント