How to set up Peeping hole

last update: 16 Jan 2005

home

WebCamを使ったPeeping Hole



1.1 はじめに
これは、Logitech社の"Quickcam USB camera"の画像イメージ(jpeg)をCGIで取り出す方法を記述した文書です。

なお、(改造した)webcam.cgiというソフトは、 あくまで個人が時々画像をチェックする用途に作ったもので、 アクセスされる毎に/dev/videoXの画像をキャプチャーしてJPEG画像として送信します。

多数のアクセスは想定していません。多数のアクセスに対応するには、素直にwebcamをデーモンとして利用しましょう。

また、httpサーバから誰でも画像を観ることができます。念のため認証(BASIC認証)を設定したりSSLで暗号化するなど、 利用には充分注意してください。

1.2 ダウンロード

    1.2.1 xawtv

    xawtvはビデオキャプチャー用アプリケーションソフトです。 以下のバージョンのアーカイブをダウンロードしてください。
    xawtv-3.94.tar.gz

    また、cgi用ソースを追加したpatch(xawtv-3.94-cgi-sh1.patch)を作成したので、

    こちら
    もダウンロードしてください。

    1.2.2 qc-usb

    "Quickcam USB camera"のデバイスドライバをダウンロードしてください。
    http://sourceforge.net/projects/qce-ga/

    最新バージョンは"qc-usb-0.5.1.tar.gz"です。

1.3 インストール

    1.3.1 xawtv

    適当な作業ディレクトリでアーカイブを展開し、patchをあててください。
      % tar xvfz xawtv-3.94.tar.gz
      % cd xawtv-3.94
      % patch -t -p1 < xawtv-3.94-cgi-sh1.patch

    展開後、configure,make, make installを行ないます。
      % ./configure
      % make && make install

    /usr/local/bin/に"webcam.cgi"というCGIソフトがインストールされるので、httpdサーバの"cgi-bin/"ディレクトリにmvし、 root権限でスティッキービットを設定してください(/dev/videoXにアクセスするため)。
      % su
      passwd: ******
      % mv /usr/local/bin/webcam.cgi /var/www/cgi-bin
      % chmod +s /var/www/cgi-bin/webcam.cgi

    1.3.2 qc-usb

    WEB Cameraのデバイスドライバをインストールします。
    Remark: Linuxの2.4.19と2.4.20はこのデバイスドライバに関して挙動が不安定なので、 以下のkernelパッチを(kernelソースに)あて、カーネルとモジュールを新しくしてから、 作業することを奨めます。
    linux-2.4.20-videodevfix.patch

    適当な作業ディレクトリでアーカイブを展開し、configure, make, make installを実行します。 同時に"quickcom.o"を適切なモジュール用ディレクトリにcopyしてください。

      % tar xvfz qc-usb-0.5.1.tar.gz
      % cd qc-usb-0.5.1
      % ./configure
      % make
      % su
      passwd: ******
      % make install
      % cp quickcam.o /lib/modules/2.4.20-8custom/kernel/drivers/usb/quickcam.o

1.4 設定

    1.4.1 modules

    デバイスドライバを有効にするには、いくつかのモジュールを読み込まなければなりません。 以下に、必要なモジュールを読み込むスクリプトを示しますので、実行してみてください。
    #!/bin/bash
    # Load the needed modules for the quickcam driver.
    #
    
    # Video4Linux Support
    modprobe videodev
    
    # USB Core Module
    modprobe usbcore
    
    # USB UHCI/OHCI Controller Modules (new)
    #modprobe usb-uhci
    modprobe usb-ohci
    
    # USB UHCI Controller Modules (old)
    #modprobe uhci
    
    # that for the sys request key, comment it out if the quickcam works well.
    # if you get any erors: use Alt + SysRq + S = Emergency Sync (write everything on HDD)
    #                       use Alt + SysRq + U = Unmount all HDD's
    #                       use Alt + SysRq + B = Reboot system immediatly
    echo "1" > /proc/sys/kernel/sysrq
    
    # quickcam.o is in current directory, after copying in /lib/modules/.../misc,
    # use insmod quickcam.
    modprobe quickcam
    

    qc.sh: モジュール読み込み用スクリプト


    なお、サーバの起動時にモジュールを読み込むには、上記のスクリプトの2行目以降("#!/bin/bash"を削除したもの) を/etc/rc.localに追加するとよいでしょう。

    1.4.2 CGIアクセス

    以上の作業で、httpサーバからCGIでビデオ画像を取り出すことができます。
    アクセス方法は、例えば次のように行ないます。
    http://hoge.hoge.jp/cgi-bin/webcam.cgi

    また、webcamの設定ファイルで設定できるパラメータをqueryとしてCGIに渡すこともできます。 例えばビデオドライバdevice、幅widthと高さheightを指定するには次のようにします。

    http://hoge.hoge.jp/cgi-bin/webcam.cgi?device=/dev/video1&width=220&height=200

    Remark: ほとんどのパラメータを設定できますが、無意味なパラメータ(trigger,delayなど)は無視されます。

    1.4.3 Warrning

    以下の点に充分注意してください。

1.5 補記
1羽目のうさぎを飼っていた1994年、家庭にも専用線を引く人達が徐々に出現し始めたころ、 私も専用線で自宅と会社を結び、カメラでうさぎの様子を覗こうとしたことがあります。
しかし当時、格安の専用線でも月3万円ほどかかり、費用対効果が悪すぎるので諦め、 価格が下るのを待っているうちにうさぎが死んでしまいました。

2001年に2羽目のうさぎを飼う頃、ADSL専用線の価格破壊が起きていて、 同時にUSBカメラなどのデバイスも低価格で入手可能となったのを期に、 自宅サーバでうさぎ監視用WEBカメラを設置していました(実際に設定したのは2002年)。

8年来の夢であったうさぎ監視カメラでしたが、いざ会社からアクセスした瞬間、 もしも誰か知らない人間が歩いていたらどうしようと、恐怖感に襲われたのを覚えています。

それでも、人間の居ない間にうさぎが何をしているのか非常に興味深く覗いてました、二日くらい。8年も待ちこがれたWEBカメラですが、うさぎって昼間はほとんど動かないのです。本当に二日で飽きてしまいました。

まあ、そんなこんなで2年以上WEBカメラを稼働させていたのですが、一つ問題がありました。 ビデオキャプチャー用ソフトwebcamをデーモンプロセスとして稼働していたので、 数秒毎に生成したJPEGファイルをハードディスクに年中無休で書き込んだためか、 この2年でハードディスクが2回もクラッシュしてしまったのです。
最初はhttpdのドキュメントルートのある/varパーティションが、2度目は同じく/varパーティションとusbデバイスモジュール関連から/libのある/パーティションが、 どちらも徐々に壊れて、最終的にbootしなくなるということが起きました。

これらの経験から、webcamをCGI化して画像データを直接標準出力に書き出せば、ハードディスクアクセスが発生しないのでサーバにやさしいだろうと"webcam.cgi"を作った次第です。

webcam.cgiが稼働しはじめてまだ1日(というか先週サーバクラッシュしたので、昨日webcam.cgiを作った)、まだ耐久試験のまっただ中ですが、いまのところ順調に動いています。

ただ、今はもうWEBカメラにうさぎは映りません。






いや、別に死んだわけはでなく、すでにうさぎ小屋から出して、一日中家の中を自由に歩かせているので、カメラに姿が映らないのです。
この2年で猫も1匹増え、互いのテリトリーを守りつつ、1羽と1匹は一日中家の中を自由に歩き廻っているようです。 因みにうさぎのほうが猫よりも身体がでかいので、うさぎのほうが威張ってます。



home


since 16/Jan/2005