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