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,196 @@
# 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:
```text
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:
```text
C:\devel\yolo-ocr\tools\prepare_paddleocr_dataset.py
```
Generata cartella:
```text
C:\devel\yolo-ocr\paddleocr-recognizer
```
Dataset:
```text
C:\devel\yolo-ocr\paddleocr-recognizer\dataset
```
Conteggi:
```text
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:
```text
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:
```text
C:\devel\yolo-ocr\paddleocr-recognizer\preprocessed_preview
```
## Baseline multi-pass
Creato script:
```text
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:
```text
paddleocr 3.5.0
paddlex 3.5.2
paddlepaddle 3.3.1
paddlepaddle-gpu 3.3.1
```
Ma l'esecuzione fallisce prima dell'OCR:
```text
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:
```text
C:\devel\yolo-ocr\.venv-paddle-cpu
```
Installati nel virtualenv:
```text
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:
```text
PP-OCRv5_server_det
en_PP-OCRv5_mobile_rec
```
## Correzione parser
L'API PaddleOCR 3.5 restituisce i risultati in chiavi:
```text
rec_texts
rec_scores
```
Lo script `paddleocr_multipass_eval.py` e' stato corretto per leggere questo formato.
## Baseline OCR PaddleOCR
Validation:
```text
images=5
ok=5
accuracy=1.0000
```
Test:
```text
images=2
ok=2
accuracy=1.0000
```
File risultati:
```text
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:
```text
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.