100 lines
3.2 KiB
Markdown
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.
|