2012-04-17 18 views
8

Speravo che qualcuno potesse dirmi perché il mio Tesseract ha problemi a riconoscere alcune immagini con cifre e se c'è qualcosa che posso fare al riguardo. Tutto funziona secondo i test, e dal momento che sono solo cifre che ho bisogno, ho pensato di poter gestire il modello inglese fino a quando ho dovuto iniziare anche con il display a 7 segmenti.Problemi nel riconoscere le cifre in Tesseract - android

Anche se ho un sacco di problemi con le immagini aggiunte, mi piacerebbe sapere se dovrei iniziare a lavorare sui miei algoritmi di riconoscimento o se potessi fare i miei set di dati per Tesseract e poi funzionerebbe, non funziona qualcuno sa dove si trova la limitazione con Tesseract?

cose provate: provato a impostare psm su one_line, one_word, one_char (e ritagliare l'immagine). Con one_line e one_word non si sono verificati cambiamenti significativi. con one_char ha riconosciuto un po 'meglio, ma a volte, a causa della grande spaziatura, ne ha allegato un numero extra, che poi lo ha rovinato, se guardi l'immagine allegata zero.jpg poi ha provocato 04. Ho anche provato per fare da solo la binarizzazione, questo ha avuto come risultato un riconoscimento più scadente ed è stato molto consumante in termini di risorse. Ho provato ad invertire le immagini, questo non fa alcuna differenza per tesseract.

Ho allegato le foto di cui avrei bisogno, tra l'altro, per essere elaborate.

Spiegazione sulle immagini:

decodethisimage_seven è un'immagine che il Tesseract non ha problemi a riconoscere, anche se è stato fatto in parola per le comodità di costruire un app intorno ad un'immagine di lavoro.

decodethisimage_eight è immagine di vita reale che corrisponde a image_seven. Ma non può riconoscerlo.

decodethisimage_four2 è un'altra immagine che mi piacerebbe che riconoscesse, e sì, so che non può essere skrewed, e ho fatto svitare (penso skrew è il termine qui == "raddrizzamento") quando si esegue il test.

+0

skrew = skew nice :). Inoltre, i set di strumenti di immagine possono ridurre il rumore, aumentare la nitidezza e cosa no. Questo può essere d'aiuto –

risposta

2

So di alcune opzioni che potrebbero aiutarvi:

  1. Aggiungi spazio tra il bordo immagine e testo. Tesseract funzionerebbe male se il testo nell'immagine è posizionato sul bordo.
  2. Duplica la tua immagine. Ad esempio, se stai eseguendo l'OCR su una parola "foobar", clona l'immagine e invia "foobar foobar foobar foobar foobar" a tesseract, i risultati sarebbero migliori.
  3. Google per font training e image binarization per tesseract.

tenere a mente, che la fotocamera integrata nei dispositivi mobili per lo più la produzione di immagini a bassa qualità (blured, si sparse, distorta ecc) OCR è di per sé un processo comsuming risorse e se si aggiunge una pre-elaborazione immagine degna di questo, i dispositivi di fascia bassa e media mobile (che probabilmente hanno Android) potrebbero affrontare prestazioni inaspettatamente lente o addirittura la mancanza di risorse. Va bene per progetti gratuiti/di studio, ma se stai pianificando un'applicazione commerciale, prova a utilizzare un SDK migliore.

Date un'occhiata a questa domanda per i dettagli: OCR for android

+0

Grazie per il tuo contributo, lo proverò sfortunatamente. Riguardo al mid-end di fascia bassa, normale segmento medio imo. ha almeno 3mpix cams e questo dovrebbe essere sufficiente, anche se l'autofocus è un problema gestibile. per evitare un'immagine distorta ho impostato un rettangolo molto limitato come una sovrapposizione sul mio schermo, quindi è un po 'evitato. Ma sono d'accordo che potrebbe essere pesante per il telefono, non mi dispiacerebbe farlo funzionare su un server, ho solo bisogno di sapere che funziona prima, che non ho ancora ottenuto: -/ –

+0

Anche se hai qualche idea su come pubblicizzare o aggiungere una cornice alle immagini? Comincerò a guardarmi intorno, solo se avessi già avuto esperienza con questo :) –

+0

1 e 2 non funzionavano. Sto lanciando tesseract, provando a lavorare con javaocr invece –

1

Si può dare una prova javaocr (http://sourceforge.net/projects/javaocr/, sì, sono sviluppatore)

Therre è nessun rilascio offocial, però, e si dovrà cercare le fonti (buone notizie: c'è un campione Android funzionante incluso campionatore, allenatore offline e applicazione riconoscitore)

Se si dispone di un solo font, è possibile ottenere risultati abbastanza buoni con esso (ho raggiunto fino a 99,96 cifre di riconoscimento su cifre di lo stesso carattere)

PS: è puro java e utilizza i momenti invarianti per eseguire la corrispondenza (quindi nessun problema di ridimensionamento e rotazione). C'è anche una binarsazione piuttosto efficace.

vederlo in azione:

https://play.google.com/store/apps/details?id=de.pribluda.android.ocrcall&feature=search_result#?t=W251bGwsMSwxLDEsImRlLnByaWJsdWRhLmFuZHJvaWQub2NyY2FsbCJd

+0

Ho provato la tua app, non riconosce nessuno dei miei numeri/immagini sembra: -/ –

+0

Questa applicazione è addestrata al testo nero su sfondi bianchi. Nel caso abbiate bisogno di negativi, potete provare i campioni Android nel processo javaocr (è necessaria solo una leggera modifica nel processo di binarizzazione per lavorare con i negativi) PS: potete postare lo screenshot dei risultati di regcognition? Allora potrò dare qualche altro suggerimento –

+0

Non ce n'è bisogno perché i miei sono negativi :-) –

2

Tesseract non fa la segmentazione per voi. Tesseract eseguirà una soglia dell'immagine prima del reale tesseract algo. Dopo la soglia, potrebbero esserci alcuni bordi, artefatti che rimangono nell'immagine.

Provare a modificare manualmente le immagini in bianco e nero e vedere quale tesseract restituisce come output.

Provare a soglia (automaticamente) le immagini e vedere che tesseract restituisce come output. L'output di thresholding potrebbe essere troppo cattivo, e il tesseract potrebbe dare un output negativo.

La 4a immagine probabilmente fallirà a causa della soglia (avete 3 colori: sfondo nero, sfondo grigiastro e lettere bianche) e la soglia potrebbe essere compresa tra (sfondo nero, sfondo grigiastro).

In generale, Tesseract vuole delle belle immagini in bianco e nero. La pre-elaborazione delle tue immagini potrebbe essere necessaria per ottenere risultati migliori.

Per la prima immagine (con il risultato "04"), provare a vedere il risultato della casella (carattere + coordinate della casella che contiene il carattere riconosciuto). Lo "0" può essere un piccolo artefatto, come un blob di pixel 4 x 4.

Problemi correlati