Acquisizione: calibrazione in tab, salvata con nome, archivio unico, caricamento con controllo risoluzione #91
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
ANALISI (passo 1, claude-opus-5-5)
PROBLEMA OGGI
DUE PIANI A FILE DISGIUNTI (contratto sotto, identico in testa ai due prompt)
A servizio: scripts/calibrazione.py (Archivio), scripts/camera_service.py (rotte), test in scripts/tests.
TEST A: migrazione (vecchio JSON+npz -> libreria + attive, idempotente, nome doppio -> "(2)"); salva_nome/NomeGiaUsato/sovrascrivi; nome non valido; elimina_nome toglie da attive; leggi/leggi_mappa risolvono l'attiva; rotte 1-8 con sorgente cartella o finta (risoluzione uguale -> 200, diversa -> 409 col messaggio, nome sconosciuto 404, calcolo_id scaduto 404); GET /camera/calibration invariato per il backend; test esistenti aggiornati solo dove usavano save=true.
B pagina: scripts/calibrazione_pagina.py; test in scripts/tests/test_pagina_tab.py (contenuto della pagina servita: tab, id, rotte nuove usate, niente alert/confirm/prompt).
NON TOCCARE: src/ (backend e frontend), vendor/, packaging/, rotte e codice #87/#89/#90 non elencati.
Comando test: uv run --python 3.13 --extra vision-worker --extra dev --with-editable vendor/visionsuite/packages/vs-camera pytest scripts/tests -q
Prova d'insieme (passo 3, Opus): TMF da sorgente su daitarn, Itala 601020 2064x1544: calcolo da file (BMP Menoncin in C:\ProgramData\Tielogic\TieMeasureFlow\camera), salvataggio con nome, caricamento su camera:601020 (risoluzione diversa -> errore, anteprima viva), migrazione delle due calibrazioni esistenti.
CONTRATTO #91 (identico per i due piani; repo TieMeasureFlow, base ramo lavoro/daitarn-tmf-dxfcal
828471d)Richiesta Adriano 24/10/2026: acquisizione e calibrazione nella stessa pagina, due tab. Calibrazione sempre sulla sorgente selezionata nella tab Acquisizione o su un'immagine da file. Salvataggio con nome; piu' calibrazioni; archivio UNICO (non per sorgente). Caricando una calibrazione su una sorgente la risoluzione (larghezza x altezza in pixel) deve combaciare col frame della sorgente, altrimenti errore «non si puo' caricare» e l'acquisizione continua.
ARCHIVIO (scripts/calibrazione.py, classe Archivio, radice = cartella attuale <config_dir>, es. C:\ProgramData\Tielogic\TieMeasureFlow\acquisitore)
JSON = campi del calcolo attuali (px_per_mm, mm_per_px, rms_px, ..., image_width, image_height, metodo, square_mm, ...) + "nome", "origine" ("camera:601020" | "file:"), "calibrated_at".
leggi(sorgente) e leggi_mappa(sorgente) restano con la stessa firma e ora risolvono la calibrazione ATTIVA della sorgente (leggi aggiunge "nome" e "source"=sorgente). Cache delle mappe come oggi (per percorso + mtime).
ROTTE (scripts/camera_service.py)
-> 200 {...risultato, "calibrated_at", "origine", "calcolo_id": "", "overlay_png"}. Il servizio tiene in memoria gli ultimi 8 calcoli (dati + mappa) per calcolo_id.
404 «calcolo non piu' disponibile: ricalcolare»; 400 nome non valido; 409 «esiste gia' una calibrazione «X»» se esiste e sovrascrivi=false.
Diverse -> 409 «la calibrazione «X» e' per immagini W×H, la sorgente da' w×h: non si puo' caricare». Senza image_width/height -> 409 «la calibrazione «X» non ha la risoluzione registrata: non si puo' caricare». Nome sconosciuto -> 404. Ok -> 200 = stessa forma di GET /camera/calibration.
Lingua dei messaggi: italiano. Il ciclo anteprima non dipende da queste rotte: un errore di caricamento non lo ferma.
PAGINA (scripts/calibrazione_pagina.py, costante PAGINA, offline)
Soluzione
ESITO: fatto
COSA: pagina Acquisizione a due tab (Acquisizione | Calibrazione, anteprima in entrambe); calibrazione da sorgente selezionata o da file; salvataggio con nome in archivio unico (calibrazioni/ + attive.json), sovrascrittura con secondo clic; caricamento su sorgente solo con risoluzione uguale (409 altrimenti, anteprima viva); migrazione automatica delle calibrazioni per sorgente.
FILE: scripts/calibrazione.py (Archivio), scripts/camera_service.py (rotte calibrate, calibrazioni GET/POST/DELETE, calibrazione-attiva PUT; GET /camera/calibration invariato per il backend), scripts/calibrazione_pagina.py, scripts/tests/test_calibrazioni_archivio.py, test_calibrazioni_rotte.py, test_pagina_tab.py
COMMIT:
e7d5489a5e8472(servizio),d6cee498eb80e2(pagina), merge3c5c5f9b2f82fesu lavoro/daitarn-tmf-dxfcalPROVA: scripts/tests → 124 passed; TMF da sorgente su daitarn: migrazione reale camera:601654 e camera:folder → attive invariate; Playwright Edge 1400 e 400 px: calcolo da file calibration_135_1.bmp (71,111 px/mm), salva, 409 → sovrascrivi, Carica su Itala 601020 2064×1544 → 409 «non si può caricare», 57 anteprime in 6 s durante l'errore; PUT attiva su camera:folder (2464×2056) → 200 e anteprima X-Raddrizzato si, poi ripristinata.
MANCA: PC fiera con la prossima build daltanius (la migrazione girerà al primo avvio: backup consigliato di acquisitore/).