2012-01-18 15 views
13

Si prega di dare un'occhiata alla schermata qui sotto e vedere se puoi dirmi perché questo non funzionerà. Gli esempi nella pagina di riferimento per TextRecognize sembrano piuttosto impressionanti, non penso che riconoscere singole lettere come questa dovrebbe essere un problema. Ho provato a ridimensionare le lettere e ad avere l'immagine più nitida.Mathematica's TextRecognize not up to par

Per comodità nel caso in cui si desideri provare da soli, ho incluso l'immagine che uso in fondo a questo post. Puoi anche trovare molto di più in questo modo cercando "Wordfeud" in Google Ricerca immagini.

Mathematica screenshot

Wordfeud board

+0

Puoi rendere * la * domanda * più esplicita nella descrizione? (A proposito, l'ho provato una volta, e sono d'accordo, non è molto buono, non mi sono preoccupato molto di farlo funzionare. Forse è interessante notare che usa [Teserract] (http://code.google.com/p/ tesseract-ocr /)) – Szabolcs

+1

Penso che Calle volesse verificare se la funzione di riconoscimento del testo fosse limitata come sospettava che fosse. In caso contrario, cosa ha fatto che era sbagliato? In tal caso, cosa è necessario per la scansione di un testo con un alto tasso di successo? – DavidC

+0

si potrebbe desiderare di iniziare un'immagine ad alta risoluzione, 'TextRecognize' non riconosce il testo qui sotto certa soglia –

risposta

14

domanda Very cool!

TextRecognize utilizza l'euristica per riconoscere parole intere dalla lingua inglese. Questo è il Gotcha che fa riconoscere le singole lettere molto dure

Si consideri la seguente linea di pensiero:

s = Import["http://i.stack.imgur.com/JHYuh.png"]; 
p = ImagePartition[s, 32] 

Ora raccogliere le lettere per formare 'EXIT' la parola inglese:

x = {p[[1, 13]], p[[6, 6]], p[[3, 13]], p[[1, 12]]} 

Ora ripulire un po 'queste immagini:

d = ImageAssemble[ Map[ImageTake[#, {3, 27}, {2, 20}] &, x ]]; 

Allora questo restituisce il "EXIT" stringa:

TextRecognize[d] 

Mathematica graphics

+0

punto di Nizza su MMA cercando di riconoscere le parole effettive (per impostazione predefinita, in lingua inglese), piuttosto che singole lettere con. Ecco perché ho cercato un cruciverba inglese; Volevo anche un'immagine in bianco e nero. Sembra che mma abbia più probabilità di riconoscere una stringa di lettere distanziate come parola quando lo sfondo non lo distrae. – DavidC

+0

Grazie a tutti e due per le vostre risposte. Dovrei notare a chiunque visiti questa pagina in futuro che la pagina di riferimento abbia un esempio funzionante in cui le lettere sono ordinate in modo casuale. Quindi questo non funziona è una combinazione delle prime due risposte. ImageCorrelate, suggerito in una terza risposta, produce risultati solidi. –

+1

Una caratteristica suggerimento: sarebbe utile avere la possibilità di disattivare la correzione ortografia e un'altra opzione per limitare il set di caratteri da riconoscere (che credo Tesseract, il back-end del 'TextRecognize', può già fare). Ciò renderebbe molto più semplice [leggere i dati numerici] (http://mathematica.stackexchange.com/q/18683/12). – Szabolcs

5

ho pensato la qualità della vostra immagine potrebbe interferire. Binarizzare la tua immagine non ha aiutato: il riconoscimento era zilch. Ho anche provato un'immagine in bianco e nero molto nitida di una soluzione di cruciverba. (vedi sotto) Ancora, non è stato riconosciuto nulla in formato normale o binarizzato.

crossword solution

Così ho rimosso il fondo nero lasciando solo le lettere e le loro cornici nere sottili. Ancora una volta, il riconoscimento era dello 0%.

Quando ho rimosso i riquadri da alcune delle lettere E ho binarizzato l'immagine, le uniche parti che erano riconoscibili erano quelle regioni in cui non c'erano nient'altro che lettere. (Vedi sotto)

crossword 2

Avviso nell'output di seguito, FORMICHE, PNEUMATICI, e Texas sono correttamente identificati (così come vettori), ma solo di nient'altro.

Si noti inoltre che, anche se le stringhe erano ampiamente distanziate, mma le interpretava come parole, piuttosto che lettere separate. Nota "TEXAS" invece di "T E X A S".

TextRecognize[[email protected]] 

(* output *) 
ANTS FFWWW FEEWF 
E R o If IU I? 
E A FI5F WWWFF 5 
5552? L E F F 
T s E NTT BT| 
[email protected];EE F 
5 W E ; OCS 
FOFT W W R AL%AE 
A TT I T ? _ 
i [email protected]'NF WG%S W 
A A EW F I i 
SWWTW W ALTFCWD N 
H A V 5 A F F 
PLATT EWWLIGHT 
W N E T 
HE TIRES C 
TEXAS VECTORS 

Non ho avuto la pazienza di pulire completamente l'immagine. Sarebbe stato molto più veloce ridigitare il testo a mano.

Conclusione: non utilizzare il riconoscimento del testo in mma a meno che non si abbia del testo assolutamente chiaro su uno sfondo di colore uniforme, luminoso, preferibilmente bianco.

I risultati variano anche in base al formato di file utilizzato. Evita il .pdf del tutto.



Modifica

ACL catturato e cercato di riconoscere gli ultimi 5 righe (sopra Edit). I suoi risultati (in un commento qui sotto): per lo più senza senso.

Ho deciso di fare lo stesso. Ma dal momento che Prashant ha avvertito che la dimensione del testo fa la differenza, ho eseguito lo zoom avanti in modo che il testo appaia (ai miei occhi) di circa 20 pica. Di seguito l'immagine del testo che ho scansionato e TextRecognize d.


text2


Ecco il risultato di un unbinarized TextRecognize (a quel grande):

Gliii. Q lk-ii`t`*¥ if EY £\[CloseCurlyDoubleQuote]1\[Euro]'EE \ 
Di'¥C~E\"P ITF SKI' T»f}!E'!',IL:?E\[CloseCurlyDoubleQuote] I 2 VEEE5\ 
\[CloseCurlyQuote] LEP \"- \"VE 
1. ur e=\\..r.1.»».»\\\\ rw r 1»»\\|a'*r | r .fm -»'-an \ 
\[OpenCurlyQuote] -.-rr -_.»~|-.'i~-.w~,.-- nv n.w~»-\ 
\[OpenCurlyDoubleQuote]~" 

Ora, ecco il risultato per la TextRecognize dell'immagine binarizzata. L'immagine originale era una .png di Jing.

I didn't have the patience to completely clean up the image. It would \ 
have been much faster to retype the 
text by hand. 
Conclusion: Don't use text recognition in mma unless you have \ 
absolutely clear text against an even- 
colored, bright, preferrably white, background. 
The results also varied depending on the file format used. Avoid .pdf \ 
altogether. 
+0

Così, ho preso uno screenshot (png) delle ultime 5 righe del tuo post e ho cercato di convincere mma a riconoscerlo. Diceva: "" | men \ [OpenCurlyQuote] \\ ha il pamence \\ e cump \\ e \\ e \\ y dean up \ lo stipendio. nweme sono stati molto | ae \\ er \\ e refype the \\ e><\\ ny mane. cenememn: Dem use \\ e><\\ reeegnmen m mme umess yeu have \ ahsu \\ u \\ e \\ ye \\ ear \\ e><\\ agamm an even- cmured, nngm, prelerramy wrme, naexgreune. I resmls mee vanee eepenemg en the me lurmat ueee. Avme .pdf \ auegemer. "" – acl

+0

(+1 per lo sforzo tra l'altro) – acl

+0

@acl Prova 'Binarize'ing l'immagine prima di tentare di riconoscere il testo e vedere se questo aiuta. – DavidC

10

Questo è un approccio completamente diverso da utilizzando TextRecognize, così mi distacco questo come una risposta separata. Utilizza la stessa tecnica di riconoscimento dell'immagine dal How do I find Waldo with Mathematica.

primo luogo ottenere il puzzle:

wordfeud = Import["http://i.stack.imgur.com/JHYuh.png"] 

Mathematica graphics

e quindi ottenere i pezzi del puzzle:

Grid[pieces = ImagePartition[s, 32]] 

Mathematica graphics

Cerchiamo di essere interessati alla lettera E:

LetterE = pieces[[4, 3]] 

Mathematica graphics

Prendi l'immagine di correlazione:

correlation = 
ImageCorrelate[wordfeud, Binarize[LetterE], 
NormalizedSquaredEuclideanDistance] 

Mathematica graphics

ed evidenziare le partite:

positions = Dilation[ColorNegate[Binarize[correlation, .1]], DiskMatrix[20]]; 
found = ImageMultiply[wordfeud, ImageAdd[ColorConvert[positions, "GrayLevel"], .5]] 

Mathematica graphics

Come prima, questo richiede un po 'di sintonizzazione sulla binarizzazione dell'immagine di correlazione, ma diverso da che questo dovrebbe aiutare a identificare i bit e le parti di questo puzzle.