ESP32-CAMとRTSPを使って簡易ネットワークカメラを作ってみました。
#RTSPを利用した理由
ESP32-CAMはESP32と同じくArduino IDEを使って開発をすることができます。
サンプルとして「CameraServer」というスケットが用意されていてそれをESP32-CAMに書き込めば簡単にネットワークカメラとして利用することができます。
書き込み後、ESP32-CAMに割り当てられたIPアドレスにブラウザからアクセスすれば映像をみることができます。
さらに画質の調整や顔検出などがブラウザ上から操作可能になっており簡易的なネットワークカメラとしては十分な機能があります。
今回はそれを使わずにRTSPを用いてネットワークカメラを作成しました。
その一番大きな理由は「映像をPythonのプログラムで取得/利用できるようにする」ことを目標をしていたからです。
#ESP32-CAMを使う上での注意事項
ESP32-CAMにはWiFiとBluetoothの機能があります。
この機能を日本国内で利用するには総務省より「技適」を取得している必要があります。
技適未取得の製品を使用することは罰則の対象となる場合があります。
詳しくはこちらを参照
wikipedia: 技適マーク
無線基準認証制度
端末機器に関する基準認証制度について
2019/11/20より技適未取得の機器を実験用として利用することができる制度がスタートしました。
技適未取得機器を用いた実験等の特例制度
この制度は所定の届出を行うことで技適未取得を実験目的で使用することができるようになります。
ただし期間や利用できる無線の規格、周波数帯など一定の制限が設けられています。
今回はこちらの届出をおこないESP32-CAMを使用しています。
#ESP32-CAMのスケッチ
今回ESP32-CAMでRTSPを利用するにあたり下記のリポジトリを参考にしました
Micro-RTSP
オリジナルスケッチからの変更点
オリジナルのスケッチではESP32-CAMをSoftAPモード(アクセスポイントモード)で使用していました。それを変更し固定IPアドレスを設定しました。
WiFi.config(ip, gatway, subnet);
while (WiFi.status() != WL_CONNECTED)
{
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
delay(10000);
}
またオリジナルのスケッチではRTSPの他にWebServerも設定されていましたがスケッチの簡略化のため削除しました。
#Python側での処理
PythonではOpenCVでESP32-CAMからの映像を受け取り表示しています。
esp_ip = ''
esp32cam_camera = cv2.VideoCapture(f"rtsp://{esp_ip}:8554/mjpeg/1")
Python側では単に画像データとして扱えるので顔認識や物体認識などいろいろ活用することができます。
作成したソースはgitにアップしています。
ESP32CAM_RTSP