RaspberryPi 3 Model B+でIoT監視カメラをつくる(その1ハードウェア関連)
Contents
RaspberryPi(ラズパイ)でIoT監視カメラ
RaspberryPi 3 Model B+とカメラ(Raspberry Pi Camera Module V2)とモーションセンサー(HC-SR501)で監視カメラを作成したときの備忘録。
似たような機能を持った市販の監視カメラも幾つか販売されているが、それぞれちょっとずつ機能的に惜しい所がありそれならばと思い自作してみる事にした。
特に実現したかったのは、
- 動きがあるときだけ撮影する
- 撮影した画像をインターネット経由でクラウドにアップする
- 撮影したことをLINEで通知する
の3点。
1.は普通の監視カメラは24時間365日撮影をしているが、それをすると動画ファイルが直ぐにいっぱいになってしまうのでモーションセンサーを使って何らかの動きがあるときだけ撮影をする仕様にしたかった。
2.と3.については録画ファイルをラズパイ内に保存するだけでは無く、インターネットに接続して録画ファイルをクラウドにアップロードする同時に通知する機能を付けたかった。
いわゆるIoT(Internet of Things)を実現したいと思っていた(IoTカメラ)
またこのページの最後に記事に関する動画を載せているので参考にしてみて欲しい。
風の強い日などモーションセンサーが検知してしまって何も写っていない映像を撮ってしまう事があったので機能追加を行っている。
TensorFlow(機械学習)を使って物体(人や車)が写っている時だけ映像をクラウドにアップロードする仕様にした。
またその際にLINEに画面ショットを添付する様に改良を加えた。
その時の記事はこちら
全体構成図
監視カメラシステムの全体構成図は以下の通り。
1 | モーションセンサー(HC-SR501)にてモノの動きを感知する |
2 | 動きがあるときだけRaspberry Pi Camera Module V2にて撮影する |
3 | ローカルディスクに撮影した動画を一旦保存する 尚、ファイル形式は.h264とする |
4 | GoogleDriveにファイルをUp Loadした後、ローカルディスクのファイルは削除する Up Load処理は時間が掛かるのでファイルのコピー中に監視カメラが停止してしまうのも困るので別スレッドで処理する |
5 | 監視カメラが撮影したことをLINEで知らせる |
必要なハードウェア
RaspberryPi本体
RaspberryPi 3 B+本体とクリアケース、SDカード、スイッチ付き電源等必要な物が一通り揃ったセットを購入した。
自分が以前に購入したセットは既に販売終了していたので別セットのリンクを貼っておく。
尚、自分はRaspberry Pi 3B+で作成したが今ならRaspberry Pi 4Bで構築しても良いと思う。
カメラ
RaspberryPi用のカメラモジュールを購入した。
撮影場所はセンサー付きポーチライトが付いていて夜間でも明るいので通常のカメラにしたが、状況によっては夜間撮影用の赤外線カメラにした方が良いのかも知れない。
同一の商品はリンク切れになっていたので同型の商品のリンクに変更している。
モーションセンサー
モーションセンサー(HC-SR501)
2個で350円で購入しており(2019年7月時点)並行輸入品らしく10日程掛かったが無事に届いた。
また動作確認をしたが今の所2つとも正常に動いている。
同一の商品はリンク切れになっていたので同型の商品のリンクに変更している。
カメラの接続
RaspberryPi本体にカメラを接続する。
赤枠の位置にあるコネクタにカメラのフラットケーブルを方向を間違えないように接続する。
フラットケーブルのコネクタ(金属面)がある方を USB コネクターの反対側に向けて差し込む。
※青い方が USB コネクター側になる。
コネクタは両側の爪を持ち上げてケーブルを差し込んだ後に爪を下げることにより固定される。
左右の爪を持ち上げてからケーブルを差し込む。
モーションセンサー
モーションセンサー(HC-SR501)の基盤の説明。
詳細はこちらのデータシートを参照。
コネクター |
| ||||||
感度調整 | 感度を3m~7mまで調整可能 時計回りに回転させると感度が最大(7m)になる | ||||||
遅延時間調整 | 遅延時間を5秒~300秒までの間で調整する 時計回りに回転させると時間が最大(300秒)になり、反時計回りに回すと最小(5秒)になる 遅延時間とは最後にモノを検知(Output=High)してから未検知なるまでの時間 最後に動きを検知してから遅延して(少し時間を置いてから)未検知状態になるので遅延時間と表現している | ||||||
ジャンパープラグによって2種類のモードが指定可能
初期設定時はシングルトリガーになっていたのでプログラミングしやすいリピートトリガーにジャンパスイッチを変更した シングルトリガー リピートトリガー | |||||||
CdS | CdS(光センサー)を取り付けることが出来る模様(未確認) 「暗い時だけライトを付ける」などの制御に使用することが出来る |
その他の方法
尚、今回の構成ではモーションセンサーでモノの動きを感知しているがモーションセンサーを使わずにカメラの映像の前後比較から”動き”を感知するやり方もある。
具体的にはPythonのOpenCVのライブラリーでcv2.absdiffで画像の差分を取ってcv2.bitwise_andで差分画像の論理積が一定のしきい値を超えた場合に動きがあるとプログラミングで判定する方法だ。
もちろんその方法でも良いのだが色々と検証して見たかったこともあり今回はモーションセンサーを使ったやり方にしている。
接続図
RaspberryPiとカメラモジュール、モーションセンサーとの接続は以下の通り
カメラの有効化と試し撮り
有効化
RaspberryPiの設定を変更してカメラを有効化する。
左上のメニューー>設定ー>RaspberryPiの設定
インターフェイスタブでカメラを”有効”にして再起動する。
尚、SSHとVNCは開発中の為に有効にしている。
開発が終了したらそのままにしておくと危険なのでもとに戻すつもり。
試し撮り
この段階でカメラが正常に動作するかの確認の為、試し撮りをしてみる。
LXTerminalを起動する。
コマンドラインから、
raspistill -o camera.jpg
で静止画(camera.jpg)が撮影される。
同様に、
raspivid -o video.h264 -t 10000
で10秒間の動画(video.h264)が撮影される。
動画はRaspberryPi上で再生した所、コマ落ちしてしまったがパソコン上では問題なく再生された。
尚、パソコンでの再生はVLCメディアプレーヤーをインストールして使わせてもらった。
フリーソフトで様々な環境、ファイル形式の動画が再生できるのでありがたく使わせてもらっている。
フォーカスの調整
今回のIoT監視カメラではフォーカスは工場出荷時の状態で変更をしていないが1m以内の近距離を撮影したい時にはフォーカスを調整する必要がある。
フォーカスの調整方法を別記事でまとめた。
その他初期設定
その他、初期状態のOSから以下の変更を行った。
パッケージの更新 |
上記のコマンドにてパッケージ類を最新の状態にした |
ホスト名の変更 | メニューから設定ー>RaspberryPiの設定、システムタブでホスト名を変更した |
デフォルトユーザpiの変更 | デフォルトのユーザpiはそのままにしておくとセキュリティ上問題があるので別ユーザ名に変更した piを変更した時の記事はこちら |
固定IPの割当 | 無線LANのIP Addressを固定IPに変更した 再起動の度にDHCPから異なるIP Addressを割り当てられるとVNCやSSHで接続する時に面倒なのでIP固定にした 固定IPを設定した時の記事はこちら |
Python3をデフォルトにする | pythonのデフォルトが2.7だったので(Kernel version:4.19)python3をデフォルトに変更した 変更した時の記事はこちら |
Python IDEのインストール | OSはプリインストールされていたNOOBSからイメージファイルをダウンロード&コピーしてのインストールに変更している その時の記事はこちら Version:June 2019、Kernel version:4.19ではpython IDLE(Integrated DeveLopment Environment)が未インストールだったのでインストールしている
でインストールした |
ハードウェアの設定、接続や初期設定についてはこれで終了。
記事が長くなったので一旦終了する。
次回以降でGoogleDriveにアクセスするための設定やLINEにメッセージを送信するための設定、pythonでのプログラミングなどを扱う予定。
次回の記事はこちら
尚、記事と同内容を動画にしているので実際の機器の接続の様子などは動画で確認して欲しい。
RaspberryPiで監視カメラ動画
カメラモジュール、モーションセンサー、RaspberryPiの初期設定などの動画
同じ様なモノを作りたかったのでPythonのプログラムなど参考になりました。ありがとうございます。
おとさんコメントありがとうございます。
稚拙なプログラムで恥ずかしいのですが参考にして頂ければ幸いです。?
こんにちは!
似た様な仕様のカメラを作成していらっしゃる方がたくさんですが、貴殿のプログラムが一番参考になりそうなので熟読しています。
私は庭にカメラを仕込んで、動物が来た時にだけ録画でき、さらにラインで通知がくる様に組んでみたいと思っています。
まだカメラを買っていないので、質問なんですが、↓このネットワークカメラでも設定可能でしょうか?
https://www.amazon.co.jp/dp/B07GPLM91F/ref=cm_sw_em_r_mt_dp_PXEnFbGX3V6CN
また、私は容量に制限のあるワイファイ環境なんですが、結構パケット食うもんですか?
夜間、家にいる時だけ作動して観察してみたいんですが・・・・。
お時間のある時で結構です、ご教示頂けると嬉しいです。
どうぞよろしくお願い申し上げます。
岡野さん
コメントありがとうございます。
リンク先のカメラをラズパイのプログラムで制御するのはちょっと大変そうですね。
カメラ本体に付いてるSDカードをラズパイから何らかの方法で参照することが出来れば
良いのですがネットワーク越しに見ることになるのと暗号化されているみたいなので
難しそうですね。
有料でクラウドのストレージに映像を保管する機能もあるみたいなので、このカメラを
使用するのであればその方法の方が良さそうです。
パケット量に関しては解像度に寄ります。
記事中のカメラでは1920×1080で1分間で24MByte前後です。
また夜間であれば自分の記事のPiCameraは不向きで真っ暗になってしまいます。
自分は使った事がまだ無いのですが「Raspberry Pi用 夜間 赤外線可視カメラ」もあるようです。
https://amzn.to/3kMg86I
赤外線LEDが3Wでどの程度の距離まで撮影できるかが、いまいち分かりませんが10mとか
離れると無理なように思います。
souichirou様
回答ありがとうございます。
なるほどそうですか….、うーん、正直なこといっていいですか、全然ピンと来ないです、はははは!!!
でも!なんとかして作ってみます!なんとなくプログラム不要な感はありますが….
また作成の過程で疑問がありましたら、質問させてください!
よろしくお願い申し上げます。
岡野
Raspberry Piを先日初めて購入してみた19才学生です。普段はDeep learningの勉強をしているのですが、ずっとRaspberry Piやってみたくて今はとってもワクワクしています。こんな素敵なブログを書いてくださり、本当にありがとうございます!
Zeppeliさん
嬉しくなるコメントありがとうございます。
このRaspberry Piで監視カメラを作るシリーズはその8まであって、最終的にはDeep Learning(モデルはcoco)でObject Detection(物体検知)までやっていますので是非挑戦してみて下さい。
何か分からないことがあったらコメントに書いてもらえるとありがたいです。
今はJetson Nano 2GB Devキットで遊んでいます。
こちらもそのうちに記事にしたいと思っていますので良ければ見て下さい。
Youtubeのほうでも拝見させていただいております。どんどん見て楽しく勉強させていただきます!
Youtubeの方もありがとうございます。
勉強熱心な学生さんですね、素晴らしい!
楽しんで学ぶのが一番ですね。