API mit .npz

This commit is contained in:
chk
2026-06-10 07:51:34 +02:00
parent c76cbd39de
commit cdb3165fad
8 changed files with 289 additions and 4 deletions

79
setup/README.md Normal file
View File

@@ -0,0 +1,79 @@
# 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. 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:
```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 cam0cam2"
```
---
## 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'])"
```