2012-02-17 16 views
6

Ho in mente un'applicazione che voglio produrre. Abbiamo schede di pianificazione montate a parete suddivise in piccoli rettangoli che utilizzano linee nere su uno sfondo bianco. Le etichette magnetiche sono collocate in una particolare partizione per indicare che questa persona deve lavorare in quella cella. Questo sistema funziona molto bene per la comunicazione tra le persone, ma vorrei un modo automatico per salvare automaticamente queste informazioni di pianificazione in un database.Open Source per l'elaborazione OCR delle immagini in tempo reale?

Sto immaginando un sistema in cui una telecamera è impostata in una posizione fissa concentrandosi sulla scheda di programma. Periodicamente la fotocamera scatta una foto della lavagna. Voglio scrivere del codice per decifrare quali tag sono in quale area. Ciò richiederebbe un riconoscimento OCR o un simbolo. Ci sono grandi numeri su ogni tag che userò per identificare la persona il cui nome è tag.

Naturalmente vado su Python quando si affronta un nuovo problema di programmazione. Ho trovato questo post ->python image recognition che sembra un buon punto di partenza (con PIL e numpy).

Conosci un buon modo per farlo?

Aggiornamento: ho provato SimpleCV e sembra buono per ora.

+2

È possibile, penso, rendere più semplice il proprio compito se si aggiunge un codice a barre alle etichette nome o si scrivono i numeri in un carattere progettato per facilitare l'OCR. –

risposta

4

Questo è in realtà un problema piuttosto difficile, anche se sembra piuttosto semplice. Ma puoi renderlo molto più semplice facendo alcune cose alla tua immagine per renderla gestibile. Ho i seguenti suggerimenti:

  • Provate a fare in modo che la fotocamera sta guardando dritto alla pensione con un obiettivo ragionevole in modo che ci sia una distorsione minima dell'immagine sui bordi, e nessuna distorsione prospettica.
  • Dato che scatti l'immagine occasionale per l'analisi, penso che le prestazioni non siano in alcun modo un problema, quindi scatta immagini ad alta risoluzione, con un flash o con un tempo di esposizione lungo (perché tutto ciò che stai riprendendo è fermo) per ottenere la migliore qualità dell'immagine possibile.
  • Se il numero di tag diversi non è troppo grande, potrebbe essere più semplice provare a far corrispondere le immagini di riferimento di questi tag nell'immagine tramite template matching anziché utilizzare l'OCR completo dei numeri. È molto più facile lavorare se la tua immagine è abbastanza buona. Il python opencv interface è molto completo.
  • High Performance Mark ha un buon commento alla tua domanda sull'inclusione di barcodes sui tag. Vorrei aggiungere l'opzione di QR codes, ma è solo la stessa cosa. Entrambi sono facili da rilevare e ci sono buone librerie per aiutarti a leggerli.
  • Se si decide che è necessario OCR, è necessario esaminare i pacchetti OCR disponibili e non provare a eseguire il rollover. Prova pytesser per il motore tesseract o OCRopuspython interface.
+0

Dalla mia esperienza con un setup di acquisizione di immagini molto simile, il flash è spesso poco utile se la superficie che si sta tentando di fotografare è altamente riflettente, come, ad esempio, la maggior parte delle lavagne sono e il flash si trova nello stesso punto del telecamera. Ma una buona illuminazione, comunque, è molto utile. –

+0

Sì, se si utilizza un flash, è necessario posizionarlo in modo che i riflessi b non diventino un problema. In generale, dovresti iniziare con una buona immagine che puoi ottenere. –

+0

Mi piace l'idea di codici a barre o codici QR. Forse un bordo distinto per ogni tag con un codice a barre. –

2

Dato che hai accennato che ti piacerebbe usare Python per questo problema, forse potresti dare un'occhiata a SimpleCV. Vi fornirà un modo semplice per catturare l'immagine dalla fotocamera e fare l'elaborazione delle immagini di base.

0

Sono assolutamente d'accordo con Jilles de Witt che l'OCR sarebbe un compito di analisi dell'immagine estremamente difficile da sviluppare da zero. La lettura del codice sarebbe un'opzione migliore, ma anche quella sarà difficile da programmare e richiederà un'imaging sofisticato o piuttosto impegnativo come altri hanno notato. Tuttavia, per questa app non è necessario implementare OCR o codici a barre formali, QR o altri codici 2D.

Poiché l'applicazione è vincolata a un numero limitato di destinazioni, è possibile che si possa creare il proprio codice semplice. Ad esempio, puoi inserire da 0 a 4 punti grandi in un array 2x2 dopo il nome di ogni persona. Questo semplice codice di esempio identifica in modo univoco 16 tag univoci e le funzionalità saranno molto più semplici da visualizzare, estrarre e decodificare rispetto ai codici formali. Aggiungi una linea di localizzazione se la posizione del codice non è coerente.