acquisitore: immagine viva nella tab Calibrazione e «Blocca immagine» per calcolare su quella #94

Closed
opened 2026-10-24 15:15:36 +00:00 by Adriano · 1 comment
Owner

Richiesta Adriano 24/10/2026: nella tab Calibrazione far vedere comunque l'immagine acquisita; con un bit (casella) bloccare l'immagine e usare quella per lanciare la calibrazione.

ANALISI (Opus, base ramo lavoro/daitarn-tmf-dxfcal 800ec41)
SERVIZIO scripts/camera_service.py

  1. bloccati: dict sorgente -> copia del frame grezzo pieno, sotto lo stesso lock di grezzi.
  2. POST /camera/blocca json {source}: copia grezzi[source] in bloccati[source] -> 200 {source, larghezza, altezza}; 404 «nessun frame: avviare l'anteprima o scattare» se grezzi non ha la sorgente; 400 source mancante.
  3. DELETE /camera/blocca?source=S -> 204 sempre (idempotente).
  4. Dove oggi si fa grezzi.pop(nome) (rimozione immagine, chiusura sorgente) si toglie anche bloccati[nome].
  5. POST /camera/calibrate: nuovo Form bloccata: bool = False. Se true e nessun image: frame = bloccati[nome] (nessun grab, nessun lock camera); 409 «nessuna immagine bloccata su questa sorgente» se manca. origine = nome sorgente come oggi; nel corpo in piu' "bloccata": true|false.
    PAGINA scripts/calibrazione_pagina.py
  6. Tab Calibrazione, sezione Calibrazione, sotto la riga Sorgente: riquadro immagine (img id=immagineCalTab, testo vuoto id=vuotoCalTab «Nessuna immagine: «Scatta» o avviare l'anteprima nella tab Acquisizione»), riga con pulsante «Scatta» (id=scattaCal) e casella «Blocca immagine» (id=bloccaImg), messaggio id=msgBlocco. Larghezza piena della scheda, a 400 px nessuno scorrimento.
  7. Il ciclo anteprima NON si sospende piu' aprendo la tab Calibrazione (togliere A.riprendi in scegliTab): se e' attivo continua e ogni frame grezzo va sia in #immagine sia in #immagineCalTab (stesso blob URL). Scatta (anche scattaCal) aggiorna entrambe.
  8. bloccaImg acceso: POST /camera/blocca {source}; ok -> #immagineCalTab non si aggiorna piu' (resta il frame bloccato), msgBlocco verde «Immagine bloccata W×H: «Calcola» usa questa», scattaCal disabilitato. Errore -> casella spenta, msgBlocco rosso col dettaglio. Spento: DELETE /camera/blocca, l'immagine torna a seguire il ciclo.
  9. Calcola: con bloccaImg acceso manda source + square_mm + bloccata=true (l'anteprima puo' continuare); spento come oggi (grab nuovo; durante il calcolo niente anteprime in volo, regola esistente). origineCalcolo dice «immagine bloccata» quando bloccata=true.
  10. Cambio sorgente o rimozione immagine: casella spenta, DELETE /camera/blocca sulla sorgente vecchia, riquadro svuotato.
  11. Nota della tab: togliere «l'anteprima resta sospesa finché questa tab è aperta», dire che si puo' bloccare l'immagine.
    NON TOCCARE: scripts/calibrazione.py, archivio, rotte calibrazioni/attiva, combo #93, cache sorgenti #92.
    TEST: servizio: blocca senza frame 404; anteprima poi blocca 200 con W×H; calibrate bloccata=true usa la copia anche dopo un'anteprima nuova con frame diverso e senza grab (sorgente finta che conta i grab); bloccata senza copia 409; DELETE 204. Pagina: id e testi nuovi, scegliTab non ferma piu' il ciclo, Calcola manda bloccata. pytest scripts/tests tutti verdi (base 152), node --check. Prova d'insieme Playwright fatta da Opus.
Richiesta Adriano 24/10/2026: nella tab Calibrazione far vedere comunque l'immagine acquisita; con un bit (casella) bloccare l'immagine e usare quella per lanciare la calibrazione. ANALISI (Opus, base ramo lavoro/daitarn-tmf-dxfcal 800ec41) SERVIZIO scripts/camera_service.py 1. bloccati: dict sorgente -> copia del frame grezzo pieno, sotto lo stesso lock di grezzi. 2. POST /camera/blocca json {source}: copia grezzi[source] in bloccati[source] -> 200 {source, larghezza, altezza}; 404 «nessun frame: avviare l'anteprima o scattare» se grezzi non ha la sorgente; 400 source mancante. 3. DELETE /camera/blocca?source=S -> 204 sempre (idempotente). 4. Dove oggi si fa grezzi.pop(nome) (rimozione immagine, chiusura sorgente) si toglie anche bloccati[nome]. 5. POST /camera/calibrate: nuovo Form bloccata: bool = False. Se true e nessun image: frame = bloccati[nome] (nessun grab, nessun lock camera); 409 «nessuna immagine bloccata su questa sorgente» se manca. origine = nome sorgente come oggi; nel corpo in piu' "bloccata": true|false. PAGINA scripts/calibrazione_pagina.py 6. Tab Calibrazione, sezione Calibrazione, sotto la riga Sorgente: riquadro immagine (img id=immagineCalTab, testo vuoto id=vuotoCalTab «Nessuna immagine: «Scatta» o avviare l'anteprima nella tab Acquisizione»), riga con pulsante «Scatta» (id=scattaCal) e casella «Blocca immagine» (id=bloccaImg), messaggio id=msgBlocco. Larghezza piena della scheda, a 400 px nessuno scorrimento. 7. Il ciclo anteprima NON si sospende piu' aprendo la tab Calibrazione (togliere A.riprendi in scegliTab): se e' attivo continua e ogni frame grezzo va sia in #immagine sia in #immagineCalTab (stesso blob URL). Scatta (anche scattaCal) aggiorna entrambe. 8. bloccaImg acceso: POST /camera/blocca {source}; ok -> #immagineCalTab non si aggiorna piu' (resta il frame bloccato), msgBlocco verde «Immagine bloccata W×H: «Calcola» usa questa», scattaCal disabilitato. Errore -> casella spenta, msgBlocco rosso col dettaglio. Spento: DELETE /camera/blocca, l'immagine torna a seguire il ciclo. 9. Calcola: con bloccaImg acceso manda source + square_mm + bloccata=true (l'anteprima puo' continuare); spento come oggi (grab nuovo; durante il calcolo niente anteprime in volo, regola esistente). origineCalcolo dice «immagine bloccata» quando bloccata=true. 10. Cambio sorgente o rimozione immagine: casella spenta, DELETE /camera/blocca sulla sorgente vecchia, riquadro svuotato. 11. Nota della tab: togliere «l'anteprima resta sospesa finché questa tab è aperta», dire che si puo' bloccare l'immagine. NON TOCCARE: scripts/calibrazione.py, archivio, rotte calibrazioni/attiva, combo #93, cache sorgenti #92. TEST: servizio: blocca senza frame 404; anteprima poi blocca 200 con W×H; calibrate bloccata=true usa la copia anche dopo un'anteprima nuova con frame diverso e senza grab (sorgente finta che conta i grab); bloccata senza copia 409; DELETE 204. Pagina: id e testi nuovi, scegliTab non ferma piu' il ciclo, Calcola manda bloccata. pytest scripts/tests tutti verdi (base 152), node --check. Prova d'insieme Playwright fatta da Opus.
Adriano added the sviluppo label 2026-10-24 15:15:36 +00:00
Author
Owner

Soluzione

ESITO: fatto
RIF: gitea:Adriano/TieMeasureFlow#94, ramo lavoro/daitarn-tmf-dxfcal, commit 9beaf2e + 71daab1
COSA: tab Calibrazione con immagine della sorgente (ciclo anteprima non piu' sospeso) e casella «Blocca immagine»; Calcola con blocco usa la copia del frame grezzo tenuta dal servizio.
FILE: scripts/camera_service.py — bloccati, POST/DELETE /camera/blocca, /camera/calibrate bloccata=true (409 senza copia), _chiudi toglie la copia
FILE: scripts/calibrazione_pagina.py — immagineCalTab, scattaCal, bloccaImg, msgBlocco; A.bloccando: blocco dopo l'anteprima in volo, cosi' la copia e' il frame mostrato (71daab1)
PROVA: pytest scripts/tests → 185 passed; pagina servita da TMF riavviato contiene bloccaImg. Prova a mano: Adriano (ha chiesto di provare lui, niente Playwright).
MANCA: merge su V3.0.0 con #83-#85; build e PC fiera.

**Soluzione** ESITO: fatto RIF: gitea:Adriano/TieMeasureFlow#94, ramo lavoro/daitarn-tmf-dxfcal, commit 9beaf2e + 71daab1 COSA: tab Calibrazione con immagine della sorgente (ciclo anteprima non piu' sospeso) e casella «Blocca immagine»; Calcola con blocco usa la copia del frame grezzo tenuta dal servizio. FILE: scripts/camera_service.py — bloccati, POST/DELETE /camera/blocca, /camera/calibrate bloccata=true (409 senza copia), _chiudi toglie la copia FILE: scripts/calibrazione_pagina.py — immagineCalTab, scattaCal, bloccaImg, msgBlocco; A.bloccando: blocco dopo l'anteprima in volo, cosi' la copia e' il frame mostrato (71daab1) PROVA: pytest scripts/tests → 185 passed; pagina servita da TMF riavviato contiene bloccaImg. Prova a mano: Adriano (ha chiesto di provare lui, niente Playwright). MANCA: merge su V3.0.0 con #83-#85; build e PC fiera.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#94