Files
flywms/aggiornamento-2026-05-18-15-53.md
2026-05-19 08:52:44 +02:00

2.4 KiB

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:

python -m py_compile flywms_navigation.py flywms_wms_server.py flywms_paddleocr_worker.py flywms_navigation_gui.py

OpenCV:

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:

opencv_cuda True (720, 1280, 3) (720, 1280)

Run headless breve:

python flywms_navigation.py --no-display --max-frames 40

Risultato rilevante:

OpenCV CUDA: attivo
YOLO half precision: attiva

Misura inferenza YOLO sullo stesso frame:

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.