Files
appRobotWebcam/setup
2026-06-10 07:51:34 +02:00
..
2026-06-10 07:51:34 +02:00
2026-06-10 07:51:34 +02:00
2026-06-10 07:51:34 +02:00

Kamera-Kalibrierung einrichten

Jede Kamera braucht eine Kalibrierungsdatei (calibration.npz), die Kameramatrix und Verzerrungskoeffizienten enthält.
Die Datei wird beim Serverstart einmalig in den RAM geladen und über GET /api/cameras/{id}/calibration ausgeliefert.


Voraussetzungen

pip install opencv-python numpy requests

Schritt 1 Schachbrettmuster drucken

Datei: checkerboard_11x8_25mm.pdf

  • A4 Querformat, 100 % drucken (keine Skalierung, kein „An Seite anpassen")
  • Muster: 11 × 8 Felder → 10 × 7 innere Ecken, 25 mm pro Feld
  • Auf festes Papier oder Karton drucken; flach und verwindungssteif halten

Schritt 2 Fotos aufnehmen

Server läuft auf thinkcentre.local:8444. Skript schießt für alle Kameras gleichzeitig Hires-Aufnahmen und legt sie in test/files/{camId}/ ab:

python test/grabSnapShot.py

Das Schachbrettmuster dabei aus verschiedenen Winkeln und Positionen halten (mind. 1520 Aufnahmen pro Kamera).
Bilder landen unter test/files/cam0/, test/files/cam1/, test/files/cam2/.


Schritt 3 Kalibrierung berechnen

Für jede Kamera einmal ausführen:

python setup/calibrate.py test/files/cam0 data/calibration/cam0/calibration.npz
python setup/calibrate.py test/files/cam1 data/calibration/cam1/calibration.npz
python setup/calibrate.py test/files/cam2 data/calibration/cam2/calibration.npz

Ein guter RMS-Wert liegt unter 0.5 px. Wenn der Wert zu hoch ist:

  • Bilder mit schlechter Beleuchtung oder Bewegungsunschärfe löschen
  • Schachbrettmuster flacher halten
  • Mehr Aufnahmen aus verschiedenen Winkeln machen

Schritt 4 Dateien committen

Die .npz-Dateien sind Deployment-Konfiguration und gehören ins Repository:

git add data/calibration/
git commit -m "Kalibrierungsdaten für cam0cam2"

Ergebnis prüfen

curl http://thinkcentre.local:8444/api/cameras
# → jede Kamera mit "calibrationUrl": "/api/cameras/cam0/calibration"

curl -o cam0.npz http://thinkcentre.local:8444/api/cameras/cam0/calibration
python -c "import numpy as np; d=np.load('cam0.npz'); print(d['camera_matrix'])"