IPカメラ|ネットワークカメラとしてのボタン押下でディープスリープから復帰する技適対応ESP32-WROVER+OV2640 CAMからのストリーム配信中の通知を受信し、Raspberry Pi上のPython/OpenCVでストリーム映像・フレーム画像を保存してみた話。
自作見守りカメラ|定点カメラ|監視|防犯|ドアカメラ用であり、超高機能な監視カメラシステムZoneMinderの使用を想定していましたが、Raspberry Pi 3B+には荷が重そうなこともあり、ドアカメラの代替策の一環として。
ネットワークカメラ|IPカメラと言っても市販の完成品ではなく、プログラム可能なWiFi搭載カメラ付きESP32-WROVER-DEVボードのようなマイコンだからこそ成せる技。
このマイコン、通常はスリープ状態、ボタン押下で復帰、一定時間ストリーム配信、その通知までを行なうわけですが、これを受けてラズベリーパイによるカメラサーバに保存するスクリプトを作るのが、この記事のゴールです。
更に同時にスマホなどのLINEやメールアドレスに動画や画像付きで通知を送るように仕込めば、応対はできないまでも、外出先(遠隔地)からであっても、ほぼリアルタイムで来訪者を確認できますね。
ESP32-WROVER+OV2640カメラボードからUDP経由で時間制限付きのストリーム配信中の通知を受けるごとに受信メッセージと日付時刻を使ったファイル名で画像(png)、映像(mp4)を保存します。
WiFi通信には、UDPを使っています。
自身も同ボードをとりあえず4つ買いましたが、同様のカメラが複数ある場合は、分岐するなど、もうちょっと工夫が必要です。
呼び出したい方法にも関わってきますが、スクリプトには、shebang(#!/usr/bin/env pythonとか)を入れて、実行権限も与えておくと良いでしょう。
ちなみにESP32-WROVERボードのスケッチ上は、ブラウザなどからIP_ADDR_OR_mDNSでもアクセスはできるようにはなっていますが、ストリームは専有されてしまうので当該スクリプトが動いている時は、アクセスできません。
もちろん、検証中などで当該スクリプトを実行せずにESPボード側でボタンを押せば、一定時間、ブラウザからアクセスすることはできますが。
ブラウザなどから任意のタイミングでアクセスしたい場合には、常時配信のカメラを使うと良いでしょう。
尚、なんらかの工夫次第なのか、それでも専有するので、やはり、複数同時にアクセスすることはできませんが。
常駐させる(デーモン化する)べく、systemdサービスファイルを作ります。
が、サービスファイルから呼ぶスクリプトは、どうもpythonファイルではなく、shellスクリプトが良さげ。
よって今回は、先のpythonスクリプトを呼ぶだけのシェルスクリプトを作って、これをsystemdサービスファイルから呼ぶことにします。
ちなみにpythonスクリプトを直接呼んでみたら、systemctl startでプロンプトが返ってこなくなりました(いや、何十年か!?待ってれば返ってきたのかも...)。
常駐(≒デーモン化)すべく、systemdのサービスファイルを自作します。
長年正常に機能している自作スマートスピーカーで作ったサービスファイルをコピーして作れば良かったかな...ということで作ってみたのがこれ。
試してみたら、動画も画像も指定の場所に保存されたので大丈夫でしょう。
尚、保存しっぱなしでは、著しくストレージを圧迫、終いにはパンクするのでcronで定期的に削除しておくと良いでしょう。