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. 15–20 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 cam0–cam2"
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'])"