Package: arbeitsplatte

All packages Open in Cursor /Users/friedrichstr/ai-mac-studio/development/arbeitsplatte
Status
Description: Erzeugt aus `~/Documents/Arbeitsplatte/IMG_1826 … IMG_1835.jpeg`
Port: —
Venv: venv present /Users/friedrichstr/ai-mac-studio/development/arbeitsplatte/.venv/bin/python
Git: not a git repo
File tree
arbeitsplatte/
  out/
    checks/
    alt_arbeitsplatte_kantenbasiert_2pxmm.png
    arbeitsplatte_mean_2pxmm.png
    arbeitsplatte_ortho_2pxmm.tif
    arbeitsplatte_ortho_2pxmm_grid.png
    coverage.npy
    merge_agreement.png
    plan_1-10_A3.pdf
    plan_1-10_A4_2seiten.pdf
    plan_1-20_A4.pdf
    plan_1-5_A4_6seiten.pdf
    plan_uebersicht_A4_1-12.pdf
  probe/
    checker.png
    p1826.jpg
  src/
    IMG_1826.jpeg
    IMG_1827.jpeg
    IMG_1828.jpeg
    IMG_1829.jpeg
    IMG_1830.jpeg
    IMG_1833.jpeg
    IMG_1834.jpeg
    IMG_1835.jpeg
  thumbs/
    IMG_1826.jpg
    IMG_1827.jpg
    IMG_1828.jpg
    IMG_1829.jpg
    IMG_1830.jpg
    IMG_1833.jpg
    IMG_1834.jpg
    IMG_1835.jpg
    test1826.png
  work/
    A_detected.png
    all_8_thumbs.jpg
    arbeitsplatte_cutout_3200x1200_300dpi.png
    arbeitsplatte_ortho_enhanced_300dpi.png
    arbeitsplatte_ortho_master_300dpi.png
    arbeitsplatte_ortho_master_300dpi.tif
    arbeitsplatte_ortho_randlos_20x20cm_grid.png
    B_metric.png
    border_bot.jpg
    border_left.jpg
    border_right.jpg
    border_top.jpg
    c_1835_BL_refined.jpg
    c_1835_BL_snapped.jpg
    c_1835_BR.jpg
  affine_quads.json
  align.py
  ascii_map.py
  ascii_overlay.py
  ask1.py
  ask_all.py
  ask_vlm.py
  build.py
Register Info
Status: recent
Documentation
Documentation
README

Arbeitsplatte 3200 x 1200 mm – Planansicht aus 8 Fotos

Erzeugt aus ~/Documents/Arbeitsplatte/IMG_1826 … IMG_1835.jpeg (8 Aufnahmen derselben polierten Natursteinplatte, iPhone 16 Pro Max, 5712 x 4284 px).


1. Ergebnis – was in out/ liegt

Datei Inhalt
plan_1-10_A3.pdf Fertiger Plan, A3 quer, Maßstab exakt 1:10 (Platte = 320 x 120 mm auf Papier), 20-cm-Gitter mit cm-Zahlen, Maßlinien 3200/1200 mm, Maßstabsbalken
plan_1-10_A4_2seiten.pdf derselbe Plan 1:10 auf 2 x A4 quer (zum Zusammenkleben, mit Übersicht rot = jeweiliges Blatt)
plan_1-20_A4.pdf Plan 1:20 auf 1 x A4 quer
arbeitsplatte_ortho_2pxmm.tif Hochauflösendes Gesamtbild der Platte, frontale (orthogonale) Ansicht, 6400 x 2400 px = 2 px/mm, ohne Gitter
arbeitsplatte_ortho_2pxmm_grid.png dasselbe Bild mit 20-cm-Messgitter (orange = 1 m, grün = 20 cm, Zahlen in cm)
arbeitsplatte_mean_2pxmm.png Mittelwert statt Median der entzerrten Fotos (etwas weicher, dafür weniger Rauschen)
merge_agreement.png Abweichung der 8 Fotos untereinander nach der Entzerrung (dunkel = stimmen überein)
alt_arbeitsplatte_kantenbasiert_2pxmm.png Alternativvariante: nur Kantenerkennung ohne metrische Korrektur (siehe Abschnitt 5)
checks/IMG_xxxx_outline.jpg Kontrollbilder: roter Rahmen = verwendeter Plattenrand, gelb = automatisch gefundene Kanten

Die Maßstäbe wurden nachgeprüft: auf plan_1-10_A3.pdf misst ein Gitterfeld 20,0 mm (1 m = 100,0 mm), auf plan_1-20_A4.pdf 10,0 mm (1 m = 50,0 mm) – also genau 20 cm bzw. 1 m der realen Platte.


2. Vorgehen

  1. Bildinhalt geklärt. Ein lokales Vision-Modell (Ollama) hat jedes Foto beschrieben: dieselbe dunkle, blau geaderte polierte Platte, hängend an einem Kran mit orangem Vakuumheber, auf gepflastertem Hof; 3–4 verschiedene Kamerapositionen.
  2. Kamera kalibriert. EXIF: 24 mm Kleinbild-Äquivalent, f = 6,765 mm → Brennweite in Pixeln f = 24 · 5712/36 = 3808 px (Variante über die Diagonale: 3960 px). Gerechnet wurde mit f = 3960 px, Hauptpunkt in Bildmitte, keine Verzeichnung.
  3. Plattenrand automatisch gefunden. Pro Foto: grobe Viertel vom Vision-Modell → GrabCut-Segmentierung → jede der vier Kanten per Gradienten-Snapping auf die stärkste Kante in der Nähe gezogen (robuster RANSAC-Linienfit, Residuen 0,1–1,3 px).
  4. Gegen die Mehrbild-Konsistenz geprüft. Die 8 Fotos zeigen dieselbe Fläche von verschiedenen Standorten. Nach der Entzerrung müssen die Steinteilungen übereinstimmen; mit diesem Kriterium wurden die Ränder nachjustiert (mittlere Bildkorrelation 0,40 → 0,57; die beste Bildpaarung erreicht 0,86).
  5. Metrisch korrigiert. Jedes Viertel wurde minimal so verschoben, dass es exakt die orthogonale Ansicht eines 3200 x 1200 mm-Rechtecks durch die kalibrierte Kamera ist (Bedingung: Seitenverhältnis 2,667 und Orthogonalitätsfehler 0°, geprüft über die Homographie-Zerlegung K⁻¹H = λ[W·r₁, H·r₂, t]).
  6. Zusammengeführt. Alle 8 entzerrten Bilder auf 6400 x 2400 px (2 px/mm) gewarpt, pixelweise Median → Rauschen und bewegte Störer (Person, Kranhaken) werden stark unterdrückt; pro Pixel stehen bis zu 8 Stichproben zur Verfügung.

3. Prüfungen (alle nachvollziehbar)

  • Kantenfit-Residuen 0,1–1,3 px bei 50–88 % der Kantenlänge mit echtem Helligkeitssprung.
  • Homographie-Prüfung: für ein korrekt erkanntes Rechteck muss sich ein eindeutiger Brennweitenwert ergeben. Für das beste Segmentierungsergebnis ergab sich f = 3828 px – das passt auf 0,5 % zu den aus dem EXIF abgeleiteten 3808 px.
  • Semantische Kontrolle durch das Vision-Modell auf den entzerrten Bildern: Variante mit metrischer Korrektur zeigt die Platte randfüllend, die kantenbasierte Variante zeigt noch Fremdinhalt (Kranhaken, Stapel) → die metrisch korrigierte Variante wurde bevorzugt.
  • Druckmaßstab der PDFs nachgemessen (siehe Abschnitt 1).

4. Wichtige Einschränkung – bitte einmal prüfen

Die Fotos selbst ergeben, mit der kalibrierten Kamera gerechnet, für die sichtbare Plattenfläche ein Seitenverhältnis von etwa 1,8 : 1 – nicht 2,67 : 1 wie bei 3200 x 1200 mm. Das heißt: entweder ist die sichtbare Fläche nicht deckungsgleich mit der 1200 mm hohen Werkplatte (z. B. läuft unten der Stapel/Untergrund mit ins Bild), oder die Platte ist in Wirklichkeit größer (z. B. eine Rohplatte ~3200 x 1800 mm).

Konsequenz für dieses Ergebnis: der Plan wurde so gerechnet, dass die erkannte Fläche exakt als 3200 x 1200 mm abgebildet wird (Punkt 5). Damit stimmen Gitter und Maßstab mit Ihrer Vorgabe überein, und das Steinbild ist nicht verzerrt. Falls die Platte andere Maße hat, ist der Plan entsprechend neu zu rechnen (dauert Sekunden, siehe unten) – die Gitterteilung bleibt dabei immer 20 cm.

Schnellprüfung für Sie: out/checks/IMG_1829_outline.jpg öffnen. Liegt der rote Rahmen genau auf den vier Kanten der Platte? Wenn ja, ist alles korrekt. Wenn nein: die Eckpunkte in metric_quads.json (Prozent der Bildbreite/-höhe, Reihenfolge TL, TR, BR, BL) anpassen und

cd ~/ai-mac-studio
development/arbeitsplatte/.venv/bin/python development/arbeitsplatte/build.py
development/arbeitsplatte/.venv/bin/python development/arbeitsplatte/make_sheets.py

neu laufen lassen. Auch ein anderer Maßstab (z. B. 1:5 oder 1:25) oder eine andere Plattengröße ist damit in einer Minute erzeugt.

5. Alternativvariante

alt_arbeitsplatte_kantenbasiert_2pxmm.png verwendet nur die automatisch gefundenen Kanten ohne metrische Korrektur. Sie zeigt mehr vom Umfeld (unten Stapel/Hof) und ist etwas schärfer, bildet die Platte aber nicht maßstabsgerecht ab. Für einen Plan ist die Hauptvariante gedacht.

6. Werkzeuge / Skripte (in diesem Ordner)

Skript Zweck
coarse_quads.py, locate_quad.py, ask1.py, ask_all.py, compare_vlm.py Vision-Modell-Abfragen (lokal, Ollama)
edge_snap.py, edge_probe.py Kanten-Snapping und -Prüfung
refine_multi.py, refine_multi2.py, refine_affine.py Mehrbild-Konsistenz-Abgleich
metric2.py, metric_quads.py, metric_fit.py Kamera-/Rechteck-Prüfung, metrische Korrektur
build.py Gesamtbild + Gitter + Kontrollbilder
make_sheets.py PDF-Pläne (A3 1:10, A4 1:10 geteilt, A4 1:20)

Zwischenstände der Erkennung: coarse_quads.json (Viertel vom Vision-Modell), snapped_quads.json (nur Kanten-Snapping), refined_quads.json / refined_quads2.json (Mehrbild-Abgleich), metric_quads.json (verwendete Endwerte).

Rechenumgebung: .venv (Python 3.14, OpenCV 5.0, numpy, Pillow), ImageMagick, lokales Ollama-Vision-Modell (qwen3.8:27b-mlx, muse-glimmer) – alle Bilddaten blieben lokal.

Recent commits
No git history.