80 lines
2.2 KiB
Markdown
80 lines
2.2 KiB
Markdown
# 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`](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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
git add data/calibration/
|
||
git commit -m "Kalibrierungsdaten für cam0–cam2"
|
||
```
|
||
|
||
---
|
||
|
||
## Ergebnis prüfen
|
||
|
||
```bash
|
||
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'])"
|
||
```
|