Per quanto riguarda il “cuore” dell’applicazione, cioè la parte di AI, abbiamo deciso di utilizzare un tipo di architettura che ci ha particolarmente attirato, cioè quella degli auto-encoders affiancati a dei classici classificatori (che realizzano la “selezione a torneo”). Da un punto di vista “funzionale” invece, si è cercato di dare a “jino” delle caratteristiche che possano renderlo più ultile/interessante dei molti ocr basati sull’ AI che si possono trovare su internet (“Jino is not ocr”, appunto.. ) Proprio per questo l’input dei file da processare viene da immagini o da webcam, e non da un’area di testo in cui scrivere come avviene in molti sw di questo tipo. Utilizzo del linguaggio java [portabilità - esperienze personali] Librerie ausiliari: Joone [neural netowork management] JAI [Image Prepocessing] JMF [Webcam acquisition] Data acquisition Webcam File Preprocessing Image manipulation Segmentation Character recognition Auto-encoders Two way classifiers Come già detto l’acquisizione dati da file(momentaneamente solo immagini) e da webcam vuole essere un modo di aumentare l’utilità del software. Al momento l’acquisizione da webcam è funzionante solo sotto Windows (a causa di problemi legati alla libreria Java “V4L”) ed è possibile solo con alcuni modelli di webcam. Attualmente si limita alla conversione in bianco e nero (basata sul canale dei rossi). Aggiunte utili all’acquisizione da webcam sarebbero filtering (pulizia, etc..) e allineamento(fondamentale in fase di segmentazione) Analisi dell’immagine: In lunghezza [per distinguere le varie righe] In larghezza [per distinguere le lettere] Entrambe le suddivisoni sono basate sulla somma di pixel e utilizzano più soglie. NOTA: Ogni pixel è memorizzato come un intero che va da 0(nero) a 255(Bianco) •“Pulizia” del carattere (vengono eliminati gli spazi bianchi) Scaling del carattere a 50x50 pixel (proportional resize in modo che la dimensione più grande arrivi a 50 pixel, dopodichè padding sull’altra) Desampling del carattere a 10x10 Samples [ognuno costituito da 5x5 = 25 pixels] Normalizzazione e codifica: sample –> double tra 0 e 1 [Numero di pixel neri /25] Architettura software costituita da: Auto-encoders [riconoscimento dei singoli caratteri] (esempio: il carattere in ingresso “è”/”non è” una ‘a’) Classificatori [distinzione tra due caratteri specifici] (esempio: il carattere in ingresso “è una a”/”è una b”) Gli ingressi [100 double (10x10 samples) che variano da 0.00 ad 1.00] I. Si attiva la rete neurale dandole in ingresso tutte le lettere riconosciute, una ad una. II. Gli ingressi sono collegati ad ogni singolo auto-encoder (full synapse), che torna in uscita un errore [scarto quadratico medio di (uscita meno ingresso)] III. Se quest’ultimo è minore di una certa soglia il carattere in ingresso appartiene alla classe di cui l’auto-encoder si occupa –> L’auto-encoder risuona. IV. Se più auto encoder risuonano viene avviato il cosiddetto “torneo”, vengono cioè attivati i classificatori (a due uscite) delle classi che risuonano. Viene così decisa la classe a cui il carattere in ingresso appartiene V. Le lettere vengono scritte su un file di uscita (appare un nuovo tab), che può essere salvato in formato testo. Auto-encoders Sanno dire bene se è una ‘B’ o no, ma c’è il rischio che gli vada bene anche un ‘8’ (target=ingresso -> non gli do mai esempi che non siano B!) Two Way Classifiers Distinguono bene gli 8 dalle B, ma devono essere sicuri che l’ingresso sia un 8 o una B -> complementari degli auto-encoders! Classe 3! Classificatore classi 1/2 no Classificatore classi 3/n Classificatore classi (n-1)/n no Risuona! Risuona! Auto Auto Encoder Encoder classe Classe 2 1 1 2 Auto Encoder classe 3 3 Auto Encoder classe n ... ... … … … … … … ... ... … … … … … … … … … … … … ... … … … … … … ... ... … … … … … … … … … … … … … 100 La “selezione a torneo” è utilizzata per semplificare e rendere più efficienti le operazioni nel caso in cui risuonino più di due classi. Si confrontano le classi risuonate a due a due (esattamente come un “campionato”) e si dà loro un punteggio in base all’uscita del classificatore(se il classificatore richiesto non è presente si assegna un “pareggio”), la classe che al termine otterrà il maggior numero di punti è quella a cui realmente appartiene il carattere. M N Classificatore M/N TOT 0,81 0,72 1,53 N 0,19 ------------- 0,51 0,7 K 0,28 0,49 ------------- 0,77 M ------------- M: 0,81 - N: 0,19 K N: 0,51 - K: 0,49 Classificatore N/K M: 0,72 - K: 0,28 Classificatore M/K Acquisizione da pdf/altro.. Supporto webcam su linux (e migliorare su win) Testing Supporto divisione spazi e parole (in fase di segmentazione) Maniploare le immagini (filtering, pulizia, roation, allineamento, etc..) per migliorare la qualità dell’immagine acquisita da webcam Gestione di vari Layout di pagina Attualmente le funzioni di JInO sono abbastanza limitate, ma le possibili migliorie son molte, come molte sono le possibili applicazioni. In generale ci sentiamo di dire che se fosse migliorato l’intero processo di acquisizione da webcam, il software potrebbe avere una reale utilità nella virtualizzazione di documenti