83 lines
2.4 KiB
Markdown
83 lines
2.4 KiB
Markdown
# Aggiornamento 2026-05-18 15:53
|
|
|
|
## Obiettivo
|
|
|
|
Portare subito le chiamate disponibili verso il percorso piu' veloce possibile, usando CUDA dove il costo di trasferimento CPU/GPU e' giustificato e attivando FP16 per YOLO su GPU.
|
|
|
|
## Modifiche
|
|
|
|
- Aggiunti helper OpenCV CUDA con fallback CPU:
|
|
- `opencv_cuda_available()`
|
|
- `cuda_resize(...)`
|
|
- `cuda_cvt_color(...)`
|
|
- Gli helper usano CUDA solo sopra una soglia minima di pixel, per evitare di rallentare crop piccoli con upload/download GPU.
|
|
- Applicati gli helper a:
|
|
- preview e resize in `flywms_navigation.py`
|
|
- preprocessing e preview in `flywms_wms_server.py`
|
|
- preprocessing nel worker `flywms_paddleocr_worker.py`
|
|
- conversione BGR/RGBA della GUI DearPyGUI in `flywms_navigation_gui.py`
|
|
- Aggiunto parametro `yolo_half` in `flywms_navigation.ini`.
|
|
- Aggiunti flag CLI:
|
|
- `--yolo-half`
|
|
- `--no-yolo-half`
|
|
- `UltralyticsDetector` passa `half=True` a `model.predict(...)` quando il device non e' CPU.
|
|
- Log iniziale aggiornato con:
|
|
- stato OpenCV CUDA
|
|
- stato YOLO half precision
|
|
|
|
## Verifiche
|
|
|
|
Compilazione:
|
|
|
|
```powershell
|
|
python -m py_compile flywms_navigation.py flywms_wms_server.py flywms_paddleocr_worker.py flywms_navigation_gui.py
|
|
```
|
|
|
|
OpenCV:
|
|
|
|
```text
|
|
cv2 4.12.0
|
|
cuda_devices 1
|
|
GUI: WIN32UI
|
|
NVIDIA CUDA: YES (ver 12.9.86, CUFFT CUBLAS NVCUVID NVCUVENC)
|
|
cuDNN: YES (ver 9.10.2)
|
|
```
|
|
|
|
Helper CUDA:
|
|
|
|
```text
|
|
opencv_cuda True (720, 1280, 3) (720, 1280)
|
|
```
|
|
|
|
Run headless breve:
|
|
|
|
```powershell
|
|
python flywms_navigation.py --no-display --max-frames 40
|
|
```
|
|
|
|
Risultato rilevante:
|
|
|
|
```text
|
|
OpenCV CUDA: attivo
|
|
YOLO half precision: attiva
|
|
```
|
|
|
|
Misura inferenza YOLO sullo stesso frame:
|
|
|
|
```text
|
|
iter 0 ms 8430.9
|
|
iter 1 ms 27.5
|
|
iter 2 ms 26.7
|
|
iter 3 ms 28.5
|
|
iter 4 ms 30.4
|
|
```
|
|
|
|
Il primo giro e' warm-up del modello. A regime YOLO e' circa 27-30 ms/frame sul frame di test, quindi compatibile con un target dimostrativo di 14-15 fps lato inferenza se la pipeline non introduce altri colli di bottiglia.
|
|
|
|
## Note tecniche
|
|
|
|
- OpenCV CUDA non accelera automaticamente tutte le chiamate: bisogna usare esplicitamente `cv2.cuda.*`.
|
|
- Per crop piccoli e preprocessing leggero puo' essere piu' veloce restare su CPU.
|
|
- PaddleOCR resta attualmente nel virtualenv CPU; gli helper nel worker fanno fallback se OpenCV CUDA non e' disponibile in quell'ambiente.
|
|
- La prossima ottimizzazione importante sara' evitare warm-up visibile all'avvio, eseguendo una inferenza iniziale prima del loop operativo.
|