ESP32-CAM & Pythonでお手軽監視カメラシステムを構築!!
こんにちは、Rcatです。今回はESP32CAMというESP32マイコンとカメラを組み合わせたモジュールを使った監視カメラシステムを作成してみました。
通常Arduinoでプログラミングすることの多いESP32ですが、今回は志向を変えてPythonを組み合わせたシステムの紹介をします。
なお、本記事はテキストで収集する方向けで下記動画の抜粋記事となります。詳細やソースコードの関しては動画の方をご確認ください。
Ver2公開しました。
Ver2動画はこちら
旧Verはこちら
ケース作成しました!こちらもよろしくお願いします
どんなシステムなのか??
最初に本システムの概要を紹介します。
ESP32自体はプログラミングしない
まずESP32にはサンプルスケッチを書き込んでおきます。
そのため、ESP32を直接Arduinoでプログラミングすることはありません。まぁ流石に使いづらいので、Wi-Fi設定はスマホからやれる程度には改造しますが。Pythonで別途システムを構築する
本作のキモです。システム自体はPythonを使いPCで稼働させます。複数のカメラを同時に監視可能
システムを別個に構築しているのでハードウェアリソースの許す限りいくらでも同時監視が可能なシステムです。録画や撮影が可能
画像処理はPythonシステム側で行うので録画や撮影を行うことができます。OpenCVを用いますので動体検知も可能です。Windows/Linux/RaspberryPiで動作可能
Python言語を使う都合上OSに囚われづらいシステムとなっています。
筆者はRaspberryPi4上で動作させています。
操作画面
まずは操作画面の紹介です。
本システムの利用の流れは次の通りです。
ESP32CAMにArduinoのサンプルスケッチを書き込む
ArduinoからESP32CAM用のサンプルスケッチを書き込んで、自宅のWi-Fiに接続します。
ここでIPアドレスを調べておいてください。本システムを稼働して管理ページにアクセスする
初回はまっさらなページです。カメラを追加する
ESP32CAMのIPアドレスを指定してシステムにカメラを追加します。設定を変更する
カメラメニューから追加したカメラをIDで指定して設定を変更できます。
主に設置向きに応じて回転や反転を行います。監視/撮影をする
プレビューボタンを押すことでESP32CAMから映像を転送します。
録画ボタンを押すことで映像を動画として保存を開始し、撮影を押すことで画像として保存することができます。
ちなみに、以下でWi-Fi設定をあとから変えられたり、スケッチを無線で書き換えられるように改造したサンプルを紹介しています。
ESP32CAMの準備
ボードは"ESP32Wrover Module" 書き込むサンプルスケッチは"CameraWebServer"
私の改造版をつかうか、サンプルスケッチの画像の箇所を書き換えます。
解像度のみ任意です。解像度は電源を入れて最初に選択される解像度を指定しておくという意味があり、解像度が大きいとフレームレートが1FPSでなくなるので基本的に下げることをお勧めします。
モジュールタイプの変更
Wi-Fiの設定
解像度設定(なくても良い)
ESP32CAMにスケッチを書き込んだら一旦動作確認してみましょう。
ブラウザからESP32CAMにアクセスして画像のようなページにアクセス出来れば準備は完了です。
Pythonシステムの準備
Pythonツールを動かすにはいくつかのライブラリが必要なのでインストールします
OpenCV
動画化や画像処理で使用
※OSにより導入難易度が高いので注意Numpy
OpenCVで利用するので必要Flask
WEBシステム構築に必要cryptography
WEBシステム内で使用
ライブラリのインストールが出来たらシステムを起動します。
配布データの内容を確認し、Pythonプログラムを起動します。
ここで起動しない場合、きちんとライブラリがインストール出来ているか確認してください。エラーメッセージを確認する場合はダブルクリックで起動ではなく、コマンドプロンプトから起動させるとメッセージを確認できます。
ツールが起動出来たら管理ページにアクセスし、最初の手順で説明したようにカメラを追加します。
仕組み
なぜPython x ESP32-CAMという暴挙が可能なのか。それはサンプルスケッチで紹介はされていませんが、ストリームではなく画像を取得するURLが存在することにあります。ここにアクセスすることで画像を一枚取得できます。
後は簡単です。取得した画像をOpenCVに回して回転や日付印字を行い、録画バッファに回したりそのまま保存すれば録画ができますし、それをクライアントに送信すれば疑似ストリーミングも可能です。
まとめ
ESP32-CAMは格安で監視システムが作れそうな素晴らしいモジュールでしたが、C言語で画像処理等は非常に難易度が高くサンプル以上に進んでいる例は殆ど見かけません。
そこで見方を変えて本体でプログラミングするのではなく外部に別のシステムを構築するという方法で本作が生まれました。Pythonであれば比較的簡単に画像処理なども組めるのでそれなりに凝った機能を実装できました。
システムの配布について
配布情報は最上部で紹介されている動画説明から確認できます。
情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。