Files
flywms/aggiornamento-2026-05-16-09-03.md
2026-05-16 09:10:48 +02:00

71 lines
2.1 KiB
Markdown

# Aggiornamento 2026-05-16 09:03
## Decisione
Separare il ritmo della preview dal ritmo di inferenza YOLO.
Motivo: il video sorgente e' circa 30 fps, ma la pipeline completa non deve necessariamente elaborare ogni frame. Per la demo e per la futura pipeline reale e' piu' utile mantenere bassa la latenza, lasciando che la visualizzazione e YOLO abbiano frequenze configurabili.
## Implementazione
Aggiunti due parametri in `flywms_navigation.ini` e nel parser di `flywms_navigation.py`:
- `preview_fps`: FPS massimo per lettura/preview realtime. `0` usa il framerate della sorgente.
- `yolo_fps`: FPS massimo per inferenza YOLO. `0` esegue YOLO su ogni frame di preview.
Valori iniziali:
```ini
preview_fps = 24.0
yolo_fps = 15.0
```
La stessa logica e' stata applicata anche alla shell DearPyGUI `flywms_navigation_gui.py`.
## Nota su video e camera reale
Con un file video, questi parametri simulano il ritmo desiderato della preview e limitano l'inferenza YOLO. In questa versione single-thread, se YOLO e' piu' lento del target, non si puo' arrivare al target.
Con una camera reale, il codice prova anche a impostare `CAP_PROP_FPS` quando la sorgente e' webcam/camera. Questo e' best effort: molti driver ignorano il valore. Il metodo robusto resta scartare frame lato software e usare sempre il frame piu' recente disponibile.
## Verifiche
Compilazione:
```powershell
python -m py_compile flywms_navigation.py flywms_navigation_gui.py
```
Lettura config:
```text
24.0 15.0
```
Run headless con `yolo_fps=15` su CPU:
```text
fps=5.5 yolo_fps=5.5
```
Interpretazione: su CPU il ciclo non raggiunge 15 fps, quindi YOLO gira comunque su ogni frame effettivamente processato.
Run headless con `yolo_fps=2`:
```text
fps=13.7 yolo_fps=2.0
```
Interpretazione: il throttling YOLO funziona; la preview procede piu' veloce dell'inferenza.
## Prossimo passo
Quando arrivera' la GPU, rimisurare con:
- `preview_fps = 24.0`;
- `yolo_fps = 15.0`;
- device GPU Ultralytics;
- GUI DearPyGUI attiva.
Se il costo GUI diventera' dominante, separare in seguito thread inferenza e thread GUI con stato latest-frame.