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を発見。
- gnu/linux で ウェブカメラ(web camera, webcam)を接続して使ってみるテスト。 - beizのノート
- pi で遊んでみる (Webカメラ) - ahiru studio
- □RaspberryPiというかRaspbianで動くWebCAM監視カメラ(ライブカメラ) | Linux Install Memo
- snagplaces on @wiki - CentOS on EeeBOX/fswebcamでUVC静止画撮影
- Raspberry Pi Learning Resources
- RaspberryPiでウェブカメラは簡単に動いた: がた老AVR研究所
motion
fswebcamはいったんおいといて、動き検知で撮影可能なmotionを試します。
インストールは非常に難儀し、makeしたり、make installしてはエラーを出してたのですが、結果的に opkgでインストールできることが分かりました。
opkgでインストールできるモジュールは、
#opkg list
で表示されるので、grepで探すとそれっぽいのが見つかります。。。
結局fswebcamもppkgインストールできそう、ということがこれで分かりました。
インストールされているものは、
#opkg list-installed
で表示されます。
余談)bash等インストール
bashもopkg install bashしてインストールしました。
色々と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は点灯、動作することが確認できました。
タイムスタンプも同時に記録されていました(時間はUTC)
再びmjpeg-streamer
もう一度mjpeg-streamerを起動すると、なぜか起動できました。上記で色々なインストールやmakeをしたためだと思いますが、、、何が理由かは不明です。
コントロール系は全く含まれていないのでエラーが出ますが、とりあえず画像は静止画、ストリーミング動画ともに出るようになりました。
次回は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としました。