読者です 読者をやめる 読者になる 読者になる

hogehoge, world.

米国カリフォルニアから日本に一時帰国中のソフトウェアエンジニアがIT・自転車・音楽・天体写真・語学などについて書く予定。

Raspberry PiでWebCamサーバ

Raspberry Piのアプリケーションを考えるのはなかなか難しい。最終的にビジネス化して数ばらまくのならコストメリットも出るだろうが、個人で一品ものとして使う場合、据え置きPCでもノートPCでもタブレットでもスマフォでもArduinoでもできないことって何だろう?という問いになり、これがなかなか難しいのである。

例えば、一般のご家庭なら居間用のPCとしてちょうどいいかもしれない。しかし残念ながらうちは一般のご家庭ではなくて、Ninjaクーラー搭載の静音ミドルタワーPCが既に置かれており、RPiの出る幕はない。

防犯カメラはイケるかも?ということで、ちょっと実証実験してみることにした。純正のカメラはないので普通のUSB WebCamでやってみる。

motionのセットアップ

Raspberry Piの防犯カメラアプリにはmotionというパッケージを使うのが定番らしい。

  • カメラの前でものが動いたら静止画と動画を記録
  • カメラ画像のストリーミング配信

ができるっぽい。設定方法はあちこちのサイトに書いてあるのだが、記述が古かったりするので要注意。最低限のセットアップはこんな感じ。

  • sudo apt-get install motion でmotionをインストールする。
  • /etc/motion/motion.conf を修正する。
  • /etc/default/motionの中のnoをyesに変更。これでmotionのサーバ起動を許可。
  • /var/lib/motionをchmod 777する。これで動き検出時にサーバがこのディレクトリにスナップショットファイルを書き出せるようにする。これを忘れると動き検出時にサーバが落ちることがある。
  • USBにWebCamをつなぎ、sudo service motion start でサーバ起動。

うまくいけばポート8081番にWebブラウザでアクセスするとWebCamの画像が見えるはず。初期設定ではイメージは小さく(320x240程度)、フレームレートは低い(2コマ/秒程度)。

コマンドラインからmotionと打ち込んで直接実行することもできる。カメラの前でものが動くとカレントディレクトリに画像ファイルが次々と生成されるので、基本的な機器の接続とmotionのインストールが成功しているかどうかが確認できる。サーバがうまく動かない(connection refusedと言われる)ときにトラシューに利用するとよい。

ポート8081番の動作が確認できたら、/etc/motion/motion.confをさらに次のように変えると配信映像が滑らかになる。

  • stream_motionをonにする。動き検出時にフレームレートを上げる。
  • stream_maxrateを高くする。30とか。
  • width/heightを上げる。ただし後述するように慎重にやった方がよい。

目的がストリーミングのみでレコーディングが必要なければ以下を修正する。

  • output_picturesをoffにする。動き検出時の画像ファイル出力を抑止。
  • ffmpeg_output_moviesをoffにする。動き検出時の動画ファイル出力を抑止。

RPi Zeroで動かない場合がある?

RPi 3ではわりとすんなり動いたが、同じ設定をRPi Zeroに持って行ったらサーバがなぜか立ち上がらなくなるという問題が発生して少々難儀した。どうやらRPi 3で解像度を640x480にしていたのが悪かったらしく、これを320x240に下げたらRPi Zeroでも動作するようになった(たぶん)。ちゃんと調べたわけではないが、使えるメモリと解像度との間に何かシビアな関係があるような気がするので、解像度を上げる際には慎重に動作確認しながらやるとよいかもしれない。