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