Raspberry Pi B+でinsta360 airの動画をOpenCVで処理する
出田 守です。
昔購入したRaspberry Pi B+が寂しそうにこちらを見ていたので、何かに使ってあげることにしました。
まず、ラズパイ自身の視点になって今どういう気持ちなのか確かめることにしました。
事前準備
- 最新のRaspbianをインストール(この時はRelease date: 2020-02-13のものが最新でした)
- OpenCV>=3.1.0をインストール
- mjpeg-streamerのインストール
OpenCVはなぜバージョンが3かというとこの後、使用するmjpg-streamerというツールでinput_opencvというプラグインを使おうと思っています。このプラグインがバージョン3しか対応してなさそうだったためです。ちなみに、最初pip3を使ってopencv-pythonをインストールしたのですが、mjpg-streamerでopencvを見つけてくれなかったので、ソースからビルドしました。以下のリンクなどを参考にしてビルドしました。めちゃめちゃ時間かかりました。
mjpeg-streamerは色んな入出力用のプラグインを組み合わせてjpegフレームを処理してくれるツールです。事前準備を済ませた上で、インストールはGitHubを見れば簡単にできました。
参考:
OpenCVで処理してからストリーミング
input_opencvプラグインを使って、撮影した動画をOpenCVに入力・処理してから、output_httpプラグインを使って出力された動画をブラウザで見てみようと思います。
./mjpg_streamer -i "./input_opencv.so --filter ./cvfilter_py.so --fargs ./plugins/input_opencv/filters/cvfilter_py/example_filter.py -f 10 -r 320x240 -d /dev/video0" -o "./output_http.so -w ./www -p 8080"
input_opencvプラグインの説明ではopencv3.1.0でしかテストしていませんと書いてあります。私は試しに3.4.9をインストールして試しましたが、サンプルを動かした限り大丈夫そうです。
実行コマンドはちょっと長いですが、簡単に各オプションは以下のような意味です。
オプション | 説明 |
---|---|
-i | インプットプラグインを指定 |
--filter | input_opencvを指定した場合に、フィルターファイルがPythonの場合はcvfilter_py.soを、C++の場合はcvfilter_cpp.soを指定 |
--fargs | フィルターファイルを指定 |
-f | フレームレート |
-r | 解像度 |
-d | カメラのデバイスファイル |
-o | アウトプットプラグインを指定 |
-w | 表示用ソースが入ったフォルダを指定 |
-p | ポート番号 |
実行後無事起動すれば、LAN内でブラウザから魚眼2つを見ることができます。
これだけでは、ラズパイの気持ちが分からないので、次回はスティッチングという処理をして見やすくしようと思います。