pipeline in linea single thread
This commit is contained in:
82
aggiornamento-2026-05-18-15-53.md
Normal file
82
aggiornamento-2026-05-18-15-53.md
Normal 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.
|
||||
Reference in New Issue
Block a user