ブログ

Armadillo-640:USBカメラの画像をmjpg-streamerを使って、ネットワーク経由でPCのWebブラウザで見る方法(MJPEG入力編)

at_kazutaka.bito
2019年7月1日 10時14分

Armadillo-640:USBカメラの画像をmjpg-streamerを使って、ネットワーク経由でPCのWebブラウザで見る方法は、
USBカメラから、画像をYUV入力してMJPEGにエンコードしているため、CPUの負荷が高くなっています。
ここでは、MJPEG出力可能なUSBカメラから、画像をMJPEG入力する方法を確認してみました。

使用したMJPEG出力可能なUSBカメラ)
BSWHD06M

参考にしたサイト)
raspbian にて mjpg-streamer で mjpeg を使う

1.USB Video Class(UVC)を有効にします。

ここでは、USB Video Class(UVC)対応のUSBカメラを使用します。
Armadillo-640:USB Video Class(UVC)を有効にする
を参考に、USB Video Class(UVC)を有効にしたカーネルイメージをArmadillo-640に書き込みます。

以降の手順は、Armadillo-640で行います。

2.必要なパッケージをインストールします。

Armadillo-640をインターネットに接続可能なネットワークに接続します。
apt-getコマンドでupdateとupgradeおよび必要なパッケージをインストールします。

root@armadillo:~# apt-get update & apt-get upgrade
root@armadillo:~# apt-get install build-essential
root@armadillo:~# apt-get install libjpeg-dev
root@armadillo:~# apt-get install imagemagick
root@armadillo:~# apt-get install subversion
root@armadillo:~# apt-get install libv4l-dev
root@armadillo:~# apt-get install checkinstall

補足)インストール中に"Do you want to continue? [Y/n]"と聞かれたら、"y"を入力します。

3.mjpg-streamerのソースコードをダウンロードします。

svnコマンドでリポジトリからmjpg-streamerのソースをチェックアウトします。

root@armadillo:~# svn co http://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer


4.mjpg-streamerを改造します。

root@armadillo:~# cd mjpg-streamer
root@armadillo:~/mjpg-streamer# vi scripts/make_deb.sh

で、make_deb.shをエディタで開いて

make DESTDIR=/usr install

の行を

make USE_LIBV4L2=true DESTDIR=/usr install

に変更します。

添付のパッチ
mjpg-input_20190618.patch
をmjpg-streamerディレクトリの下に置きます。

root@armadillo:~/mjpg-streamer# ls mjpg-input_20190618.patch
mjpg-input_20190618.patch


パッチを適用します。

root@armadillo:~/mjpg-streamer# patch -p1 < mjpg-input_20190618.patch


5.mjpg-streamerをmakeしてインストールします。

root@armadillo:~/mjpg-streamer# make
root@armadillo:~/mjpg-streamer# make install


以上で、mjpg_streamerのインストールは終了です。

以下は、Armadillo-640にUSBカメラを接続して、デバイスファイルが"/dev/video0"の場合の実行例です。
実行例)mjpg_streamerでMJPEG入力(※)するには、下記のように実行します。
※)--yuvオプションを付けない

mjpg_streamer \
-i "/usr/local/lib/input_uvc.so -d /dev/video0 -r 640x480 -f 10" \
-o "/usr/local/lib/output_http.so --www /usr/local/www"


参考)
上記の実行例のようにMJPEG入力した場合、CPUの使用率は2%程度でした。

なお、下記のようにYUV入力(※)した場合、CPUの使用率は60%程度になります。
※)--yuvオプションを付ける

mjpg_streamer \
-i "/usr/local/lib/input_uvc.so --yuv -d /dev/video0 -r 640x480 -f 10" \
-o "/usr/local/lib/output_http.so --www /usr/local/www"

補足)
CPUの使用率はtopコマンドで確認。