# 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: " https://localhost:9443/api/endpoints ```