防犯システムを作る一環として、画像の取り込みを検討しました。
実は初めにmotionを使った動体検知を試みたのですが、何でもかんでも反応してしまうので断念しました。
今回は人を対象にして反応させたいので、やっぱり人感センサとの組み合わせが良さそう。
motionは使い方によっては凄く強力なツールになるので、また機会があれば試したいと思います。
ちなみに、motionについてはこちらの記事を参考にさせて頂きました。
(参考)THE POOH FILES 新しいラズパイ4で動体検知カメラ motion + LINE Notify + Node-RED を試してみる (1)
そんなことをしつつ、Node-REDでカメラの画像を取り込む方法を探しました。
ありました。
(参考)uepon日々の備忘録 【RaspberryPi】Node-Redでカメラを使用する(Cameraモジュール・USBカメラ)
新たに追加したノードは、『node-red-contrib-camerapi』(撮影用) と『node-red-contrib-image-output』(確認用)です。
このノードを使うにあたって下準備が1つ必要です。
画像の保存先が『/home/pi/Pictures』になっているので、『Pictures』というディレクトリ(フォルダ)を作っておかないといけません。
これが無いと画像が保存されません。
今回はシンプルにPIRセンサ(人感センサ)とRaspberryPi用のカメラだけで動作確認を行いました。
使ったもの
- RaspberryPi 2B
- RaspberryPi用カメラモジュール [OV5647]
- PIRセンサ [HC-SR501] (人感センサ)
RaspberryPiとPIRセンサの配線は下記のようにしました。
GPIOのピンはどこでも良いですが、入力電圧は5Vであることに注意してください。
3.3Vでも動きましたが、反応がいまいちよくなかったです。
カメラモジュールの取り付け位置はこちら。
DISPLAYケーブルと間違えそうになるので注意ですね。
カメラを固定するケースなどは持ってないので、手元にあった木のクリップに挟んで固定しました。
これでハード側の準備はOK
Node-REDで作ったフローはこのような感じにしました。
PIRセンサからの入力(0, 1)をswitchノードで受け取って、「1」の場合にカメラで撮影しています。
撮影した結果は、image-outputで確認しています。
はじめは保存した画像データを開いて確認していたのですが、調整の為に何度も撮影と確認を繰り返すうちにimage-outputで確認したほうが便利だと気付いて導入しました。
<各ノードの設定>
rpi-gpio-in
こちらはPIRセンサの入力ピンを設定しています。
今回は18ピンを使いました。
switch
このノードでPIRセンサの値を振り分けます。
下の「+追加」で項目を増やし、それぞれ数値の「0」と「1」を入力します。
camerapi-takephoto
このノードでカメラの細かい設定を行います。
・File Mode :『Buffered Mode』にすることで、image-outputノードに出力できるようになります。
この場合、画像ファイルは保存されません。
・Image Resolution :画像の大きさを設定します。初期値では大きすぎたので640×480に変更しました。
・Rotation :カメラの設置する向きによりますが、私の場合は180度回転させた設定にしています。
・Brightness, Contrast, Sharpness, Quality :この数値を色々と変えながら画像を確認します。
今回はこのような値にしましたが、状況によってはまた変えるかもしれません。
ちなみに、File Modeの他の項目としては、『Auto File Name』と『Custom File Name』があります。
画像を保存したい場合はこの2つのどちらかを選択します。
image
ここでは、カメラの設定に合わせてWidthを640に変更しました。
小さい値だとプレビューの画像が小さくなるだけで、他の値でも問題は無いです。
ここまではなんとか順調に進めることができました!
次は、この画像を送る通知部分に挑戦する予定です。