Files
flywms/aggiornamento-2026-05-16-10-14.md
2026-05-19 08:52:44 +02:00

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_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:

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:

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.