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

3.0 KiB

Aggiornamento 2026-05-18 14:58

Obiettivo

Integrare PaddleOCR nel server WMS demo, senza modificare la GUI e senza integrare ancora una interfaccia DearPyGUI.

Implementazione

Creato worker persistente:

C:\devel\flywms\flywms_paddleocr_worker.py

Il worker gira con il virtualenv isolato:

C:\devel\yolo-ocr\.venv-paddle-cpu\Scripts\python.exe

Il server WMS resta nel suo ambiente Python attuale e comunica col worker via stdin/stdout JSON. Questo evita il problema del Paddle GPU globale:

WinError 127 su cudnn_cnn64_9.dll

Server WMS

Aggiornato:

C:\devel\flywms\flywms_wms_server.py

Nuovo backend OCR:

--ocr-mode paddleocr

Backend disponibili:

paddleocr
easyocr
tesseract
fake

Il worker PaddleOCR resta caricato tra richieste successive, quindi non ricarica il modello a ogni snapshot.

Parametri INI

Aggiornato:

C:\devel\flywms\flywms_navigation.ini

Nuovi parametri:

wms_ocr_mode = paddleocr
wms_paddle_python = C:\devel\yolo-ocr\.venv-paddle-cpu\Scripts\python.exe
wms_paddle_worker_script = C:\devel\flywms\flywms_paddleocr_worker.py
wms_paddle_target_heights = 96
wms_paddle_variant_set = fast
wms_paddle_expected_digits = 6
wms_paddle_min_votes = 2
wms_paddle_min_confidence = 0.70

Aggiornati anche i timeout, perche' PaddleOCR CPU richiede piu' di 2 secondi:

remote_ack_timeout_sec = 10.0
wms_timeout_sec = 12.0

Logica OCR

La configurazione fast prova 3 varianti:

originale
CLAHE
CLAHE + sharpening

Il codice viene accettato solo se:

  • e' numerico;
  • ha 6 cifre;
  • ha almeno 2 voti tra le varianti;
  • supera la confidenza minima.

In caso contrario il server restituisce:

udc non determinato

Test eseguiti

Compilazione:

python -m py_compile flywms_wms_server.py flywms_paddleocr_worker.py

Test worker diretto:

input: snapshot_0019_track_123_label_payload_orig.jpg
output: 182368
votes: 3
backend: paddleocr

Test server locale senza GUI:

python C:\devel\flywms\flywms_wms_server.py --no-ui --port 8098 --received-dir C:\devel\flywms\wms_received_test --ocr-mode paddleocr --paddle-variant-set fast --fake-processing-sec 0

Richiesta 1:

ocr_text: 182368
ocr_backend: paddleocr
ocr_fallback_used: false
ocr_votes: 3
processing_ms: circa 8500 ms

Richiesta 2 con worker gia' caldo:

ocr_text: 187184
ocr_backend: paddleocr
ocr_fallback_used: false
ocr_votes: 3
processing_ms: circa 3200 ms

Nota prestazionale

Il primo snapshot paga il caricamento del worker PaddleOCR. Gli snapshot successivi sono piu' veloci ma restano nell'ordine di qualche secondo su CPU.

Per il demo va bene, ma il timeout del client deve restare piu' alto del vecchio valore da 2 secondi.

Prossimo passo

Avviare il server:

python flywms_wms_server.py

Poi avviare la navigazione:

python flywms_navigation.py --wms-enabled

Verificare nella finestra comandi che compaia il codice OCR restituito dal WMS.