3.2 KiB
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_TROVATAe 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:
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:
- si ferma la scansione;
- viene disegnata una freccia nera bidirezionale dal centro del gaylord al centro dell'etichetta;
- vengono mostrati i comandi di centraggio etichetta;
- viene simulato il movimento verso l'etichetta;
- viene simulata la stabilizzazione;
- viene salvato il crop dell'etichetta;
- viene simulato il ritorno al centro gaylord;
- 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:
python -m py_compile flywms_navigation.py flywms_navigation_gui.py
Run headless ordinario su 80 frame:
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:
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:
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:
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.