普通の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で処理してみた
![](https://misoji-engineer.com/wp-content/uploads/2024/04/360-4divide-160x90.png)
またPYNQ環境でもGStreamerを使うための環境を用意しています。
(PYNQを利用してGPIOからチェック用のLEDを駆動させているためです)
下記記事で紹介しています。
360 Live Streaming で物体検出。KR260+PYNQ-DPU編
![](https://misoji-engineer.com/wp-content/uploads/2024/04/プレゼンテーション1.pptx-5-160x90.png)
使用するWebカメラ(logicool C270n)
使用するWebカメラは「logicool C270n」です。
非常に安いWebカメラですが、(スペック上では)640x480で30fpsの速度があります。
テストには十分なカメラです。
KR260にWebカメラを接続すると、deviceを確認出来ます。
1 2 |
ubuntu@kria:~$ sudo dmesg |grep usb [ 8.850427] input: UVC Camera (046d:0825) as /devices/platform/axi/ff9d0000.usb/fe200000.usb/xhci-hcd.1.auto/usb1/1-1/1-1.2/1-1.2:1.0/input/input1 |
v4l2-ctlで調べるとvideo0で認識できています。
1 2 3 4 5 |
root@kria:/home/ubuntu# v4l2-ctl --list-device UVC Camera (046d:0825) (usb-xhci-hcd.1.auto-1.2): /dev/video0 /dev/video1 /dev/media0 |
またカメラがどのフォーマットに対応しているかも確認できます。
実際にWebカメラの情報を見てみると、下記となります。
1 2 3 4 5 6 7 8 9 10 11 12 |
root@kria:/home/ubuntu# v4l2-ctl -d /dev/video0 --list-formats-ext ioctl: VIDIOC_ENUM_FMT Type: Video Capture [0]: 'YUYV' (YUYV 4:2:2) Size: Discrete 640x480 Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps) |
WebカメラでのGStremaerのテストプログラム
プログラムに関しては下記GitHubのリポジストリに保存しています。
下記のpipelineでUSB経由でライブストリーミングをしています。
640x480の30fpsで設定しています。
1 2 |
# Definition of the GStreamer pipeline (software) pipeline = "v4l2src device=/dev/video0 ! video/x-raw, width=640, height=480, framerate=30/1 ! videoconvert ! appsink" |
ここからはテスト動画のデモと同じです。
最初にライブストリーミングだけするプログラム(usb-camera-test.py)をテストします。
KR260上で無事ライブストリーミングをできています。
1 2 3 4 |
sudo su cd /home/ubuntu/AMD-Pervasive-AI-Developer-Contest/src/usb-camera/ source /etc/profile.d/pynq_venv.sh python3 usb-camera-test.py |
プログラム上でカウントすると、実際は約25fpsほどでした。
YOLOXとDPUでライブストリーミングの物体検出
Webカメラからのライブストリーミングを使って物体検出を行います。
KR260のDPUとYOLOXを使用しています。(app_gst-yolox-real-normal-camera-gpio.py)
また今回は黄色のボール(Sports ball)を検出すると、LED(GPIO)をONするようにしました。
1 |
python3 app_gst-yolox-real-normal-camera-gpio.py |
GPIOに関してはPL(FPGA)のIPから制御しています。
DPUとFPGAのファイル(dpu.bit, dpu.hwh, dpu.xclbin)も同じリポジストリに保存しています。
DPUとGPIO含めた合成方法に関しては下記記事をご参照ください。
![](https://misoji-engineer.com/wp-content/uploads/2024/04/my-dpu1-160x90.png)
プログラムを起動すると、物体検出が追加されたWebカメラの画像が確認できます。
実際にYOLOXを加えたライブストリーミングで17fpsほど出ています。
CPUだと数fps程度ですので、DPUによる高速化がしっかりできていることが分かります。
CPUとDPUを比較した内容は下記記事で紹介しています。
黄色のボール(Sports ball)を検出すると、LED(GPIO)がONしていることが分かります。
PMODコネクタ経由のGPIOから動作できています。
ROS2でMarkerとImageの出力テスト
Webカメラからのデータを利用して、ROS2へMarkerとImageの出力もテストします。
ROS2に必要なライブラリのインストールは下記記事を参考ください。
![](https://misoji-engineer.com/wp-content/uploads/2024/05/ros2-yolo-rviz2_2-160x90.png)
ROS2を可視化するためにrviz2を立ち上げておきます。
1 2 3 |
sudo su source /opt/ros/humble/setup.bash rviz2 |
rviz2の準備が終えたら、プログラム(gst-yolox-ros2-normal-camera.py)を起動します。
1 2 3 4 5 |
sudo su source /etc/profile.d/pynq_venv.sh source /opt/ros/humble/setup.bash cd /home/ubuntu/AMD-Pervasive-AI-Developer-Contest/src/usb-camera/ python3 gst-yolox-ros2-normal-camera.py |
テスト動画としては下記となります。
WebカメラからYOLOXで検出した情報から、ROS2への出力も約17fps程度で実行されています。
問題なくROS2のマーカーと画像としてPublish出来ています。
まとめ
普通のUSB接続のWebカメラで、KR260を使って物体検出してみました。
FPGAのDPUをYOLOXの推論で使うことで、高速にリアルタイムで検出できています。
今回のKR260で実施した内容は、下記記事で紹介したテストの一部です。
![](https://misoji-engineer.com/wp-content/uploads/2024/07/AMD_AI_contest-12-160x90.png)
コメント