wonder gadget

ガジェットはインターネットの夢をみるか? Intel edisonを中心に IoT, MAKE, Physical Computingしていきます。

Intel EdisonにUSBカメラ接続:ソフトウェア編

 USBカメラを接続、認識できたので今回はそれを使ってビデオキャプチャができるソフトウェアを動作させます。

 

Intel EdisonにUSBカメラ接続、認識 - wonder gadget

 mjpeg-streamer

(Ubuntuマシンで)
$ sudo apt-get install subversion
$ svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer


そして、できたmjpg-streamerディレクトリをWifi経由でIntel Edisonへ移動しておきます。

ここからIntel Edisonでの作業です。

# opkg update
# opkg install libjpeg-dev libv4l-dev
# cd mjpg-streamer
# vi Makefile


ここで、Makefileの39行目でinput_testpicture.soをビルド対象に含めている部分を下記のようにコメントアウトします。

# PLUGINS += input_testpicture.so


input_testpicture.soのビルドにはImageMagickが必要なのですが、ImageMagickのIntel Edison用のパッケージがなく、またその名前の通り、input_testpicture.soはテスト時以外なくても困らないためです。

以上のもと、ビルドします。

# make


ビルドが完了したら、下記のコマンドにより、mjpg-streamerを起動します。

# export LD_LIBRARY_PATH="$(pwd)"
# ./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -r 640x480 -f 15" -o "./output_http.so -p 9000 -w ./www"


あとは、ブラウザで

http://Intel EdisonのIPアドレス:9000/

にアクセスすると、映像が配信されていることがわかります

 

上記を参考にしてmjpeg-streamerを動作させます。

重要>

# opkg install libjpeg-dev libv4l-dev

 

ところがwebページは表示されるものの、肝心の画像がでません。

USBカメラの緑LEDも点灯しておらず、最初に疑ったのが電源。外部電源を9V角型電池からリチウムイオン充電池 3.7V x 2本に切り替えます。しかし結果は同じ。電源以外を疑います。

fswebcam

fswebcamというのがあると聞いたのですが、色々と調べるうちにmotionを発見。

 

motion

fswebcamはいったんおいといて、動き検知で撮影可能なmotionを試します。

インストールは非常に難儀し、makeしたり、make installしてはエラーを出してたのですが、結果的に opkgでインストールできることが分かりました。

 

opkgでインストールできるモジュールは、

#opkg list

で表示されるので、grepで探すとそれっぽいのが見つかります。。。

結局fswebcamもppkgインストールできそう、ということがこれで分かりました。

インストールされているものは、

#opkg list-installed

で表示されます。

余談)bash等インストール

bashもopkg install bashしてインストールしました。

f:id:wonder2inc:20150108151159p:plain

色々とmakeしたりしているうちに installコマンドが不足するなどあったので、以下もインストール。

#opkg install coreutils (installコマンド)
#opkg install libv4l-dev (video4linuxライブラリ、カメラ関係に必要)

 motionの設定


Linux + motion + webcamでライブ監視カメラを設置する

正しく認識されていれば、あとは motion.conf を書けばよい。ストリーミングを除いて上記を満たす最低限の設定は以下を書き換えれば良さそう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
videodevice /dev/video0
width 640
height 480
framerate 4
minimum_frame_time 0
threshold 8000
threshold_tune off
noise_level 32
noise_tune on
despeckle_filter EedDl
locate_motion_mode off
text_right %Y-%m-%d %T-%q
target_dir /home/shared/monitor/
snapshot_filename %Y/%m/%d/snapshot/%t/%H_%M_%S
picture_filename %Y/%m/%d/%H/%t/%H_%M_%S-%q

 画像の保存先は、基本的に target_dir が起点となる。そこを起点として、定時スナップショットのパスはsnapshot_filename, 動体検知時のパスは picture_filename となる。後々のローテーションなどを考えて、極力日付などの単位でひとまとめになるのが望ましいと思われる。後述するが、上記のような割とゆるめの仕様でも1日 4GB 以上のファイルが生成されるので、ローテーションしやすいディレクトリツリーは必須となる。

opkgでインストールしたmotionは

/usr/bin/motion

にあり、設定ファイルは /etc/motion-dist.confにあるため、それを書き換えます。デフォルトでは daemon onとなっているので注意。

起動するとtarget_dir以下に凄い勢いでjpgファイルが生成されるので、ディスク容量に注意。とりあえずUSBカメラの緑LEDは点灯、動作することが確認できました。

f:id:wonder2inc:20150108160029j:plain

タイムスタンプも同時に記録されていました(時間はUTC)

再びmjpeg-streamer

もう一度mjpeg-streamerを起動すると、なぜか起動できました。上記で色々なインストールやmakeをしたためだと思いますが、、、何が理由かは不明です。

 

f:id:wonder2inc:20150108153253p:plain

コントロール系は全く含まれていないのでエラーが出ますが、とりあえず画像は静止画、ストリーミング動画ともに出るようになりました。

 

f:id:wonder2inc:20150108153255p:plain

 

f:id:wonder2inc:20150108153256p:plain

次回はfswebcam, motionを使ってコマンドラインから画像キャプチャ、それを他のサーバー(クラウド側)へ送る方法を探る予定。

 

余談) コマンドがどのパッケージに含まれているか

make installができないときに、installコマンドが入ってないことが分かりました。当然入っているものと思っていたのですが、そういう場合は他のディストリビューションで調べてみます。

ITmedia エンタープライズ : Linux Tips「特定コマンドがどのRPMパッケージに含まれているのか知りたい」

# which dig
/usr/bin/dig
# rpm -qf /usr/bin/dig
bind-utils-9.2.1-9

 installの場合、coreutilsと分かり、 opkg install coreutilsとしました。

f:id:wonder2inc:20150108153934p:plain