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
Erzeugt aus ~/Documents/Arbeitsplatte/IMG_1826 … IMG_1835.jpeg
(8 Aufnahmen derselben polierten Natursteinplatte, iPhone 16 Pro Max, 5712 x 4284 px).
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.
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.
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.
| 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.