Files
appRobotRender/setup/generateSets/README.docker.md
2026-06-02 17:16:24 +02:00

70 lines
2.6 KiB
Markdown

# Docker — Phase 1
Zwei getrennte Images (siehe `doc/docker_containerization_roadmap.md`):
| Image | Dockerfile | Zweck |
|---|---|---|
| `approbot/blender-renderer:4.5` | `Dockerfile.renderer` | Blender 4.5 headless → erzeugt Test-Szenen (Bilder, npz, Ground-Truth) |
| `approbot/pose-pipeline:latest` | `Dockerfile.pipeline` | schlanke Pose-Schätzung (das eigentliche Produkt) |
Beide teilen sich das `data/`-Volume: Der Renderer schreibt nach `data/simulation/SceneX`,
die Pipeline liest von dort und schreibt nach `data/evaluations/SceneX`.
## Bauen
```bash
cd setup/generateSets
docker compose build
```
Die Blender-Patch-Version steht in `Dockerfile.renderer` (`ARG BLENDER_VERSION=4.5.0`) —
muss unter download.blender.org existieren; bei Bedarf anpassen:
```bash
docker compose build --build-arg BLENDER_VERSION=4.5.3 renderer
```
## Rendern (Test-Daten erzeugen)
```bash
docker compose run --rm renderer --poses 8 # nur Pose 8
docker compose run --rm renderer # alle robot_test_poses
```
CPU-Rendering ist Default. Für GPU (Cycles, deutlich schneller): NVIDIA Container Toolkit
installieren und den `deploy:`-Block in `docker-compose.yml` einkommentieren.
## Pose-Pipeline ausführen
```bash
docker compose run --rm pipeline pipeline/run_pipeline.py data/simulation/Scene8
# -> data/evaluations/Scene8/robot_state.json
```
## Benchmark gegen Ground-Truth
```bash
docker compose run --rm pipeline benchmark/run_benchmark.py --scenes 8
docker compose run --rm pipeline benchmark/eval_pose.py \
data/evaluations/Scene8/robot_state.json data/simulation/Scene8/pose.json
```
## Hinweise
* **cv2 im Renderer** liegt in *Blenders* gebündeltem Python (nicht System-Python) —
siehe `Dockerfile.renderer`. Das frühere `Dockerfile` mit `pip3 install opencv-python`
installierte ins falsche Python und ist ersetzt.
* **robot.json wird beim Rendern mutiert** (Kamera/Pose pro Bild). Für einen einzelnen
sequentiellen Lauf ok; für *parallele* Render-Jobs muss das vorher auf eine temporäre
Config pro Job umgestellt werden (Roadmap Phase 2/4, Schlüsselpunkt 3).
* **Code wird als Volume gemountet** — Änderungen an Python-Scripten wirken ohne Rebuild.
Nur bei geänderten Abhängigkeiten (`requirements.pipeline.txt`) oder Blender-Version neu bauen.
## Portainer-Stack (optional)
`create-portainer-stack.bat` legt den Stack per Portainer-API an. In **cmd.exe** ausführen
(dort ist `curl` = curl.exe). In **PowerShell** zum Testen `curl.exe` statt `curl` verwenden,
da `curl` dort ein Alias für `Invoke-WebRequest` ist:
```powershell
curl.exe -k -H "X-API-Key: <KEY>" https://localhost:9443/api/endpoints
```