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

100 lines
3.2 KiB
Markdown

# 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.