raspberryPiでの仮想ビデオデバイス(/dev/video)の作成
今回は仮想ビデオデバイスを作成して作成したビデオデバイス経由で動画データのやり取りを行っていきます。
動画データのやり取りに用いるのはgstreamerです。
gstreamerについてはこちらにまとめておりますのでぜひ!!
elsammit-beginnerblg.hatenablog.com
elsammit-beginnerblg.hatenablog.com
■環境
今回の環境はこちらです。
・デバイス:raspberry Pi4
・OS:
・カメラ:UCAM-C520FBBK
■事前準備
仮想ビデオデバイス作成にあたり、v4l2loopを用います。
v4l2loopをインストールするために、
sudo apt-get install v4l2loopback-dkms
を実行。
■仮想ビデオデバイス作成
仮想ビデオデバイスを作成するコマンドは、
sudo modprobe v4l2loopback
です。
こちらを実行してから、
ls /dev/video*
を実行するとビデオドライバが1つ増えていることが確認できます。
さらに、複数ビデオデバイスを作成する場合には、
sudo modprobe v4l2loopback devices=デバイス数
となります。
■仮想デバイスを用いた動画表示
では実際に仮想ビデオデバイス経由で動画の再生を行ってみます!!
まずは作成したビデオデバイスへの動画データ書き込みです。
仮想ビデオデバイスがvideo2の場合、コマンドはこちらのようになります。
gst-launch-1.0 -v v4l2src device=/dev/video0 ! videoconvert ! v4l2sink device=/dev/video2 sync=false
device=/dev/video2
を作成したビデオデバイスに置き換えればOKです。
では次に仮想ビデオデバイスからの読み出しです。
コマンドはこちらのようになります。
gst-launch-1.0 -v v4l2src device=/dev/video2 ! videoconvert ! autovideosink
先ほどの動画書き込み側のコマンドを実行した後に、読み出し用のコマンドを実行すれば、
カメラからのキャプチャ動画が表示されるかと思います。
■go言語で仮想ビデオデバイスから読み出してみる
次にgo言語を用いて、仮想ビデオデバイスから動画データを読み出し、表示をしてみます。
コードはこちらです。
package main import ( "gocv.io/x/gocv" "image" ) func main() { webcam, _ := gocv.OpenVideoCapture("v4l2src device=/dev/video2 ! videoconvert ! appsink") window := gocv.NewWindow("hello") img := gocv.NewMat() for { webcam.Read(&img) gocv.Resize(img, &img, image.Point{640, 480}, 0, 0, gocv.InterpolationDefault) window.IMShow(img) window.WaitKey(1) } }
gocvを用いて、仮想ビデオデバイスから画像データを読み出し、
IMShowで表示しております。
gocv.OpenVideoCapture("v4l2src device=/dev/video2 ! videoconvert ! appsink")