Ich muss eine Stereokamera für eine Computer-Vision-Anwendung synchronisieren. Die Synchronisation sollte bestmöglich sein, hoffentlich auf Millisekunden-Niveau. Ich möchte entweder als Video oder als Standbild etwa 10 FPS erhalten. Die Auflösungsanforderung liegt bei etwa 2 Mpix.
Die Anwendung wird ein mobiler Stereo-Straßen-/Geländescanner von einem Pkw sein, der tagsüber bis zu 100 km/h schnell ist (also gute Lichtverhältnisse). Laut diesem und diesem Video sollte Rolling Shutter kein Problem mit der Pi-Kamera bei FullHD sein .
Meine aktuelle Hardware-Suche ist bei einer Raspberry-Pi-Lösung gelandet. Ich denke grundsätzlich habe ich 2 Möglichkeiten damit:
Holen Sie sich zwei eigenständige Raspberry Pi-Einheiten mit jeweils einer Kamera. Synchronisieren Sie sie über einen externen GPIO-Trigger. Die Kosten betragen 2x25+2x16 = £82.
Holen Sie sich das neue Compute Module Development Kit und verbinden Sie beide Kameras mit dem Single Board. Koppeln Sie die beiden Kameras für eine simultane Auslösung per Software. Die Kosten betragen 126+16+16 = £158.
Werden beide Optionen ähnliche Synchronisierungsergebnisse haben? Außerdem möchte ich lieber eine Standbildausgabe als eine Videoausgabe, da ich sowieso bestimmte Frames aus dem Video extrahieren muss. Die Standbilder wären vorzugsweise unkomprimiert, um keine Bilddetails zu verlieren, aber JPEG ist auch in Ordnung. Ich bin mir nicht sicher, wie viele FPS der externe GPIO-Trigger mit Standbild machen kann.
Die Kosten sind für mich ein wichtiger Faktor. Die Verwendung von USB-Webcams wird wahrscheinlich nicht funktionieren, da USB-Geräte nicht einfach synchronisiert werden können (siehe Link unten). Ich freue mich über eine weitere Hardwareempfehlung, wenn jemand bessere Sachen in einer ähnlichen Preisklasse kennt.
Der Ursprung dieser Frage liegt auf der Website von Video Production SE in einem Beitrag mit dem Titel „ Synchronisierte Stereovideos mit 2 Kameras zu niedrigen Kosten erstellen“ . Dieser Link kann etwas mehr Hintergrund enthüllen.
Ich denke, Ihre beiden Optionen/Ideen (Pi und Compute) können funktionieren.
Raspberry Pi GPIO ist schnell genug (10 MHz+), das Lesen des GPIO-Eingangsstatus jede Millisekunde ist überhaupt kein Problem.
Wenn Sie Daten auf dem Raspberry Pi mit OpenCV oder ähnlichem verarbeiten möchten - erwarten Sie nicht zu viel, die Pi-CPU ist nicht so schnell, wie manche Leute denken. Führen Sie einige Experimente mit vorab aufgezeichneten Videos oder Bildern durch und sehen Sie, wie viel Rechenleistung Sie haben.
Wenn Sie feststellen, dass Raspberry nicht schnell genug ist, können Sie Folgendes verwenden (für die Bildverarbeitung):
Nvidia Jetson TK1-Entwicklungskit
- NVIDIA Kepler GPU with 192 CUDA cores
- NVIDIA 4-Plus-1 quad-core ARM Cortex-A15 CPU
- 2 GB memory, 16 GB eMMC
- Gigabit Ethernet, USB 3.0, SD/MMC, miniPCIe
- HDMI 1.4, SATA, Line out/Mic in, RS232 serial port
- Expansion ports for additional display, GPIOs, and high-bandwidth camera interface
Ich weiß nicht viel darüber, habe nur irgendwo über diese Nvidia-Produkte gelesen, aber es kostet weniger als das Pi-Compute-Modul (192 USD sind 115 GBP?), Und es gibt viel mehr Rechenleistung.
Nach vielen Recherchen und sogar dem Versuch, 2 RPis mit jeweils einer Kamera für eine Frame-synchronisierte Stereoaufnahme einzurichten, kam ich nicht wirklich dazu, die Synchronisation visuell genau zu messen, aber ich erkannte genau dies zu diesem Zeitpunkt aus verschiedenen Diskussionen und Tech Spezifikationen:
Obwohl es möglich ist, RPi-Boards selbst über ein gemeinsames GPIO-Signal zu synchronisieren (für welche Aufgabe auch immer), ist es nicht möglich, ihre Kameras für eine kontinuierliche Stereoaufnahme zu synchronisieren. Der Hauptgrund ist, dass die Kamerasensoren und -platinen keine externe Triggerfunktionalität unterstützen (weder v1 OmniVision OV5647 noch v2 Sony IMX219PQ Kameraplatine). Der OV5647 hat tatsächlich einen sogenannten FREX-Eingangspin , der für die Frame-Synchronisation verwendet werden könnte, aber er wird weder vom Sensor zur Platine geführt, noch wird er im offiziellen RPi-Kameratreiber/Software unterstützt. Das ArduCam-Board hat eine FREX-Pinbelegung an Bord, aber noch keine Software, um sie zu verwenden.
Es kann jedoch möglich sein, eine einzelne Aufnahme zu synchronisieren (kein kontinuierliches Stereo). Ich schätze, es gab ein Projekt für eine Bullet-Time-Fotografie . Ich habe ihren Python-Code auf Github untersucht(kann mich jetzt nicht an den genauen Projektnamen erinnern) - sie haben RPis über Ethernet synchronisiert und dann raspistill binär synchron für einen einzigen Schuss aufgerufen. Ich denke, das kann funktionieren, auch wenn es zu Beginn von Raspistill eine Verzögerung von 1000 ms gab, damit Kameras die Belichtung einstellen können (das Timeout ist bei allen Kameras gleich, daher sollte die Synchronisierung immer noch funktionieren). Ich denke jedoch, dass unterschiedliche Belichtungszeiten ein Problem mit PiFace sein können. Sobald Raspistill gestartet ist (und hoffentlich nach dem ersten Frame), wechselt der Sensor in den sogenannten „freilaufenden Modus“, in dem das Video vom Sensor mit einer bestimmten FPS gestreamt wird. Da jede Kameraplatine über einen eigenen Oszillator verfügt, sind die FPS für zwei Platinen niemals 100% gleich, selbst wenn sie gleichzeitig gestartet werden, und die Frames driften voneinander ab, je länger das Video läuft.
TL;DR:
Während es möglich sein mag, eine einzelne Stereoaufnahme zu synchronisieren, ist es nicht einfach möglich, zwei RPi-Kameraplatinen für eine kontinuierliche Stereoaufnahme zu synchronisieren, da die Sensoren der Kameras keine externe Triggerfunktion haben.
Kamil
Kamil
Kozuch
Benutzer3528438
Kozuch