M5Stack×TTGO Camera 玄関カメラ用デモの高速化

M5Stackと、 中国で 約2000円で売られているTTGO T-Cameraを使って製作した、玄関カメラシステム用の画像転送速度を(少しだけ)高速化しました。

(参考)下図は前回の記事です。

前回の課題と今回の対策の概要

前回、Wi-Fi玄関カメラの製作方法について、紹介しましたが、撮影後、画像が転送されるまでの時間が長い(約5秒)という課題がありました。そこで、HTTP処理部を見直し、画像転送速度の高速化を図り、約0.4fpsの動画再生(といっても、ほとんど紙芝居)に対応しました。

動かし方

GitHubのソフトを更新しましたので、前回と同じようにダウンロードして下さい。人感センサ反応中(ずっと反応し続けている状態)に動画再生モードになります。

今回の対策内容

主にHTTP処理部の対策を行いました。以下に4月30日のコミットからの変更点を記します。

  • HTTP処理部の高速化
    • 受信バッファにRAMを使用(#define CAMERA_BUF_ENで切替可能)
    • 画像データの受信完了にHTTPヘッダ内のContent-Lengthを使用
  • 人感センサ反応中に繰り返し画像取得を実行(検知信号の受信で動画を開始、検知完了信号で動画を停止)
  • ピンポン音の追加(人感センサ検知時に「ピンポン」音)

動作確認結果

QVGA(320 x 240)の画像で、約0.4fpsの動画再生が行えるようになりました。再生中のログのようすを以下に示します。「Loading image ”」は取得データをRAMから取得したときに表示されます。

 HTTP://192.168.0.2/cam.jpg
Recieving…HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 12000
Connection: close
loading…………http END
12000 Bytes, 271ms, Done
Loading image '', 12000 bytes
HTTP time :483 ms
JPEG time :1976 ms
Total time:2459 ms (0.407 f/s)

HTTP://192.168.0.2/cam.jpg
Recieving…HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 12766
Connection: close
loading………….http END
12766 Bytes, 271ms, Done
Loading image '', 12766 bytes

HTTP time :482 ms
JPEG time :1979 ms
Total time:2461 ms (0.406 f/s)
HTTP://192.168.0.2/cam.jpg
Recieving…HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 11010
Connection: close
loading………..http END
11010 Bytes, 270ms, Done
Loading image '', 11010 bytes

HTTP time :476 ms
JPEG time :1970 ms
Total time:2446 ms (0.409 f/s)

より滑らかな動画に(プログラム変更なし)

HTTP処理に要する時間が0.5秒程度、JPEG処理(表示を含む)が2秒程度かかっています。

撮影解像度をQQVGA(var = framesize, val = 0)に落とすことで 、HTTP処理時間とJPEG処理時間の両方を短縮くすることができます。確認したところ、現状のプログラムのままで、0.8fpsの滑らかな表示にすることが出来ました。しかし、広角レンズを使用した場合、人物の顔などが分かりにくくなってしまうので、かえって実用的ではなくなります。

さらなる高速化を目指したい方へ

HTTP処理部については、都度、TCP接続を切断しています。接続したままにする、またはUDPを使用することで、より高速化が図れるでしょう。

JPEG処理部では、デコード処理と描画処理を行っています。それぞれの時間を計測したことはありませんが、Adafruitのライブラリを使って1ドットずつ描画コマンドをコールしている点が課題だと思います。直接、LCDへコマンドを送るようにすれば、高速化することが出来るでしょう。

by ボクにもわかる電子工作
bokunimo.net