Sto tentando di estrarre caratteri alfanumerici (a-z0-9) che non formano parole sensate da un'immagine presa con una fotocamera di consumo (inclusi i telefoni cellulari). I caratteri hanno dimensioni e tipo di carattere uguali e non sono formattati. L'elaborazione effettiva viene eseguita in Windows.Migliora la qualità di rilevamento Tesseract
L'immagine seguente mostra l'ingresso grezzo:
Dopo trasformazione prospettica applico quanto segue con OpenCV:
- Convertire da RGB a grigio
- Applicare
cv::medianBlur
per rimuovere il rumore - Converti l'immagine in binario usando la soglia adattativa
cv::adaptiveThreshold
- Conosco il numero di righe e colonne della griglia. Quindi estraggo semplicemente ogni cella della griglia usando questa informazione.
Dopo tutti questi passaggi che ricevo immagini che sembrano simili a queste:
Poi corro Tesseract (ultima versione SVN con le più recenti dati di allenamento) su ogni immagine di cella estratta singolarmente (ho provato diversi -psm
e -l
valori):
tesseract.exe -l eng -psm 11 sample.png outtext
i risultati prodotti da Tesseract non sono molto buone:
- maggior parte dei caratteri non vengono riconosciuti.
- Le linee della griglia vengono talvolta interpretate come caratteri "l" o "i".
ho già sperimentato con operazioni morfologiche (aperto, chiudere, erodere, dilatare) e lo ha sostituito con soglia adattativa OTSU thresholding (THRESH_OTSU
), ma i risultati peggiorata.
Cos'altro posso provare a migliorare la qualità del riconoscimento? Oppure esiste anche un metodo migliore per estrarre i caratteri, oltre all'utilizzo di tesseract (ad esempio la corrispondenza dei modelli?)?
Edit (21-12-2014): ho provato corrispondenza semplice modello (utilizzando normalizzata correlazione incrociata e LMS, ma con risultati ancora peggiori). Ma ho fatto un enorme passo in avanti estraendo ogni personaggio usando findCountours
e poi eseguendo tesseract con un solo carattere e l'opzione -psm 10
che interpreta ogni immagine di input come un singolo carattere. Addizionalmente rimuovo i caratteri non alfanumerici in una fase di post-elaborazione. I primi risultati sono incoraggianti con percentuali di rilevamento del 90% e migliori. Il problema principale è il rilevamento errato di caratteri "9" e "g" e "q".
saluti,