スプーキーズのちょっとTech。

SPOOKIES社内のより技工的な、専門的なブログページです。

RaspberryPiと人感センサーで監視カメラを作ってみた

こんにちは。IoT開発部(仮)の西村です。
犬のしつけ教室に行ったら、先にあなたの子供をしつけてくださいと怒られました。他人任せはダメですね。とほほ。

先日、社内メンバーでランチに行った際に、IoT関連でなんかやってみたいよね。 という話になり、少し前からチラホラと名前を聞いてたRaspberryPiを使ってなんか作ってみようぜ! という事になりました。

何作んの?

さて何を作ろう?!という事で、
オフィスに誰か入ってきた時に、カメラで撮ってslackに流したら社内の動きがわかって便利だよね。
廊下に置いて、お客さま or 大家さんが来たらサッと扉を開けて、最高の笑顔で迎えてみようか?
なんて話になりました。

ということで、「誰かきたかもよ」君を作成しました。

ラズパイ本体と各種パーツ購入

amazonで以下の製品をポチりました。

だいたい次の日には届きました。便利ですね。
ちなみに、ラズパイをカートに入れたらamazonがレコメンドしてくれる [Transcend microSDHCカード 32GB]を買ったんですが、何度やり直してもOSのインストールがうまくいきませんでした。
東芝製のものを買い直したらあっさり成功したので、相性のようなものがあるのかもしれません。あまりお勧めを鵜呑みにするのはよくないですね。

手順1 SDカードにOSをダウンロード・インストール

まずSDカードを

SDカードフォーマッター

というツールを使ってフォーマットします。

次にraspberrypiサイトから、OSイメージをダウンロードしてきて、SDカードにコピーします。

raspberrypi本体にSDカードを刺して、キーボード・マウスを取り付け、電源としてのMicroUSBを挿したら起動し、インストールが始まります。
本体には電源ボタンとかないんですね。

手順2 各種パーツを取り付ける

OSのインストールが一通り終わったら、一旦電源を落として、センサー等各種パーツを取り付けます。

正直、どこに何をつけたらよいのか知識がなく困ったのですが、Qiitaのcigalecigalesさんの記事 を参考にして取り付けました。
人感センサー部分の設定に関しては、上記記事内でも紹介されてますこちらのサイト を参考にさせてもらいました。
カメラモジュールは本体に刺すだけです。

f:id:spookies-nishimura:20151209225356j:plain

手順3 無線LANの設定

参考サイトはたくさんあると思いますが、 lsusb コマンドで無線LANモジュール機器が確認できたら、

  • SSID, 暗号キーを設定
  • 固定IPの設定

を行い、ネットワーク再起動します。

手順4 プログラムを書く

今回のプログラムの流れとしては、以下のような感じです。

  • 1sec毎にループし、人感センサーの反応をチェック
  • センサーが反応したら1sec挟んで写真を2枚撮る
  • 2枚の画像の差分解析を行う
  • 一定以上の差分があれば、SCPで写真を画像公開用のサーバに送る
  • slackに、写真のURLとともに「誰かきたかもよ」とメッセージを送る

利用する各種moduleのimport

import os
import commands
import time
import RPi.GPIO as GPIO
import slackweb
import picamera
from paramiko import SSHClient, AutoAddPolicy
from datetime import datetime

画像の差分比較(ImageMagickを利用)

ImageMagickをインストール

sudo apt-get install libjpeg-dev imagemagick

os.system('composite -compose difference ' + filepath + ' ' + filepath_check + ' ' + filepath_diff)
diff_num = commands.getoutput("identify -format \"%[mean]\" " + filepath_diff)

画像が変化したと判断するための差分値は 1500 以上にしてますが、このあたりは環境等にもよると思います。

slackに通知

Qiitaのsatoshi03さんの記事を参考にWebHookURLを取得して、slackwebモジュールを利用して通知します。

slack.notify(text="誰か来たかもよ.")
slack.notify(text="WEBサーバに投稿した画像URL")

手順5 スクリプトをデーモン起動させる

常時起動するために supervisor をインストールします。

sudo apt-get install supervisor

human_sensor.conf を作成し、設定を行ったら

sudo supervisorctl start all

でデーモン起動させました。

設置

さて、この「誰かきたかもよ」君をオフィス内の扉の前に設置しました。
これで誰か来たとき、帰る時に、slackに通知されるようになりました。

f:id:spookies-nishimura:20151209225804p:plain

カメラの前にいろいろものを置きすぎて鬱陶しいですが、現状こんな感じ。

いたずら

同じものをもう1台作って東京オフィスにも設置してみました。
しばらくはうまく動いてたのですが、誰かがトイレに行く際に、マッハキックをかましたようで、「誰かきたかもよ」君が倒れ、延々と暗い画像を映し続けてました。

f:id:spookies-nishimura:20151209225826p:plain

そこで不意に、とてもとても怖い写真をslackに投稿してみました。
真夜中にです。

そしたら

f:id:spookies-nishimura:20151209225808p:plain

という反応を示してくれました。
ちょーびびってる。けけけ。

まとめ

SORACOM Airや、akerun などIoT製品が続々登場し、身近な物になってきました。 最近知った、MaBeee などは、見ててとてもワクワクします。
弊社でも、そんな製品・サービスづくりに積極的にチャレンジしたいと思います。

さてインフラは整ったので、お客さま・大家さんに最高の笑顔をご提供できるように 全メンバー手鏡を持ち、朝から夜中まで自主練をしております。

f:id:spookies-nishimura:20151209232127p:plain

うーん、もう少しですね。

それでは、私も自主練に戻りますので、失礼致します。