flowchart LR
PC_Screen -- Take_a_picture --> OV5647 <-- libcamera --> Pi4 <-- SSH --> PC -- opencv --> PC_Screen
PCの画面に時計と撮影結果画像を表示します。 それをPi4のV1カメラで撮影し、 libcamera経由でPi4で処理し、 結果をSSHでPCへWifi転送し、 PCの画面に時計と撮影結果画像を表示します。
この時計と、撮影結果画像との、時間差(遅れ)を測定しました。
c++ で libcamera.so を直接使うアプリを書いて実験しました。 アナログゲインは100、Frame duration limit は 16.666s(60fps)、それ以外はバニラです。
カメラ解像度 [width x height] | 遅延※ [ミリ秒] | SSH X転送の圧縮の有無 |
---|---|---|
64 x 64 | 76 | 無し |
128 x 128 | 77 | 無し |
160 x 160 | 80 | 無し |
192 x 192 | 180 | 無し |
224 x 224 | 445 | 無し |
256 x 256 | 639 | 無し |
320 x 320 | 1735 | 無し |
カメラ解像度 [width x height] | 遅延※ [ミリ秒] | SSH X転送の圧縮の有無 |
---|---|---|
64 x 64 | 83 | 有り |
128 x 128 | 273 | 有り |
160 x 160 | 711 | 有り |
192 x 192 | 1413 | 有り |
224 x 224 | 983 | 有り |
256 x 256 | 802 | 有り |
320 x 320 | 1082 | 有り |
※. 各ケースで3回サンプリングし、その平均としました。
・SSH X転送における圧縮は、速度に対して逆効果なので、今回のようなケースでは問題外となる。 ・64x64と、128x128では、レイテンシーに違いはほぼ無い。 ・160x160付近が、低レイテンシーのまま解像度を上げられる限界。 ・160x160を超えると、レイテンシーが急激に(指数関数的に)大きくなる。
Dawにおいて楽器演奏に支障が無いレイテンシーは10ミリ秒以下なので、人間の反応速度や感じ方の特性全般もその付近に鍵があると仮定するならば、遅延時間80ミリ秒台は不十分な値であるが、これ以上の性能をPi4->SSH(Wifi)->PCなシステム構成で出すのは無理っぽい希ガス。
Wifi経由によるカメラ付きラジコンをPi4で実現するには、V1カメラの解像度は160x160付近で作れば、遅延を最小にできる。 その際のSSH X転送は、圧縮無しにした方が遅延が小さい。