USB接続のWebカメラからDPUとYOLOXで物体検出してみる

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

普通のUSB接続のWebカメラで、KR260を使って物体検出してみました。

FPGAのDPUをYOLOXの推論で使うことで、高速にリアルタイムで検出できています。

プログラムからテストの様子含めて紹介します。

 

スポンサーリンク

USB接続のWebカメラからDPUとYOLOXで物体検出してみる

普通のUSB接続のWebカメラで、KR260を使って物体検出してみました。

FPGAのDPUをYOLOXの推論で使うことで、高速にリアルタイムで検出できています。

テストの動画が下記となります。

 

普通にWebカメラの速度としては、640x480の25fpsが確認できています。

 

YOLOXを入れても、リアルタイムでの17fpsの速度を確認できました。

(物体検出と一緒に、GPIOも一緒に動作させています。)

CPUではなく、DPUを使用してるため高速に物体検出できています。

 

プログラムからテストの様子含めて紹介します。

 

GStreamer・libuvc・v4l2loopback-dkmsのインストール

USBカメラからライブストリーミングできるようにライブラリをインストールします。

GStreamer・libuvc・v4l2loopback-dkmsなどが必要となります。

下記記事でインストール方法を紹介しています。

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

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

 

またPYNQ環境でもGStreamerを使うための環境を用意しています。

(PYNQを利用してGPIOからチェック用のLEDを駆動させているためです)

下記記事で紹介しています。

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

360 Live Streaming で物体検出。KR260+PYNQ-DPU編
360 Live Streaming の画像データをリアルタイムで物体検出してみました。360°カメラはRICOH THETA を使っています。KR260とPYNQ-DPUで物体検出して、GPIOやPWMを動作させた旨を紹介します。360 ...

 

使用するWebカメラ(logicool C270n)

使用するWebカメラは「logicool C270n」です。

非常に安いWebカメラですが、(スペック上では)640x480で30fpsの速度があります。

テストには十分なカメラです。

 

KR260にWebカメラを接続すると、deviceを確認出来ます。

 

v4l2-ctlで調べるとvideo0で認識できています。

 

またカメラがどのフォーマットに対応しているかも確認できます。

実際にWebカメラの情報を見てみると、下記となります。

 

WebカメラでのGStremaerのテストプログラム

プログラムに関しては下記GitHubのリポジストリに保存しています。

AMD-Pervasive-AI-Developer-Contest/src/usb-camera at main · iotengineer22/AMD-Pervasive-AI-Developer-Contest
This repository present solution for the AMD Pervasive AI Developer Contest. - iotengineer22/AMD-Pervasive-AI-Developer-...

 

下記のpipelineでUSB経由でライブストリーミングをしています。

640x480の30fpsで設定しています。

 

ここからはテスト動画のデモと同じです。

最初にライブストリーミングだけするプログラム(usb-camera-test.py)をテストします。

KR260上で無事ライブストリーミングをできています。

 

プログラム上でカウントすると、実際は約25fpsほどでした。

 

YOLOXとDPUでライブストリーミングの物体検出

Webカメラからのライブストリーミングを使って物体検出を行います。

KR260のDPUとYOLOXを使用しています。(app_gst-yolox-real-normal-camera-gpio.py)

また今回は黄色のボール(Sports ball)を検出すると、LED(GPIO)をONするようにしました。

 

GPIOに関してはPL(FPGA)のIPから制御しています。

DPUとFPGAのファイル(dpu.bit, dpu.hwh, dpu.xclbin)も同じリポジストリに保存しています。

AMD-Pervasive-AI-Developer-Contest/src/usb-camera at main · iotengineer22/AMD-Pervasive-AI-Developer-Contest
This repository present solution for the AMD Pervasive AI Developer Contest. - iotengineer22/AMD-Pervasive-AI-Developer-...

 

DPUとGPIO含めた合成方法に関しては下記記事をご参照ください。

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

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

 

プログラムを起動すると、物体検出が追加されたWebカメラの画像が確認できます。

 

実際にYOLOXを加えたライブストリーミングで17fpsほど出ています。

CPUだと数fps程度ですので、DPUによる高速化がしっかりできていることが分かります。

CPUとDPUを比較した内容は下記記事で紹介しています。

 

黄色のボール(Sports ball)を検出すると、LED(GPIO)がONしていることが分かります。

PMODコネクタ経由のGPIOから動作できています。

 

ROS2でMarkerとImageの出力テスト

Webカメラからのデータを利用して、ROS2へMarkerとImageの出力もテストします。

ROS2に必要なライブラリのインストールは下記記事を参考ください。

ROS2で360°カメラの画像処理・物体検出をしてみた

ROS2で360°カメラの画像処理・物体検出をしてみた
KR260でROS2のRviz2を使って、360°カメラ画像を処理してみました。360°Live Streamingのデータからリアルタイムで物体検出までしています。プログラム・テスト動画含めて紹介していきます。ROS2で360°カメラの画...

 

ROS2を可視化するためにrviz2を立ち上げておきます。

 

rviz2の準備が終えたら、プログラム(gst-yolox-ros2-normal-camera.py)を起動します。

 

テスト動画としては下記となります。

 

WebカメラからYOLOXで検出した情報から、ROS2への出力も約17fps程度で実行されています。

問題なくROS2のマーカーと画像としてPublish出来ています。

 

まとめ

普通のUSB接続のWebカメラで、KR260を使って物体検出してみました。

FPGAのDPUをYOLOXの推論で使うことで、高速にリアルタイムで検出できています。

 

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

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

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

コメント