ラズパイと360度カメラを使ってPythonからライブストリーミングをしてみました。
また360度の物体検出もテストしてみました。
使用したカメラからプログラム含めて紹介します。
ラズパイと360度カメラで物体検出とライブストリーミング
ラズパイと360度カメラを使ってPythonからライブストリーミングをしてみました。
リアルタイムで360°の画像を取得できました。
また360度の物体検出(YOLOX)のテストも実施してみました。
ラズベリーパイと360°カメラで物体検出が出来ています。
テスト動画は下記となります。
使用した360°カメラからプログラム含めて紹介します。
テスト環境
ラズベリーパイ4を使用しています。OSは64bitです。
使用した360°カメラはRICOH THETA Vです。
USB2.0接続で少し古いタイプですが、色々なAPI・ライブラリが公開されています。
ラズパイでRICOHのAPIをテストした記事が下記となります。
またRICOH THETA V の2K/4Kライブストリーミングを解析した記事が下記となります。
RICOHのTHETA Xではなく、THETA Vを購入した理由
インストール
ラズパイを立ち上げてインストールしたものは下記です。
ラズパイでも強引にpipを使えるようにしています。
pip.confに「break-system-packages = true」を追記しています
1 2 3 4 5 6 7 8 |
sudo apt-get update sudo apt-get install -y libatlas-base-dev sudo apt-get install -y python3-matplotlib python3-numpy python3-opencv sudo apt-get install vim sudo vim /etc/pip.conf #add: break-system-packages = true sudo pip3 install -U pip sudo pip3 install onnxruntime |
上記のインストールだけでも、写真でのYOLOXの物体検出のテストが可能です。
下記記事で紹介しています。リンク先はこちらです。
USBカメラからライブストリーミングできるようにライブラリをインストールします。
GStreamer・libuvc・v4l2loopback-dkmsなどが必要となります。
1 2 3 4 |
cd ~ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio sudo apt install v4l2loopback-dkms sudo apt-get install libusb-1.0-0-dev |
1 2 3 4 5 6 7 8 |
git clone https://github.com/nickel110/libuvc.git cd libuvc/ mkdir build cd build/ cmake .. sudo apt-get install cmake cmake .. make && sudo make install |
360°カメラのRICOH THETAに必要なライブラリも入れます。
1 2 3 4 5 6 7 8 |
cd ~ git clone https://github.com/nickel110/gstthetauvc.git cd gstthetauvc/thetauvc/ make ls sudo find / -type d -name 'gstreamer-1.0' sudo cp gstthetauvc.so /usr/lib/aarch64-linux-gnu/gstreamer-1.0 sudo /sbin/ldconfig -v |
GStreamerのプラグインのパスも定義しておきます。
1 2 3 4 5 6 |
echo $GST_PLUGIN_PATH sudo vim ~/.bashrc #add: export GST_PLUGIN_PATH=/usr/lib/aarch64-linux-gnu/gstreamer-1.0 source ~/.bashrc echo $GST_PLUGIN_PATH gst-inspect-1.0 thetauvcsrc |
Pythonのテストプログラム
Pythonのテストプログラムは下記GitHubに置いてあります。
各テストで使用したプログラムは下記です。
Webカメラの物体検出テスト…app_gst-yolox-onnx-normal-camera.py
360°のライブストリーミング…gst-test-360-2divide.py
360°の物体検出テスト…app_gst-yolox-onnx-360-camera.py
YOLOXのONNXモデル
YOLOX公式から展開されているONNXのモデル(YOLOX-Nano)を使用しています。
https://yolox.readthedocs.io/en/latest/demo/onnx_readme.html
wgetならば下記コマンドで入手可能です。
1 |
wget https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_nano.onnx |
Webカメラの物体検出(YOLOX)の事前テスト
360°カメラでのテストの前に、よくある通常のWebカメラでも事前(プレ)テストしてみます。
使用するWebカメラは「logicool C270n」です。
非常に安いWebカメラですが、(スペック上では)640x480で30fpsの速度があります。
テストには十分なカメラです。
Webカメラでのプレテスト動画は下記です。
ラズベリーパイとWebカメラはUSBで接続されています。
GStreamerでパイプラインを定義して、データを取得します。
そのデータをもとに物体検出(YOLOX)して、OpenCVで表示させています。
オレンジボールや人の指が問題なく、検出できていることが分かります。
ラズパイと360°カメラでライブストリーミング
ラズパイと360°カメラを使ってライブストリーミングをしてみます。
360°カメラはRICOH THETA Vです。テスト動画は下記となります。
既にラズパイは起動済です。
右上には実際のラズパイと360°カメラ付近のTopviewの動画を置いています。
プログラムを少し確認していきます。
GStreamerを使って、360°カメラからデータを取得しています。
プログラムを実行します。360°ライブストリーミングの前画面と後画面が表示されています。
OpenCVでキャプチャして、前と後で2画面表示するプログラムです。
カメラ周辺にはペットボトルを置いています。
カメラの前にボールを投げるテストをしています。
しっかりボールの動きが確認できます。360°のライブストリーミングをできています。
ラズパイと360°カメラで物体検出(YOLOX)
ラズパイと360°カメラを使って物体検出(YOLOX)をしてみます。
テスト動画は下記となります。
既にラズパイは起動済です。
右上には実際のラズパイと360°カメラ付近のTopviewの動画を置いています。
ONNX Rumtimeを使用して、YOLOXを動かしています。
周辺のペットボトル、バッテリー、また投げたボール含めて360°物体検出が出来ています。
まとめ
ラズパイと360度カメラを使ってPythonからライブストリーミングをしてみました。
また360度の物体検出もテストしてみました。
使用したカメラからプログラム含めて紹介しました。
ラズパイではなく、FPGA(KR260)でも同様な360°物体検出をコンテストで実施しました。
よろしければそちらも参照お願いします。
コメント