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

3.8 KiB

Aggiornamento 2026-05-18 14:18

Obiettivo

Avviare la pista PaddleOCR come alternativa OCR tarabile sui crop etichetta, lasciando per ora da parte YOLO caratteri e senza integrare nulla in flywms.

Decisione tecnica

Per PaddleOCR non usiamo le annotazioni bbox cifra-per-cifra.

Usiamo invece l'etichetta intera:

crop_etichetta.jpg<TAB>codice_completo

Questo e' piu' coerente con l'obiettivo demo: dato un crop dell'etichetta, ottenere direttamente il codice UDC.

Dataset creato

Creato script:

C:\devel\yolo-ocr\tools\prepare_paddleocr_dataset.py

Generata cartella:

C:\devel\yolo-ocr\paddleocr-recognizer

Dataset:

C:\devel\yolo-ocr\paddleocr-recognizer\dataset

Conteggi:

train: 475 immagini
val:     5 immagini
test:    2 immagini

Il train contiene varianti aumentate dell'intera etichetta. Validation e test restano crop originali.

File prodotti:

dataset\train_list.txt
dataset\val_list.txt
dataset\test_list.txt
digit_dict.txt
preprocessed_preview\
README.md
README_OPERATIVO.md

Preprocessing/augmentation

Lo script genera varianti controllate:

  • upscale a altezza standard;
  • contrasto/luminosita';
  • CLAHE;
  • sharpening;
  • blur leggero;
  • rumore;
  • compressione JPEG;
  • rotazione leggera.

Le preview dei preprocessing per validation/test sono in:

C:\devel\yolo-ocr\paddleocr-recognizer\preprocessed_preview

Baseline multi-pass

Creato script:

C:\devel\yolo-ocr\tools\paddleocr_multipass_eval.py

Scopo:

  • provare piu' preprocessing sullo stesso crop;
  • passare ogni variante a PaddleOCR;
  • tenere solo le cifre;
  • preferire codici della lunghezza attesa;
  • salvare CSV e immagini varianti.

Blocco tecnico

PaddleOCR e' installato:

paddleocr 3.5.0
paddlex 3.5.2
paddlepaddle 3.3.1
paddlepaddle-gpu 3.3.1

Ma l'esecuzione fallisce prima dell'OCR:

OSError: [WinError 127] Impossibile trovare la procedura specificata.
Error loading C:\Python313\Lib\site-packages\paddle\..\nvidia\cudnn\bin\cudnn_cnn64_9.dll or one of its dependencies.

Ho provato ad aggiungere esplicitamente le cartelle nvidia\*\bin al loader DLL Windows nello script, ma non basta.

Il problema sembra nello stack Paddle GPU/CUDA/cuDNN globale, non nel dataset.

Ambiente isolato

Per non modificare lo stack globale, creato un virtualenv dedicato:

C:\devel\yolo-ocr\.venv-paddle-cpu

Installati nel virtualenv:

paddlepaddle==3.3.1
paddleocr==3.5.0
opencv-python-headless

In questo ambiente PaddleOCR parte correttamente e usa i modelli gia' presenti in cache:

PP-OCRv5_server_det
en_PP-OCRv5_mobile_rec

Correzione parser

L'API PaddleOCR 3.5 restituisce i risultati in chiavi:

rec_texts
rec_scores

Lo script paddleocr_multipass_eval.py e' stato corretto per leggere questo formato.

Baseline OCR PaddleOCR

Validation:

images=5
ok=5
accuracy=1.0000

Test:

images=2
ok=2
accuracy=1.0000

File risultati:

C:\devel\yolo-ocr\paddleocr-recognizer\outputs\multipass_val_venv_fixed\multipass_results.csv
C:\devel\yolo-ocr\paddleocr-recognizer\outputs\multipass_test_venv_fixed\multipass_results.csv

Esempi:

182430 -> 182430
182242 -> 182242
182519 -> 182519
182511 -> 182511
187184 -> 187184
182368 -> 182368

Conclusione

La pista PaddleOCR e' molto piu' promettente del previsto per il demo.

Il dataset e gli script sono pronti, e la baseline standard con preprocessing multi-pass legge correttamente tutti i crop disponibili in validation/test.

Il campione e' pero' molto piccolo, quindi non e' ancora una prova di robustezza.

Per il prossimo passo non farei subito fine-tuning: integrerei prima nel server WMS una modalita' OCR sperimentale basata su PaddleOCR multi-pass, con fallback UDC_NON_DETERMINATO quando non c'e' un candidato numerico credibile.