2.4 KiB
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
- preview e resize in
- Aggiunto parametro
yolo_halfinflywms_navigation.ini. - Aggiunti flag CLI:
--yolo-half--no-yolo-half
UltralyticsDetectorpassahalf=Trueamodel.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.