Newsgroup: it.comp.lang.visual-basic
Titolo: Riconoscimento Caratteri OCR in VB

Nel mio antispam vorrei inserire la funzionalità di riconoscimento caratteri
OCR per poter riconoscere testi scritti come quello in basso:
  4ta2        lb20
  nvm5        0537
  032s        og39
  f8fr        8ftb
  g142gadecchg4p4m
  12z1        qpp8
  q42z        0t26
  w5r2        hi07
  06k9        imbh
sapete per caso se esiste qualche ocx freeware o qualche codice sorgente.
Googlando ho trovato qualcosa, ma sono solo file eseguibili a cui non posso
passare le impostazioni volute.
Grazie a chiunque mi risponda
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
"Seminate Linux, che Windows si pianta da sè...." (Antico Adagio)
Gestione Ottica - Gestionale per Ottici e Programmi Gratuiti su:
http://www.nicolaottomano.it
Sinapsi Antispam. Antispam Gratuito.
http://www.nicolaottomano.it/public/SinapsiAntispam-Setup.exe
email spamtrap: 
spam...@nicolaottomano.it

Ho trovato su planetsourcecode decine di sorgenti per ocr.
Ora il mio problema č: Avendo una matrice abbastanza grande che puň
contenere valori 0 e 1, vorrei trovare i raggruppamenti di 1
ad esempio
000000000
000100111
000111111
100000011
000100001
il raggruppamento sarebbe
      111
111111
        11
          1
come posso fare a trovarlo in maniera veloce? (tenendo conto che in una
matrice 500x500 potrebbero esserci decine di questi raggruppamenti)
grazie a chiunque voglia aiutarmi
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
"Seminate Linux, che Windows si pianta da sč...." (Antico Adagio)


Se lo pensi come un grafo invece che come una matrice vediti gli algoritmi 
per le componenti connesse...
Spero di esserti stato utile
Ciao Giuseppe 

           1
perché ? Premetto che forse non ho capito bene il criterio o 
l'esempio, volutamente sintetico, ma mi pare che venga data la 
priorità alla "vicinanza" orizzontale, quindi una ipotetica 
scansione riga per riga, mentre imho potrebbero essere 
considerati contigui anche pixel sovrapposti in verticale o 
persino in diagonale (pensa alla stanghetta inclinata della ENNE 
scritta con tratto spesso un solo pixel .... Con ciò non ho 
pensato a nessuna soluzione, e temo che anche quando ci avrò 
pensato non mi venga in mente nessun algoritmo agile e veloce 
come servirebbe.
Molto tempo fa (credo che l'idea dell'OCR prima o poi affascini 
tutti) avevo pensato ad un algoritmo generico (LENTISSIMO e 
inadatto a qualunque scopo pratico) basato sulla deviazione 
statistica di una matrice rispetto ad un'altra di riferimento. 
Nel senso che veniva assegnato un punteggio di penalità (errore 
lineare, o quadratico, a seconda della tolleranza) a seconda dei 
pixel difformi, ovunque si trovassero.
Cmq quell'idea era già pessima perché presupponeva di conoscere 
a priori il FONT e la dimensione usata nel testo grafico da 
riconoscere. LA stessa lettera di font diversi, o di stesso font 
a diversa scala non era riconosciuta, giàò questo dice quando 
povera fosse l'idea. L'unico buono era una certa resistenza alle 
figure sporche di pixel spuri.
Provo a lanciare un'altra idea, un po' delirante per la sua 
macchinosità.
Il cardine del raggruppamento sia un algoritmo (ricorsivo o 
tradotto in ciclo, suppongo ricorsivo vada bene per le 
dimensioni non enormi delle matrici), di tipo FLOOD-FILL con 
esplorazione verticale, orizzontale, e diagonale.
LA funzione viene lanciata, con un certo colore da cercare, ad 
es. il nero, e deve ricevere oltre la matrice da esplorare anche 
una matrice di appoggio, inizialmente piena di zeri, dove 
registrare le proprie esplorazioni. In altre parole, 
ogniqualvolta un pixel viene esaminato, la funzione lo pone a 
TRUE nella matrice mappa.
La funzione ritorna un valore eguale al numero di pixel neri 
contigui (in qualsiasi direzione) trovati. Sta poi ad altra 
parte ricostruire che forma abbia questo "pezzo" di figura. Si 
può anche decidere che sotto una certa soglia, questi pixel 
possano essere solo "rumore di fondo" (ma occhio ai puntini 
delle "i".
La scansione dell'intera matrice viene eseguita con due cicli 
annidati, riga per riga e colonna per colonna, eccetto che 
FLOOD-FILL non viene richiamata se il pixel di partenza del dato 
step risulta essere già stato esplorato nella matrice mappa.
Il problema ora si sposta a come riconoscere le forme delle aree 
contigue trovate (si potrebbe anche memorizzare il pixel di 
inizio esplorazione per ciascuna forma superiore alla soglia di 
rumore), ma poi che farne non saprei.
Bisognerebbe ridurre una qualsiasi forma in un (MINIMO !) 
insieme di istruzioni di disegno, tipo verso destra per 3 pixel, 
poi in alto per due, diagonale home di 5 pixel, rettangolo 
top-down,left, right e così via .... ma non saprei come fare, 
anche se assicurerebbe una descrizione più astratta e generica 
degli elementi grafici e una migliore sovrapponibilità di 
caratteri deformati, stirati, inclinati etc etc)
a parole si fa presto a pensare, poi buttare giù codice l'è 
n'altra storia
Ciao
CCCP++MARIO


Scusate la mia ignoranza...
Ma OCR non era un modo per riconoscere i caratteri da un'immgine raster???? 

 basso:
Argh. Fai molto, ma _MOLTO_ prima a cercare di riconoscere la
mail come spam con qualche altro sistema. In fondo non dovresti
aver bisogno di leggere quello che c'è scritto per capire che una
cosa del genere è spam, giusto ? Non so, stringhe troppo lunghe
e ripetute, boh... non mi è mai capitata una mail di spam fatta
così... me ne inoltreresti una, per curiosità ?
Bye, G.

 ha scritto nel messaggio
news:2vjudlF...@uni-berlin.de

In pratica gli spammers stanno creando email di spam con caratteri
completamente casuali.
Per avere una idea vi metto due email in uno zip. (Attenzione, il contenuto
delle email potrebbe non essere adatto aminori di 18 anni)
L'indirizzo è:
www.nicolaottomano.it/public/spamsample.zip


 raster????
esattp. scarica i due esempi che ho postato nel link del post in risposta a
paperino e capirai cosa voglio fare.
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
"Seminate Linux, che Windows si pianta da sè...." (Antico Adagio)


>           1
Comunque ho trovato un metodo abbastanza veloce per realizzare quello che
voglio fare.
Ho già buttato giù una pseudocodifica e non mi resta che creare il codice e
poi implementarlo.
In pratica si tratta di trovare un punto True e poi muovermi in
quell'intorno per cercare altri punti True  e così via, fino a non trovarne
più contigui.
Poi vi posto il codice non appena lo scrivo.
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
"Seminate Linux, che Windows si pianta da sè...." (Antico Adagio)
