Saya pikir yang terbaik adalah menjawab pertanyaan ini dengan memberikan beberapa wawasan tentang bagaimana hal-hal bekerja sedikit lebih rendah. Pertama peringatan: Saya bukan ahli firmware oleh imajinasi; pemahaman saya yang agak kasar tentang cara kerja modul kamera Pi didasarkan pada pengalaman saya menulis perpustakaan picamera dan berinteraksi dengan pengembang firmware yang jauh lebih berpengetahuan di forum Pi. Jika Anda mendengar informasi kontradiktif dari para pengembang firmware, mereka yang berwenang dalam hal ini, bukan saya! Dengan itu keluar dari jalan ...
Segera setelah modul kamera Pi diinisialisasi, ia akan menangkap bingkai. Frame ini (sejauh menyangkut pengguna akhir) dibuang tetapi di dalam firmware kamera ada lebih banyak hal yang terjadi. Frame diukur untuk menentukan penguatan yang diterapkan pada sensor (AGC), keseimbangan putih untuk dimasukkan ke algoritma koreksi AWB, dll. Misalnya, jika Anda memulai kamera dan segera mulai merekam Anda biasanya akan melihat white-balance mengoreksi dirinya sendiri pada beberapa frame pertama dari rekaman:
import picamera
import time
with picamera.PiCamera() as camera:
camera.resolution = (1280, 720)
camera.start_recording('video1.h264')
time.sleep(5)
camera.stop_recording()
Namun, jika Anda menunda sebelum mulai merekam Anda akan melihat bahwa keseimbangan putih stabil pada saat perekaman dimulai:
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()
Jadi, mengingat bahwa kamera selalu menangkap bingkai bahkan ketika kita tidak mengambil gambar atau merekam video, apa yang sebenarnya terjadi ketika kita memilih untuk mengambil gambar? Kami memberi tahu firmware untuk mengaktifkan pengambilan, dan firmware menunggu bingkai berikutnya selesai sebelum meneruskannya kembali kepada kami (sebenarnya, jika Anda mengambil gambar dari port diam, bukan port video, ada banyak lagi yang terjadi termasuk mode beralih, tetapi Anda khawatir dengan port video jadi mari kita abaikan itu).
Pertimbangkan apa artinya ini untuk sinkronisasi (use case khusus Anda). Kamera tidak "siap" untuk mengambil bingkai pada titik tertentu. Ini sudah menangkap bingkai dan ketika Anda meminta satu itu akan memberi Anda yang lengkap berikutnya yang tersedia. Untuk menyinkronkan frame kamera, semua kamera harus diinisialisasi pada waktu yang sama, dan kemudian jam internal mereka harus berjalan tepat secara sinkron (kamera memiliki jam internal sendiri; mereka tidak bergantung pada Jam Pi).
Sayangnya, saya tidak berpikir ini benar-benar prospek yang realistis. Jika saya ingat dengan benar, modul penghitungan Pi (yang memiliki 2 port kamera terpasang dan mendukung 2 modul kamera secara bersamaan) menggunakan beberapa panggilan khusus dalam firmware untuk mendapatkan 2 modul menggunakan sinyal jam tunggal (saya tidak tahu bagaimana ini bekerja pada level perangkat keras tetapi saya menganggap itu menggunakan sesuatu yang spesifik untuk modul komputasi); Saya tidak bisa membayangkan bagaimana Anda akan melakukan sesuatu yang serupa di 4 Pis.
Memperbarui:
Saya harus menambahkan bahwa dimungkinkan untuk melakukan sinkronisasi kasar dengan beberapa pengetahuan jaringan yang wajar (mis. Paket siaran UDP). Dengan kata lain, dimungkinkan untuk mendapatkan semua Pi di jaringan untuk memicu penangkapan dalam satu milidetik satu sama lain (dengan asumsi jaringan latensi rendah yang layak seperti Ethernet), tetapi seperti dijelaskan di atas, masih tidak akan menjamin bahwa semua kamera akan benar-benar ambil bingkai pada saat yang sama; akan ada nilai keterlambatan bingkai (plus latensi jaringan) antara waktu mulai tangkapan yang dihasilkan.
Jika tingkat sinkronisasi itu cukup untuk orang, mereka mungkin ingin memeriksa proyek compoundpi yang merupakan proyek lain yang saya tulis di atas picamera hanya untuk tujuan ini.