回答:
私はこの質問に答えることが最善であると思います。ただし、最初に注意しなければならないことがあります。私は想像力を伸ばしても、ファームウェアのエキスパートではありません。Piカメラモジュールがどのように機能するかについての私の大まかな理解は、picameraライブラリを作成し、Piフォーラムではるかに知識のあるファームウェア開発者と対話した経験に基づいています。ファームウェア開発者から矛盾する情報を聞いた場合、それは私ではなく、これに関する権限です。それが邪魔にならないように...
Piのカメラモジュールが初期化されるとすぐに、フレームがキャプチャされます。これらのフレームは(エンドユーザーに関する限り)ダンプされますが、カメラのファームウェア内にはさらに多くの処理が行われます。フレームを測定して、センサー(AGC)に適用するゲイン、AWB補正アルゴリズムに供給するホワイトバランスなどを決定します。たとえば、カメラを起動してすぐに記録を開始すると、通常は記録の最初の数フレームでホワイトバランスを修正します。
import picamera
import time
with picamera.PiCamera() as camera:
camera.resolution = (1280, 720)
camera.start_recording('video1.h264')
time.sleep(5)
camera.stop_recording()
ただし、録音を開始する前に遅延を設定すると、録音が開始されるまでにホワイトバランスが安定していることがわかります。
import picamera
import time
with picamera.PiCamera() as camera:
camera.resolution = (1280, 720)
time.sleep(5)
camera.start_recording('video2.h264')
time.sleep(5)
camera.stop_recording()
それで、画像をキャプチャしていない、またはビデオを記録していないときでも、カメラは常にフレームをキャプチャしているとすると、画像をキャプチャすることを選択した場合、実際にはどうなりますか?私たちは、アクティベートキャプチャにファームウェアを伝え、次のフレームのファームウェアのを待つかわりにビデオポートの静止ポートから画像をキャプチャしている場合があります、実際には(私たちに戻ってそれを渡す前に完了するために、多く含むに行くよりは、モードは切り替わりますが、ビデオポートに関心があるので無視してください)。
これが同期にとって何を意味するかを検討してください(特定の使用例)。カメラは、特定のポイントでフレームをキャプチャする準備ができていません。それはすでにフレームをキャプチャしており、フレームを要求すると、利用可能になる次の完全なフレームを渡します。カメラのフレームを同期させるには、すべてのカメラをまったく同時に初期化する必要があり、その後、内部クロックを正確に同期させて実行する必要があります(カメラには独自の内部クロックがあります。パイの時計)。
悲しいことに、これは本当に現実的な見通しではないと思います。正しく思い出せば、Piコンピュートモジュール(オンボードに2つのカメラポートがあり、同時に2つのカメラモジュールをサポートします)は、ファームウェアでいくつかの特別な呼び出しを使用して、2つのモジュールが単一のクロック信号を使用するようにします(これはハードウェアレベルで動作しますが、計算モジュールに固有の何かを使用していると思います); 4つのPiで同じようなことをするとは想像できません。
更新:
ある程度の合理的なネットワークの知識(UDPブロードキャストパケットなど)で大まかな同期をとることが可能であることを付け加えておきます。言い換えると、ネットワーク上のすべてのPiを1ミリ秒以内にキャプチャをトリガーすることが可能です(イーサネットのような適切な低遅延ネットワークを想定)。ただし、前述のように、すべてのカメラが実際に動作することは保証されません。同時にフレームをキャプチャします。結果のキャプチャの開始時間の間には、最大でフレーム分のラグ(およびネットワーク遅延)があります。
そのレベルの同期で十分な場合は、picameraの上に私がこのプロジェクトのために書いた別のプロジェクトであるcompoundpiプロジェクトをチェックしたいと思うかもしれません。