Raspberry pi で監視カメラ

Page content

小さな庭で育てていたトマトが何者か(おそらく小動物)に荒らされて、実だけがもっていかれる事件が発生しました^^; 既に8つのうち5つほどやられてしまっている状況で、トマトはあと残り1個のため(しかもかじられている)対策は既に手遅れです。今回はこのRaspberry piとmotionによる監視カメラによって犯人を特定することを目標とし、来年度の対策検討のきっかけにしようと思います。

環境

  • Hardware: Raspberry pi 3 + 32GB micro-SD
  • Camera: raspi camera
  • Application: motion
  • Network: 家庭内無線LANのローカルネットワーク(家の外のネットワークからはアクセスできません)
  • Target directory: /home/pi/img (動体検出が行われたときに保存する静止画の場所です)

うまく設定が完了すれば、この様な動体検出のイベントで静止画をキャプチャできるようになります(画像が暗いのは夜だからです)。

前提

始める前にいくつか前提があります。

  • raspi-config: ssh, camera, を有効にしてください

  • sudo app install: いくつかのアプリケーションをインストールします。

    >sudo app update
    >sudo app upgrade
    >sudo app install motion (このアプリケーションで監視カメラ機能を実現します)
    >sudo app install samba samba-common-bin (Windowsから静止画へアクセスするための共有サーバーです)
    

samba サーバーの環境設定

まずはsamba サーバー。静止画保存先を/home/pi/img とし、このフォルダは誰でもアクセスできるように設定します。

>sudo vi /etc/samba/smb.conf
------------------------------
[share]
comment = Free space
path = /mnt/pny64
browseable = yes
writable = yes
only guest = no
create mask = 0777
directory mask = 0777
public = yes
guest ok = yes
browsable = yes

motion の設定

デフォルトから変更したものだけをピックアップします。

>sudo vi /etc/motion/motion.conf
------------------------------
daemon on   (デーモンモードで起動する)
rotate 270  (カメラ画像を時計回りで270deg回転します)
width 640   (画像解像度の幅 640 pixel)
height 480  (画像解像度の縦 480 pixel)
minimum_frame_time 5  (制止がキャプチャしてから5秒間は次のキャプチャを行わない)
output_pictures on    (画像の出力機能をONにする)
quality 100           (画像品質の設定 100 最高画質)
target_dir /home/pi/img   (静止画保存ディレクトリ)
stream_localhost off  (ローカル(raspi)だけの配信とする機能。off=ローカル以外からのアクセスを許可)
webcontrol_port 8080  (webコマンド用ポート。ライブストリーミング先ではない。)
webcontrol_localhost off  (webコマンドのアクセス制限。off=ローカル以外からのアクセスを許可)

Raspberry piの再起動

インストールと設定が終わったら再起動してください。

motionの起動

デーモンモードを起動させ、コマンドで監視開始します。

>sudo service motion restart
>sudo motion

監視開始!!

http://(raspberry piのアドレス):8081 から現在の様子を確認することができます。

SambaによるWindowsファイル共有サービスも起動していますので、ファイルエクスプローラ等から \\(raspberry piのアドレス)\share へアクセスできれば、動体検出によって保存された静止画を閲覧することができます。

その他のmotion機能

motionには動体検出のイベント等に応じてraspberry pi内のスクリプトを実行する機能があります。 詳しい情報は本家のドキュメント - scriptに詳しく書かれています。必要に応じて motion.conf の設定を変更してください。

ATTN: 上記の motion.conf設定でwebコマンドをraspberry pi内以外からも受付できるように設定変更しています。すなわちここで定義されているコマンドは誰でも実行可能だという事はご承知ください。

  • on_event_start
  • on_event_end
  • on_picture_save
  • on_motion_detected
  • on_area_detected
  • on_movie_start
  • on_movie_end
  • on_camera_lost
  • on_camera_found

主に上記のようなイベントに応じてスクリプトを実行します。on_picture_saveなど画像ファイルがセーブされるイベントですが、このイベントは、検出された最新の画像を外部サイトへ送信するなどの機能が実現しやすそうです。