# Aggiornamento 2026-05-16 10:14 ## Obiettivo Cambiare il payload destinato all'OCR: non piu' solo il crop del gaylord, ma il crop ravvicinato dell'etichetta associata al gaylord centrato. Il gaylord resta l'ancora semantica: serve per sapere a quale oggetto appartiene l'etichetta. L'etichetta diventa il target ottico da centrare e fotografare. ## Decisioni - L'etichetta accettata deve avere classe `etichetta`. - Il bbox etichetta deve essere contenuto nel bbox del gaylord centrato. - Detection etichetta fuori da un gaylord vengono ignorate. - Se il gaylord e' centrato ma non c'e' etichetta contenuta, viene loggato `ETICHETTA_NON_TROVATA` e si attende un frame successivo. - Il crop etichetta usa padding configurabile. - Il sistema mantiene sia snapshot/crop gaylord sia crop etichetta. - Il movimento drone verso l'etichetta e il ritorno al gaylord sono simulati in pixel. ## Parametri aggiunti In `flywms_navigation.ini`: ```ini label_class = etichetta label_payload_pad_ratio = 0.20 label_move_sec = 2.0 label_stabilization_sec = 1.0 label_return_sec = 2.0 ``` ## Comportamento OpenCV Quando il gaylord centrato ha un'etichetta associata: 1. si ferma la scansione; 2. viene disegnata una freccia nera bidirezionale dal centro del gaylord al centro dell'etichetta; 3. vengono mostrati i comandi di centraggio etichetta; 4. viene simulato il movimento verso l'etichetta; 5. viene simulata la stabilizzazione; 6. viene salvato il crop dell'etichetta; 7. viene simulato il ritorno al centro gaylord; 8. viene ripresa la scansione. La finestra `flywms etichetta` mostra il crop dell'etichetta. La finestra `flywms snapshot` continua a mostrare il crop/debug del gaylord. ## Metadati Ogni record JSONL ora include: - `gaylord_bbox`; - `label_bbox`; - `movement_vector_px`; - `debug_frame_path`; - `ocr_payload_path`; - `label_payload_path`. ## Verifiche Compilazione: ```powershell python -m py_compile flywms_navigation.py flywms_navigation_gui.py ``` Run headless ordinario su 80 frame: ```text det=2 labels=1 tracks=2 snapshots=0 ``` Nessuno snapshot nei primi 80 frame perche' il gaylord non era ancora sulla linea stretta di scatto. Run headless forzato con tolleranza larga: ```powershell python flywms_navigation.py --no-display --max-frames 6 --remote-ack-timeout-sec 0 --label-move-sec 0 --label-stabilization-sec 0 --label-return-sec 0 --snapshot-line-tolerance-ratio 0.20 --snapshot-output-dir navigate_snapshots_test --preview-fps 0 --yolo-fps 0 ``` Risultato: ```text SNAPSHOT 0001 track=2 frame=3 pos=gaylord 1 CENTRA_ETICHETTA dx=+314px dy=-498px SCATTA_FOTO_ETICHETTA snapshot_0001_track_002_label_payload.jpg INVIA_ROI_REMOTA snapshot_0001_track_002_label_payload.jpg ``` Crop generati: ```text label_payload: (94, 371, 3) ocr_payload/gaylord: (1079, 1114, 3) ``` ## Limiti noti - Il tracking etichetta non e' ancora un tracker separato; per ora usa la detection etichetta contenuta nel gaylord durante la finestra candidata. - Se piu' etichette sono contenute nello stesso gaylord, viene scelto un fallback deterministico. In condizioni corrette non dovrebbe accadere. - La GUI DearPyGUI e' stata aggiornata solo per non regredire, ma la validazione visuale di questa fase e' pensata sulle finestre OpenCV.