Tôi nghĩ rằng tốt nhất là trả lời câu hỏi này bằng cách cung cấp một số cái nhìn sâu sắc về cách mọi thứ hoạt động thấp hơn một chút. Trước tiên, hãy cẩn thận: Tôi không phải là một chuyên gia phần mềm bởi bất kỳ sự tưởng tượng nào; sự hiểu biết khá sơ sài của tôi về cách thức hoạt động của mô-đun camera Pi dựa trên kinh nghiệm viết thư viện picamera của tôi và tương tác với các nhà phát triển phần mềm hiểu biết hơn nhiều trên các diễn đàn Pi. Nếu bạn nghe thông tin mâu thuẫn từ các nhà phát triển phần sụn, họ là người có thẩm quyền về vấn đề này, không phải tôi! Với cách đó ...
Ngay khi mô-đun máy ảnh của Pi được khởi tạo, nó đang chụp các khung hình. Những khung hình này (liên quan đến người dùng cuối) bị đổ nhưng bên trong phần sụn của máy ảnh còn nhiều thứ khác đang diễn ra. Các khung được đo để xác định mức tăng áp dụng cho cảm biến (AGC), cân bằng trắng để cung cấp cho thuật toán hiệu chỉnh AWB, v.v. Ví dụ: nếu bạn khởi động máy ảnh và bắt đầu ghi ngay lập tức bạn sẽ thấy cân bằng trắng chính nó trong một vài khung hình đầu tiên của bản ghi:
import picamera
import time
with picamera.PiCamera() as camera:
camera.resolution = (1280, 720)
camera.start_recording('video1.h264')
time.sleep(5)
camera.stop_recording()
Tuy nhiên, nếu bạn đặt độ trễ trước khi bắt đầu ghi, bạn sẽ thấy cân bằng trắng ổn định vào thời điểm ghi bắt đầu:
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()
Vì vậy, cho rằng máy ảnh luôn chụp được khung hình ngay cả khi chúng ta không chụp ảnh hoặc quay video, điều gì thực sự xảy ra khi chúng ta chọn chụp ảnh? Chúng tôi bảo phần sụn kích hoạt tính năng chụp và phần sụn chờ khung hình tiếp theo hoàn thành trước khi chuyển lại cho chúng tôi (thực tế, nếu bạn chụp ảnh từ cổng tĩnh thay vì cổng video, có nhiều hơn thế bao gồm chuyển đổi chế độ, nhưng bạn quan tâm đến cổng video vì vậy hãy bỏ qua điều đó).
Xem xét điều này có nghĩa là gì để đồng bộ hóa (trường hợp sử dụng cụ thể của bạn). Máy ảnh không "sẵn sàng" để chụp khung hình tại bất kỳ điểm cụ thể nào. Nó đã chụp một khung hình và khi bạn yêu cầu một khung hình, nó sẽ trao cho bạn khung hoàn chỉnh tiếp theo sẽ có sẵn. Để đồng bộ hóa khung hình của máy ảnh, tất cả các máy ảnh sẽ phải được khởi tạo cùng một lúc, và sau đó đồng hồ bên trong của chúng sẽ phải chạy chính xác (máy ảnh có đồng hồ bên trong riêng; chúng không dựa vào Đồng hồ của Pi).
Đáng buồn thay, tôi không nghĩ rằng đây thực sự là một triển vọng thực tế. Nếu tôi nhớ lại một cách chính xác, mô đun tính toán Pi (có 2 cổng camera trên bo mạch và hỗ trợ đồng thời 2 mô đun camera) sử dụng một số cuộc gọi đặc biệt trong phần sụn để có được 2 mô đun sử dụng tín hiệu đồng hồ duy nhất (tôi không biết làm thế nào hoạt động ở cấp độ phần cứng nhưng tôi giả sử nó sử dụng một cái gì đó cụ thể cho mô đun tính toán); Tôi không thể tưởng tượng làm thế nào bạn làm điều gì đó tương tự trên 4 Pis.
Cập nhật:
Tôi nên thêm rằng có thể thực hiện đồng bộ hóa thô với một số kiến thức mạng hợp lý (ví dụ: các gói phát sóng UDP). Nói cách khác, có thể lấy tất cả các Pi trên mạng để kích hoạt chụp trong vòng một phần nghìn giây của nhau (giả sử mạng có độ trễ thấp tốt như Ethernet), nhưng như được mô tả ở trên vẫn không đảm bảo rằng tất cả các camera sẽ thực sự chụp một khung hình cùng một lúc; sẽ có độ trễ tối đa của khung hình (cộng với độ trễ mạng) giữa thời gian bắt đầu của kết quả chụp.
Nếu mức độ đồng bộ hóa đó là đủ cho mọi người, họ có thể muốn kiểm tra dự án hợp chất là một dự án khác mà tôi đã viết trên đầu trang của picamera cho mục đích này.