見出し画像

ESP32-CAMのCameraWebServerを解析してみる(その1)

ESP32-CAMのソフトとしてgithubに公開されているCameraWebServerを解析してみます💪

このソフトはESP32-CAMの全ての機能を使いこないしているようなのですが、ソフトにボリュームがあるので、自分の欲しい機能だけ抜き出すのが大変です。

このソフトの内容を解析して自分の欲しい機能だけを取り出してみましょう!

今回は撮影した画像をバイナリー転送でhttp転送している部分を切り抜いてみたいと思います。


ファイルは下記の4つで構成されています。

CameraWebServer.ino

app_httpd.cpp

camera_index.hcamera_pins.h

1、CameraWebServer.ino

ArduinoのメインファイルでWifiの設定、ESP32-CAMが使用しているカメラの初期設定を行います。

この部分に自分か買ったモデルが定義されているので、買ったモデルのカメラを調べてコメントアウトします。

//#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
//#define CAMERA_MODEL_AI_THINKER // Has PSRAM
//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM

ちなみに自分が買ったモデルはCAMERA_MODEL_AI_THINKERでした。

ここで定義したCAMERA_MODELはcamera_pins.hの中に定義されているCAMERA_MODELが選ばれます。

画像1

下記の部分でcameraに使われているセンサーを確認しています。自分のはOV3660ではなかったのでOV2640ということです。

sensor_t * s = esp_camera_sensor_get();
 // initial sensors are flipped vertically and colors are a bit saturated
 if (s->id.PID == OV3660_PID) {

2、camera_index.h

中を見ると、なにやらデータが定義されていますね。

const uint8_t index_ov2640_html_gz[] = {........

}

これはhtmlファイルでしかもgz形式で圧縮されたバイナリーデータです。

pythonを使えば下記のコードでhtmlデータに変換できるので興味ある方はやってみてください。

import gzip

ov2640 =bytes([

0x1F, 0x8B, 0x08, 0x08, 0x50, 0x5C, 0xAE, 0x5C, 0x00, 0x03
....
....
....
])
data = gzip.decompress(ov2640)
print(data.decode())

printで出力しているのでリダイレクト機能を使えば、ファイル化できます。

python encode.py > ov2640.html


3、app_httpd.cpp

ESP32-CAMをWebServerとして設定しています。

WebServer化にはesp_http_serverというライブラリーを使用していますね。

#include "esp_http_server.h"

このページをみると、なんとなく使い方が分かると思います!


このプログラムはバイナリーデータをそのままhttpで送信できるようです。💯

このプログラムを複雑化しているのが、顔認識の機能が入ってるところです。

今回はESP32-CAMで顔認識をやらせる必要もないので、次回はこの部分をそっくり削って必要な機能を取り出してみます!

では🤚

この記事が気に入ったらサポートをしてみませんか?