LoginSignup
5
6

More than 1 year has passed since last update.

Raspberry Pi4 + RICOH THETA V でライブストリーミング

Posted at

Raspberry Pi4 + RICOH THETA V

THETA V発売当初、THETA Vを使ってライブストリーミングをしようと思うと、Linuxではドライバが対応しておらず、Windowsで接続するしかありませんでした。
しかし、いつの間にかRICOH公式からLinux向けのライブストリーミング用ライブラリが公開され、Linuxでもライブストリーミングが可能になっておりました。
参考:https://dc.watch.impress.co.jp/docs/news/1267757.html

そこで、どこのご家庭でも転がっているラズパイと、THETA Vでライブストリーミングを試してみました。

環境

  • Raspberry Pi4 4GB
    • Raspberry Pi OS 32bit
  • RICOH THETA V

今回は、THETA Vで試しましたがTHETA Z1でも同様のことができるかと思います。

手順

まずは必要なパッケージ類をインストールしていきます。
※ まっさらなRaspberry Pi OSの状態からスタートしたつもりですが、過不足あるかもしれません。。

必要なライブラリをaptでインストールする

この後、OpenCVをビルドするのでそのために必要なライブラリも含まれています。

$ sudo apt install -y build-essential cmake libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libusb-1.0 libjpeg-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev v4l2loopback-dkms

OpenCVをビルドする

後段のlibuvc-thetaをビルドする際に必要になるので、OpenCVをビルド・インストールします。

まず、ソースをダウンロードし解凍します。
本稿執筆時のOpenCV3系の最新バージョンは3.4.14だったので、そのバージョンのソースをダウンロードします。
※ OpenCV4系もリリースされていますが、4系では後段のビルドに失敗しました。対応策はあると思いますが、確認していないためOpenCV3.xを使用することにします。

$ wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.14.zip
$ unzip opencv.zip

続いてビルドをします。

$ cd opencv-3.4.14
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
$ make -j4

ビルドには時間がかかるので気長に待ちます。
ビルドが完了したらインストールします。

$ sudo make install

libuvc-theta をビルド・インストールする

ようやく、今回の本丸libuvc-thetaをビルド・インストールします。
https://github.com/ricohapi/libuvc-theta

適当なディレクトリに移動し、libuvc-thetaのリポジトリをクローンします。

$ git clone https://github.com/ricohapi/libuvc-theta

そしてビルド・インストールします。

$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install

libuvc-theta-sample を動かす

ようやく環境が整ったのでサンプルを動かしていきます。

まず、以下のリポジトリをクローンします。
https://github.com/codetricity/libuvc-theta-sample

$ git clone https://github.com/codetricity/libuvc-theta-sample

このリポジトリはRICOH本家のlibuvc-theta-sampleからforkして一部改変されているものです。
こちらのリポジトリではサンプル実行時の引数に--formatが追加されており、4K or 2Kを指定することができます。
ラズパイ4はHWデコーダが4K対応しておらず、2Kでないと実用的に動かせないため、引数に--formatに2Kを指定し実行します。
(Jetsonなどのハードウェアを使用すれば4Kでのライブストリーミングも可能と思います。)

$ cd gst
$ make
$ ./gst_viewer --format 2K

gst_viewerのウインドウが起動し、THETAで撮影されたEquirectangularの画像が表示されます。

続いてlibuvc-theta-sampleリポジトリに含まれているgst_loopbackを使用してみます。

まず、v4l2loopback をロードします。

$ sudo modprobe v4l2loopback

その後、Dummy video deviceのIDを確認します。

$ v4l2-ctl --list-devices
bcm2835-codec-decode (platform:bcm2835-codec):
    /dev/video10
    /dev/video11
    /dev/video12

bcm2835-isp (platform:bcm2835-isp):
    /dev/video13
    /dev/video14
    /dev/video15
    /dev/video16

Dummy video device (0x0000) (platform:v4l2loopback-000):
    /dev/video0

この場合、Dummy video deviceは/dev/video0なので、デバイスのインデックスとして0を使用します。

次に、gst_viewer.cのソースを変更します。
deviceのインデックスがハードコードされている部分を、先程確認したインデックスに書き換えます。

if (strcmp(cmd_name, "gst_loopback") == 0)
    pipe_proc = "decodebin ! autovideoconvert ! 
                "video/x-raw,format=I420 ! identity drop-allocation=true !"
-               "v4l2sink device=/dev/video2 qos=false sync=false";
+               "v4l2sink device=/dev/video0 qos=false sync=false";

再ビルドし、gst_loopbackを実行します。

$ make
$ ./gst_loopback --format 2K

正常に動作した場合、start, hit any key to stopと標準出力に表示されます。
これでv4l2デバイスとしてTHETAのライブストリーミング映像を取り扱える状態になりました。

試しにOpenCVのVideoCaptureでキャプチャしてみます。

capture_test.py
import cv2


def main():
    # VideoCaptureの引数にはdeviceのインデックスを指定
    cap = cv2.VideoCapture(0)
    if cap.isOpened() is False:
        print("cannot open video capture.")
        return

    cv2.namedWindow("capture", cv2.WINDOW_NORMAL)
    print("press any key to stop")
    while(True):
        ret, frame = cap.read()
        cv2.imshow("capture", frame)
        key = cv2.waitKey(1)
        if key is not -1:
            break
    return


if __name__ == "__main__":
    main()

gst_viewerで表示した際よりも若干遅延がありますが、v4l2デバイスとしてVideoCaptureでキャプチャした画像が表示されます。
ここまでくれば、後は煮るなり焼くなり好きにすることができます。エンジョイ!

まとめ

公開されているライブラリを使用してLinux(Raspberry Pi4)上でTHETA Vのライブストリーミング映像をキャプチャすることができました。
Linuxでキャプチャすることができるようになり、THETAをロボットに乗せてライブストリーミングするなどの用途が広がりそうです!

5
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6