Webカメラの準備

Raspberry pi にはUSBがあるので簡単に市販のWebカメラ(UVC)がつながります。今は純正のカメラもあるのですが手元にあるLogicool(Logitech)のC270というものをつないでみます。
経験上、Webカメラは激安のものよりは有名メーカーの最低グレードのものの方が良いような気がします。
Raspberry pi はCPUが弱いので動画にはあまり向きません。おとなしく静止画を撮影させてみます。
Raspberry pi では電源の心配があるのでセルフパワーのUSBハブにWebカメラを接続して電源はUSBハブに助けてもらいます。

$ sudo apt-get install … でソフトウエアの追加をします。
(今回使わないものも入ってますが)

  • fswebcam : Webカメラを使うためのツール
  • imagemagick : 画像処理用
  • nginx : webサーバ
  • bc : 計算
  • mrtg : MRTG
  • vim : エディタ
  • ttf-mscorefonts-installer : マイクロソフトのTrueTypeフォント

MRTGで以下のエラーが出るのでsedのスクリプトを一発流す。
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=36&t=13044
sudo sed -i 's|import\ Socket6;|Socket6->import\(qw\(inet_pton\ getaddrinfo\)\);|' /usr/share/perl5/SNMP_Session.pm

インストールの処理に非常に時間がかかるようです。これがraspberry piの貧弱な性能なのか。

Webカメラの撮影

$ sudo fswebcam /var/www/html/test0001.jpg

これだけでとりあえず写真が撮れると思います。
パソコンのWebブラウザから http:/(RasPiのアドレス)/test0001.jpgで画像が表示できるでしょう。
ファイルの出力先をwebサーバのディレクトリにするとリモートで確認しやすいです。

$ sudo fswebcam -d v4l2:/dev/video0 -p YUYV -r 640x480 --top-banner -S 5 --font /usr/share/fonts/truetype/msttcorefonts/arial.ttf:16 /var/www/html/test0002.jpg

こんな感じで撮影時刻がついた画像ができました。
オプションはファイルに書いて読み込ませる事ができます。
テキストファイルに長いオプション名の–を取ったものと値を一行ずつ書いたものを作ればよいようです。コマンドが短くなって見やすくなりました。

$ sudo fswebcam -c fswebcam.conf /var/www/html/test0003.jpg

sudo で操作するのもめんどうなので、 vigr を起動して、video と audio に自分のユーザグループを追加しておきました。最近は最初から追加されているようです。
これをcronで回して、FTPやwebサーバと組み合わせればお天気カメラ、監視カメラになります。

nginxの設定

Webサーバは最近のドキュメントが多いnginxを入れてみました。
/var/www/html 以下が公開されます。

ディスク書き換え問題

Raspberry Pi は低価格の教育用コンピュータという点もあり、ストレージにSDカードを使っています。安いのはいいのですが、書き換えが多い処理をしているとSDカードがエラーを出してしまいます。(死にます)
30分ごとに写真を撮ってMRTGで温度を記録していたら、三ヶ月で使えなくなりました。
教育用として短期間使う場合は問題がありませんが、仕事に使うサーバは Raspberry Pi じゃなくてちゃんとしたマシンを使用しましょう。
今回はSDカードへの書き込みを少しでも減らすために Ram Disk を使用してみます。最近のLinuxでは最初から利用できるようになっているようです。
df -h で表示をみると /run/shm/ というものがRam Diskです。
Webカメラのファイルの出力先をRamディスクにして、webサーバのディレクトリへのシンボリックリンクを作っておきます。webサーバの設定でシンボリックリンクを有効にすれば使えるでしょう。(たぶんそのまま使える設定だと思う。)

起動スクリプト

/etc/rc.local に起動時の処理を追加します。
起動時にRAMディスクの中に必要なディレクトリを作成しておきましょう。

mkdir /run/shm/webcam
chmod 777 /run/shm/webcam

まとめ

以下のファイルを作り、調整するとブラウザで過去24時間の写真が見れる「監視カメラ」が作れます。
各種値を調整すればそれなりに目的のものになると思います。

(/home/pi/etc/fswebcam.conf)

device     v4l2:/dev/video0 
palette    YUYV 
resolution 640x480 
top-banner
skip       5 
font  /usr/share/fonts/truetype/msttcorefonts/arial.ttf:16

(/home/pi/bin/takepic.sh)

#!/bin/sh
# ファイル名は時刻
filename=`date +%H%M.jpg`
/usr/bin/fswebcam -c /home/pi/etc/fswebcam.conf /run/shm/${filename}

crontab -e でcronに登録。

# 60分毎に撮影
0 * * * * /home/pi/bin/takepic.sh

/var/www/webcamindex.html

<html>
<body>
<img src="/ram/0000.jpg"/><br>
<img src="/ram/0100.jpg"/><br>
...(略)...
<img src="/ram/2200.jpg"/><br>
<img src="/ram/2300.jpg"/><br>
</body>
</html>

この他に ZoneMinder という監視カメラのツールもあります。これでもっと高度な監視カメラになるようです。 ちゃんとマニュアルを読まないと使えなさそうなので使ってませんが。

Logitech QuickCam Orbit MP

Logitech (Logicool) のwebカメラで上下左右にカメラが動く珍しい機種がある。
長い間この機能のLinuxの使い方がわからないでいたがやっと判明した。
一応、UVC対応カメラなのでfswebcamで撮影できるようにするまでは普通のカメラと同じ。
追加で v4l-utilsとuvcdynctrlをインストールする。
v4l2-ctl -L で使用できるコマンドの一覧が表示される。ここにpan_relativeなどが出てきたらOK。
get install v4l-utils uvcdynctrl
v4l2-ctl -c pan_reset= でパンのリセット、v4l2-ctl -c pan_relative=1000で左に動く。右に動かしたい時は負の値。チルトも同様。
(2014/11/1)
(2016/3/21)