2013-11-20 9 views
7

Sto tentando di creare un'applicazione python risposta carta (domanda a scelta multipla). Il foglio delle risposte sarà scansionato in un file immagine (gif, png, jpg, qualunque sia il formato necessario).OCR Python: conversione dell'immagine scansionata in testo per l'elaborazione

La mia app ha accesso al database in cui sono archiviate tutte le risposte.

Quindi, tutto ciò che serve è una sorta di dati dall'immagine scansionata in modo che possa confrontare la risposta e calcolare i segni.

Il foglio di risposta ha fissato dimensioni con il formato tabella come questa (Le risposte saranno contrassegnati da 'X' dal candidato per indicare le loro risposte):

enter image description here

Dopo la ricerca attraverso internet, i trovato che ci sono alcune API OCR disponibili.

Il primo è Pytesser. È molto facile da usare ed i risultati sono abbastanza buoni. Ma funziona solo per le immagini con testi puramente puri. Quindi, penso che non sia adatto.

Il secondo che ho trovato è Ocropus. Sembra potente, ma nella sua documentazione

di Windows

OCRopus si basa molto su nomi di percorso POSIX e file system. Potrebbe essere possibile installare OCRopus su Windows utilizzando. Un modo più semplice è installare VirtualBox ed eseguire OCRopus in Ubuntu sotto VirtualBox.

Quindi penso che sia principalmente per linux. Non sono riuscito a trovare una guida all'installazione dettagliata per la piattaforma della finestra. (Sono un principiante, quindi potrei sbagliarmi)

Il terzo che ho trovato è python-tesseract, un wrapper per Tesseract OCR. Nel loro page, è stata fornita la guida di installazione. Fondamentalmente, ho bisogno,

  1. python-tesseract-win32.deb
  2. python-OpenCV
  3. NumPy

ma non ho idea su come installare .deb file sulla finestra. Ho già installato opencv e nampy.

Così il seguente sono le mie domande:

(1) In che modo posso convertire l'immagine al tavolo in dati processabili (è anche possibile?)?

(2) Esistono altre utili API OCR che non ho menzionato qui che potrebbero essere utili?

(3) Infine, (mio stupido idea) E 'possibile dividere l'immagine in piccoli mandrini (in base alle dimensioni delle celle della tabella - poiché le dimensioni dei tavoli sono noti) utilizzando PIL e quindi utilizzare pytesser per convertire ogni piccole immagini in testo, quindi elaborare i dati di conseguenza?

FYI: Ne ho solo bisogno per Windows Platform, possibilmente per Windows xp 32 bit. Sto usando Python 2.7.5.

+0

.deb sono file Deiban/Ubuntu pachage di Linux, in pratica non si installano quelli su Windows. – McAbra

risposta

3

risposte corrispondano ai suoi numeri

1) OCR è in generale molto difficile, ma (una buona notizia per voi) per l'elaborazione punteggio del test, penso che sia quasi un problema risolto. In questo filone ci sono soluzioni provate e vere per questi problemi. I sistemi scolastici hanno fatto questo per automatizzare i test di 'scantron' di valutazione per anni, quindi se hai accesso a tali risorse andando su quella rotta potrebbe essere la soluzione migliore. Almeno si dovrebbe verificare come lo fanno

2) Sono sicuro che ci sono altri, ma questi sono i principali quelli gratuiti che conosco di

3) una Penso che se si sta cercando di fare questo su un budget e tempo sono meno un problema, la tua idea "sciocca" in realtà non è affatto sciocca. Potrebbe essere il modo migliore per farlo, ed è probabile che i selezionatori di test di scantron usino un metodo simile. Conosci le dimensioni esatte del modulo di prova. Puoi conoscere la mappatura diretta dei pixel di dove guardare. Potresti usare pytesser molto facilmente. Tieni presente che a volte il plettro ha bisogno di ridimensionare l'immagine (a volte in alto, a volte in basso) per ottenere la massima accuratezza.

3) b È possibile prendere in considerazione la possibilità di ruotare la propria soluzione. Potresti usare il concetto di operazioni morfologiche (numpy e altre librerie di immagini possono farlo quasi fuori dagli schemi). Potresti non aver nemmeno bisogno di questi operatori e semplicemente fare una soglia binaria delle righe della tabella (supponendo che hai già tagliato l'immagine in righe della tabella) e semplicemente cercare i BLOB e segnare il punteggio come proveniente dalla colonna con i valori di blob più.