見出し画像

ESP32-CAM & Pythonで簡単&無制限 監視システム構築 Ver2

こんにちは、Rcatです。
以前、ESP32-CAMとPythonの組み合わせでお手軽監視システムを作成しましたが、録画とストリーム性能に若干の懸念がありました。
そこで今回、滑らかな録画とストリームを実現すべくVer2を作成しました。
それ以外にも追加要素や改善点もありますので、ぜひご覧ください。
※情報は最後まで無料です

バージョン1はこちら

ESP32-CAM用のケース作ってみました。
現物販売もあります。


まずはどんなシステムなのかおさらい

さて、解説を始める前にまずはどんなシステムを作ったのか、おさいしてみましょう。
本システムはPythonでできているウェブサーバーで、ESP32からの映像をリアルタイムで受信することで、録画やストリーミングを行うというものです。
直接ESP32をプログラミングするには難しいC言語を用い、さらに難しい画像処理を行わなくてはなりません。しかも、そういった情報はインターネット上にほとんどないという状況。
つまりはほんの少し手を加える以上のことができないというわけですね。
そこで思いついたのが別途システムを独立して作成すれば、いろいろなことができるのではないかということです。
システムにはPythonを用いているため、複雑な処理も豊富なライブラリによって簡単に行うことができます。

バージョン2アップデート点

ここからはバージョン1に比べてアップデートされた点をあげていきます。

通信機能

まず、一番の特徴としてESP32との通信方法の変化が挙げられます。
バージョン1では画像を取得するキャプチャーのURLから画像を一枚一枚取得して動画としていました。
しかし、これだと早くても毎秒4枚ほどしか画像が取得できず、かなりカクカクとした動画になっていました。
そこでバージョン2では、ストリーミングのURLに接続し、そこから画像を切り出すという方法を取ることにしました。
今までよりかなり処理が複雑になったものの、毎秒20枚ほど画像を取得することができるようになりました。

また、画像を配信する方法も変更しました。
バージョン1では、特定の間隔で画像が参照するURLを変更することで、新しい画像を取得して動画として表示していました。
しかし、この方法の場合、クライアントから画像を要求して、そこから更にカメラに画像を取りに行くということを行うため、応答までの時間がかなり長いものとなっていました。それこそ毎秒一枚といったくらいの速度です。
しかし、バージョン2からはWebソケットを使って映像をサーバー側から配信することにしました。
新技術であるウェブソケットを使用することで、サーバー側から一方的にデータを送りつけることができるようになったわけです。
こうすることで、サーバーからは毎秒10枚程度の速度で連続でデータを送りつけ、受信したクライアント側はその映像を受信して画像を更新します。

カメラ管理機能

バージョン2からはカメラの名前が付けられるようになりました。
今までは追加順にID0から始まる番号しか割り当てられていなかったので、どのカメラなのか非常に分かりづらい状態でした。
今回のバージョンからはそれぞれ固有の名前をつけることができ、わかりやすくなりました。

また、新たにユーザー管理機能も追加しました。
カメラの配信ページにアクセスするにはログインする必要があり、ログインしたユーザーによって見られるカメラが異なるという機能です。
これにより、複数のカメラを同時管理するシステムで、特定のユーザーにだけ、見られるカメラを作ることができます。

画面レイアウト

地味に操作側も変更しました。
まずはパソコンでの表示向けにカメラが横並びになるようにしました
せっかくの横長の画面でもカメラが縦一列に表示されなかったので非常に見づらいものでした。今回のバージョンでは複数の列を作り、カメラを横並びにできます。

また、個別のカメラの操作に関するボタンを非表示にしました。
操作ボタンもそれなりに場所を取るので、左上の小さなボタンを押すと表示されるように変更しました。

機能解説

さて、ここからは本ツールの機能について詳しく解説していきます。
なお、今後のアップデートにより追加された機能の全てここで紹介する予定です。

ストリーム機能

ESP32からの映像をリアルタイムでパソコンやスマホから確認する機能です。
例えば3Dプリンターが失敗していないか、ずっと見ていたい場合などに使えます。
もちろん録画中でも使用できるので、監視している場所がちょっと気になる時もストリーム機能を使ってその場で確認することができます。

録画機能

録画機能を紹介です。
ESP32からのリアルタイムな映像を動画として保存する機能です。
動画の安定性も含め、10FPSで保存されます。もちろんサイズを小さくしたいのであれば、最小で2まで下げることもできます。
実際の映像はこちら

  • 録画
    録画を開始します。

  • ファイル分割機能
    指定した時間で録画ファイルを分割します。
    長時間連続して録画する場合は有効にしておくことを推奨します。

  • 動体検知録画機能
    カメラが動きを検知してからN秒間録画するという機能です。
    このM秒間というのは検知した瞬間に更新されるので、動きがある間はずっと録画されます。
    常時監視はしたいけど、確認するのが大変という場合は有効にしてことをお勧めします。

撮影機能

カメラから映像を1枚取得し、保存します
撮影された画像はシステムにも保存されますが、撮影ボタンを押した端末にもダウンロードされます。

タイムラプス機能

一定間隔置きに写真を撮影する機能です。
動きがゆっくりなものの変化を捉えるために使用します。例えば、高さのある作品を3Dプリンターで印刷する様子をタイムラプスしたり、植物の成長する様子を取るなんてことが想定されます。

その他の機能

ここでは監視カメラシステムのメイン以外の機能について説明して行きます。

LEDオンオフ機能

ESP32-CAM搭載のLEDフラッシュの点灯操作を行うことができます。
尚、この機能を使用するにはrcat作の改造スケッチを書き込む必要があります。詳しくは以下の記事を確認してください

カメラ設定の変更

主に画像処理の内容について変更ができます。

  • 上下左右反転および回転
    カメラの設置方向によって、画像の方向変換や回転を行うことができます。

  • 印字サイズ変更
    左下に表示される日付時刻のサイズを変更することができます。

  • 解像度変更
    映像のサイズを変更します。

  • 画像の明るさ変更
    取得する映像の明るさを変更します。

バージョン2.1以降のアップデート内容

ここからはVer2.0公開以降のアップデート内容について紹介します

Ver2.1

  • ESP32-CAM ファーム自動Update機能
    このバージョンからRcatの改造スケッチ使用が前提となります。
    本システムが要求するバージョンより、ESP32側のファームバージョンが低い場合に自動でアップデートURLにアクセスしてアップデートを試行します。
    これは、追加機能に対してESP32側が対応していないといけない場合に行われます。例:サーボ追加等

  • YZサーボ駆動機能
    サーボをふたつ搭載して上下左右の回転操作が行えるようになります。
    使用するピンはY:12,Z:13です。SG90で動作確認済み。

Ver2.2

  • ESP32自動検索機能
    M-Searchを用いてネットワーク上のESP32を自動で検索します。
    これでいちいちIPアドレスをシリアルプリントしてメモる必要がなくなります。

今後の予告(順不同)
今のところ思いつく限り以下の変更を予定しています

  • 表示サイズ変更

  • 単一カメラだけを表示

  • ファイル管理機能

  • 表示並び替え

  • カメラ名前変更

  • Discord連携(指示、画像撮影、ストリーム?VCでできるかな)

改造スケッチによってESP32に独自に搭載される機能

先ほど説明したこちらのスケッチを導入することで、独自に追加される機能には以下のようなものがあります。

  • wi-fi設定の変更
    SSIDやパスワードを後から変更することができます。

  • 固定IPアドレスの使用
    動的にIPアドレスが変わる環境の場合、システムの運用が困難となります。そのため、ESP32側からIPアドレスを固定することができます。

  • オンラインアップデート機能
    Rcat公式の最新ファームウェアにアップデートすることができる機能です。インターネットに接続していれば、ボタンひとつで行うことができます。
    または任意のバイナリをオンラインにアップロードしてから書き込むこともできます。

  • LED点灯機能
    先ほども紹介した通りLEDを光らせるにはこのスケッチを書き込む必要があります。

  • YZ軸稼働機能
    サーボモーターを2つ接続して、上下左右回転を行うことができます。
    なお、この機能は記事公開時点では正式な方法で操作することはできません。アップデートで追加予定です

  • M-Search応答機能
    IPアドレスが分からなくても、ESP32を検出することができる機能です。
    シリアルプリントで調べる?もう必要ありません!!

具体的な使い方

配布パッケージ内に含まれる環境構築スクリプトを実行後、スタートスクリプトを実行することで本プログラムを実行できます。
具体的にはPythonの仮想環境を作成し、必要なライブラリを自動でインストールします。
そして、実行スクリプトで仮想環境を有効化し、そこでツールを実行するという手順です。

#まずは環境構築スクリプトを実行
rcat@rcat-Green-G5:/Rcat_Service/Script/esp$ ./creae.sh

中略

#次にツールのスタートスクリプトを実行
rcat@rcat-Green-G5:/Rcat_Service/Script/esp$ ./start.sh
 * Serving Flask app 'ESP32CAM_Server_Ver2.2'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:8081
 * Running on http://192.168.0.4:8081
Press CTRL+C to quit

使い方

以下の動画をご視聴ください。

まとめ

いかがでしたか?
1つ1000円程度で買えるので、導入コストが非常に低いところからお手軽に監視カメラシステムと名付けさせていただきました。
正直なところ、環境の耐える限り無限の数のカメラを同時に監視することが、これほどの低コストでできるというのはかなり便利なものだと考えています。
本人も主にプリンターの監視で良く使っていますし、カメラ自体が壊れても大した痛手ではないので、玄関に設置してみるのもアリかなと考えています。
ただ、さすがに暗いと撮影できないので、人感センサー付きの玄関ライトなどと組み合わせて、それと動体検知も組み合わせればかなり録画しやすいのではないかと考えています。
まだまだ追加したい機能は残っているので、しばしアップデートでお付き合いください。
それではまた会いましょう。

実行方法

本ツールはPythonで出来ておりますので、Pythonの基本的な実行方法に基づき実行することができます。
本ツールは少し上で紹介したように環境構築と実行用のスクリプトを用意しておりますので、そちらもご活用ください。
詳しくは下記で解説していますので参考にしてください。

配布情報

初版

配布は終了しました

Ver2.1以降のアップデート搭載版

初版以降のアップデート版に関しては、この記事有料区間のキーワード及び権限レベル2が別途必要です。
事前に利用規約の特に"有料作品について"に同意の上購入してください

https://script.google.com/macros/s/AKfycbysRqb7488rvLGPqOOhGlr0w513zIHC67BEPzJtPAKrAc4lKfDCmsB0mVL1Ha5BY5P0/exec?name=ESP32CAM_監視システムv2_Update

ここから先は

58字

¥ 980

情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。