RaspberryPi Zero W を監視カメラにした話

2018/05/22

linux motion RaspberryPi

以前購入したRaspberryPiZewroWを監視カメラとして利用してみることにしました。
せっかくなので動態検知で動きがあればSlackに通知するようにしたいと思います。



準備

設置場所

玄関扉全体が見下ろせる位置に柱があるので、そこにラズパイをケースごと固定。
近くに電源もあり、そこから長めのUSBケーブルで電源を確保。
また宅内Wifiの電波がギリギリ拾えるのでNASにデータを保存します。

購入したもの

純正カメラモジュール    :約¥4,600
RaspberryPiZero公式ケース  :約¥600
USB電源ケーブル       :約¥500

カメラの接続

ラズパイゼロの公式ケースを購入したのでゼロ用カメラケーブルも付いてました。
これを使って接続します。
sudo raspi-configEnable Cameraの項目をyesにしてカメラを使えるようにして、raspistillコマンドで確認します。

raspistill -w 640 -h 480 -ex auto -o ./test.jpeg
うまく撮影されてればおk。
オプションで -ex auto にすると自動でシーン検出してくれたり -iso でISO設定まで可能、普通のカメラと一緒でした。

ソフトウェア

カメラが認識されたので動態検知ソフトを選びます。
ググってみるといくつかそれっぽいのが出てきたので、一番情報が多そうなmotionを使ってみたいと思います。

しかしインストール方法を調べていくとmotionでは純正カメラモジュールが使えないというブログが数個見つかり、どれもmotion-mmalという非公式のツールを使う流れになってました。。

純正カメラモジュールでmotionを使いたい

とりあえずインストールしてみようとマニュアルを読んでいくと、raspi-cameraを使う方法をそのまま書いてる項目を発見!
Raspberry Pi cameras can be set up two different ways. If Motion is installed by using the apt packages (e.g. apt-get install motion), then the camera must be set up using the bcm2835-v4l2 module which creates a v4l2 device for the camera. Users will need to install this module using the command sudo modprobe bcm2835-v4l2. This will set up the camera as a normal v4l2 device and it can be accessed via a standard /dev/videoX device. If Motion is built from source or installed via the deb packages on the project release page, then an additional option is to set up the camera using the mmalcam_name parameter or using the bcm2835-v4l2 module. When Motion is installed via apt, the mmalcam option is not available.
下線部が重要ぽい、つまりapt-getでインストールしてmodprobeでドライバいれてしまうと-isoや-ex autoなどラズパイカメラのmmalcam optionが使えなくなる?!
それはちょっと困るので今回は配布されてるdebパッケージをDLしてインストールしました。
wget https://github.com/Motion-Project/motion/releases/download/release-4.1.1/pi_stretch_motion_4.1.1-1_armhf.deb
sudo apt-get install gdebi-core
sudo gdebi ./pi_stretch_motion_4.1.1-1_armhf.deb
これで無事インストール完了!

次は純正カメラをmotionで使えるようにします。
/etc/motion/motion.confにあるmmalcam_nameをコメントアウトさせて少し下のmmalcam_control_paramsでカメラオプションを指定しました。
mmalcam_name vc.ril.camera
mmalcam_control_params -ex auto
これでカメラが使えるので、他の項目を色んなサイトを参考にしながら適当に変更。
画像ファイルの保存先はマウントしてあるNASのフォルダにしました。

Slackに通知

ここを参考にSlackerをインストールしてBOTとして投稿させます。

/etc/motion/motion.confon_picture_saveにスクリプトのパスを入れて再起動。

on_picture_save python /home/pi/capture.py %f

これで動態検知して画像が保存されたタイミングでSlackに投稿されました。

課題

赤外線カメラじゃないので夜は真っ暗w
猫が通りかかるだけで通知が届くw(けどこれは良いw)
風が吹いて葉っぱが揺れる度に通知が届く・・・。w
自動露出なので少し明るさが変わる度に通知が届く・・・。w

参考

https://qiita.com/what_is_your_name/items/1c88f9b2d6305f665ccc