pipeline in linea single thread

This commit is contained in:
administrator
2026-05-19 08:52:44 +02:00
parent 98b43ce903
commit f728524ee6
43 changed files with 5245 additions and 154 deletions

View File

@@ -0,0 +1,82 @@
# 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.