Raspberry Piで魚眼カメラの映像をVRでライブストリーミングしてみた
Raspberry Pi4を使用して、Picam360の魚眼映像をVR映像としてライブストリーミングしてみました。今回はその手順をご紹介します。
実際の映像
Raspberry Piからスマホにリアルタイムストリーミングして、画面をキャプチャしたものです。(キャリブレーションをちゃんとやっていないので若干歪んでます)
どうでしょうか?ビューワーも映っている状態で撮影したので実際の使用感は伝わるんじゃないかと思います。
今回のストリーミングのビットレート設定は1.5MBpsでした。Raspberry PiはJetson Nanoに比べて性能が劣るので解像度、フレームレートが低めですが(なのでJetson Nanoを使う方がおすすめです)、用途によっては使えると思います。
準備するもの
Raspberry Pi
この記事ではRaspberry Pi4を使用しています。Raspberry Pi3でも動くと思いますが未確認です。
Picam360
PICAM360-4KHDR, PICAM360-CAMPT8MP, PICAM360-CAMTWDRのいずれでもOK。Raspberry Piの処理性能故に入力画素数が落ちるが、実際に見ると画質的にはやはりPICAM360-4KHDRが綺麗です。
Raspberry PiにPicam360ソフトウェアをインストールする
Raspberry Pi
この記事ではRaspberry Pi4を使用しています。Raspberry Pi3でも動くと思いますが未確認です。
Picam360
PICAM360-4KHDR, PICAM360-CAMPT8MP, PICAM360-CAMTWDRのいずれでもOK。Raspberry Piの処理性能故に入力画素数が落ちるが、実際に見ると画質的にはやはりPICAM360-4KHDRが綺麗です。
基本的なセットアップの流れは「Jetson NanoでPicam360を始めよう」の手順と同じです。同じ部分はそちらの記事を参照する形で記載します。
ターミナルを使って必要なソフトウェアをインストールしていきます。コマンドを実行したら正常に完了しているか表示されているログを見て確認しましょう。エラーが出ている場合はエラーメッセージをウェブ検索すると多くの場合解決方法を見つけることができます。
まずPicam360サーバーサイドソフトウェア(PServer)に必要なソフトウェアをインストールします。
$ sudo apt-get install cmake
$ sudo apt-get install libtbb-dev
$ sudo apt-get install gstreamer1.0-tools
$ curl --location git.io/nodebrew | perl - setup
上記の最後にインストールしたnodebrewにパスを通します。nanoエディタで.bashrcを開きます。
$ cd ~
$ nano .bashrc
ファイルの末尾に下記をペーストします。
export PATH=$HOME/.nodebrew/current/bin:$PATH
ctrl+o, ctrl+xでファイルを保存して閉じます。
.bashrcを再読み込み。
$ source ~/.bashrc
nodeとnpmをインストール。
$ nodebrew install v14.17.1
$ nodebrew use v14.17.1
PServerをインストール。
$ npm install -g node-pserver@0.1.5
以上でraspberry pi上でのソフトウェアのインストールは完了です。
設定ファイルの設置
ソフトウェアで使用する設定ファイルを配置します。
まず設定ファイルを設置するフォルダを作成します。
$ cd ~
$ mkdir pserver
以下は設定ファイルの内容です。
{
"wrtc_enabled" : false,
"wrtc_key" : "your_key",
"stream_def" : "default",
"stream_defs" : {
# "default" : "pipe name=capture t=I420 s=1600x1200 ! pgl_remapper name=remapper deg_offset=\"-90,0,0\" w=512 h=512 ! pipe name=encoder t=H264"
# "default" : "pipe name=capture t=I420 s=1280x960 ! pgl_remapper name=remapper deg_offset=\"-90,0,0\" w=512 h=512 ! pipe name=encoder t=H264"
"default" : "pipe name=capture t=I420 s=2048x1536 ! pgl_remapper name=remapper deg_offset=\"-90,0,0\" w=512 h=512 ! pipe name=encoder t=H264"
# "default" : "pipe name=capture t=I420 s=2048x2048 ! pgl_remapper name=remapper deg_offset=\"-90,0,0\" w=512 h=512 ! pipe name=encoder t=H264"
# "default" : "pipe name=capture t=I420 s=640x480 ! pgl_remapper name=remapper deg_offset=\"-90,0,0\" w=512 h=512 ! pgl_renderer name=renderer"
},
"stream_params" : {
"default" : {
"capture.meta" : "<meta maptype=\"FISH\" lens_params=\"file:///home/pi/pserver/lens_params.json\" />",
# "capture.def" : "raspivid -w @OWIDTH@ -h @OHEIGHT@ -fps 30 -t 0 -n -r -",
# "capture.def" : "gst-launch-1.0 -q v4l2src device=/dev/video0 ! image/jpeg,width=@OWIDTH@,height=@OHEIGHT@,framerate=15/1 ! v4l2jpegdec ! fdsink",
# "capture.def" : "ffmpeg -f video4linux2 -s @OWIDTH@x@OHEIGHT@ -r 15 -i \"/dev/video0\" -f rawvideo -pix_fmt yuv420p -",
"capture.def" : "ffmpeg -f video4linux2 -s @OWIDTH@x@OHEIGHT@ -r 15 -i \"/dev/video0\" -pix_fmt yuv420p -f rawvideo -",
# "encoder.def" : "gst-launch-1.0 -q fdsrc ! rawvideoparse width=@IWIDTH@ height=@IHEIGHT@ framerate=1 format=rgba ! videoconvert ! video/x-raw,format=I420 ! v4l2h264enc ! fdsink"
"encoder.def" : "gst-launch-1.0 -q fdsrc ! rawvideoparse width=@IWIDTH@ height=@IHEIGHT@ framerate=1 format=rgba ! videoconvert ! video/x-raw,format=I420 ! omxh264enc target-bitrate=1500000 control-rate=variable ! fdsink"
# "encoder.def" : "ffmpeg -loglevel quiet -r 15 -f rawvideo -s @IWIDTH@x@IHEIGHT@ -pix_fmt rgb0 -i - -pix_fmt yuv420p -f rawvideo -c:v h264_omx -g 1 -"
# "encoder.def" : "ffmpeg -f rawvideo -s @IWIDTH@x@IHEIGHT@ -pix_fmt rgba -i - -pix_fmt yuv420p -f rawvideo -c:v libx264 -"
}
},
"debug" : 0,
"license" : {"app_key" : "none"}
}
nanoエディタでファイルを作成し上記内容をコピー&ペーストします。
$ cd ~/pserver
$ nano confing.json
ctrl+o, ctrl+xでファイルを保存して閉じます。
インターネット経由で接続する場合:
上記で作成したconfig.jsonを開いて、WebRTCを有効にするフラグをONにします。
# 入力例
"wrtc_enabled" : true,
"wrtc_key" : "0dcad23c27a5407db4eacfb5dfb4a676"
wrtc_enableをtrueに変更します。
wrtc_keyに任意のキーを入力します。WebRTCを有効にした場合、このキーによってカメラに接続できます。キーを知っていれば接続できるため、他人と重複しない十分に長いキーを指定してください。wrtc_enableがtrueでもローカルネットワーク経由での接続は可能ですが、インターネット経由で接続する使い方をしない場合はfalseにしておきましょう。
キャリブレーション
キャリブレーション機能にバグがあり現在修正中です。暫定的にキャリブレーションファイルを設置すれば利用できるので、その手順を実施します。キャリブレーション機能の修正が完了次第この記事も更新します。
暫定的にキャリブレーションファイルを設置:
キャリブレーションファイルの中身。
{"k":[0.050062,0.023326,-0.019822,0.002563],"f":[0.190850,0.255342],"c":[0.485990,0.557938],"maxfov":220}
nanoエディタでファイルを作成し上記内容をコピー&ペーストします。
$ cd ~/pserver
$ nano lens_params.json
ctrl+o, ctrl+xでファイルを保存して閉じます。
設定ファイル内にあるlens_paramsファイルのパスをフルパスに書き換える必要があるので、以下をコマンドで現在のディレクトリのパスを調べます。
$ pwd
ファイルを開いてstream_params内のcapture.meta要素のlens_paramsをフルパスに変更します。
nano config.json # 設定ファイルを開く
# 変更前:
lens_params=\”file://lens_params.json\”
# 変更後:
lens_params=\”file:///home/pi/pserver/lens_params.json\”
設定ファイルの管理ディレクトの場所やキャリブレーションファイルの名称を変更している場合は、実際の物に合わせてください。
変更したら保存して閉じます。
これで~/pserverディレクトリにはconfig.jsonとlens_params.jsonの2つがあるはずです。
$ ls ~/pserver
サーバーソフトウェアの起動
PServerを起動します。
モニターを接続している場合:
$ pserver -c ~/pserver/config.json
Headless(モニター無し)の場合:
Xvfbをインストールします。これは1度で大丈夫です。
$ sudo apt-get install xvfb
ターミナルを2つ開きます。
一方でxvfbを起動します。
$ Xvfb :1 -screen 0 1024x768x24
もう一方でPServerを起動します。
$ export DISPLAY=:1 && pserver -c ~/pserver/config.json
以上でサーバーソフトウェアが起動し、ビュワーから接続できる状態になります。
PServerを終了する場合は、ターミナルでctrl+cを押します。
Let’s リアルタイムストリーミング
ビューワーアプリのインストールと接続は「Jetson NanoでPicam360を始めよう – 5: ビューワーアプリのインストール」と「Jetson NanoでPicam360を始めよう – 6: 接続する」の手順と同じです。これでリアルタイムストリーミングできます!
Author And Source
この問題について(Raspberry Piで魚眼カメラの映像をVRでライブストリーミングしてみた), 我々は、より多くの情報をここで見つけました https://qiita.com/GakuAtPicam360DeveloperCommunity/items/5c6932a0785f00578b63著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .