2013-11-20 23 views
7

Ich versuche, eine Antwort Papiermarkierung (Multiple-Choice-Frage) Python-Anwendung zu erstellen. Der Antwortbogen wird in die Bilddatei eingescannt (gif, png, jpg, welches Format auch immer benötigt wird).Python OCR: Konvertiertes gescanntes Bild in Text für die Verarbeitung

Meine App hat Zugriff auf die Datenbank, in der alle Antworten gespeichert sind.

Also alles, was es braucht, ist eine Art von Daten aus dem gescannten Bild, so dass es die Antwort vergleichen und die Marken berechnen kann.

Das Antwortblatt hat wie diese Dimensionen mit dem Tabellenformat festgelegt (Antworten von ‚X‘ durch den Kandidaten markiert werden ihre Antworten auf angeben):

enter image description here

Nach über das Internet sucht, i festgestellt, dass ein paar OCR-APIs verfügbar sind.

Die erste ist Pytesser. Es ist sehr einfach zu bedienen und die Ergebnisse sind in Ordnung. Aber es funktioniert nur für die Bilder mit reinen Texten. Also, ich denke, es ist nicht geeignet.

Die zweite, die ich fand, ist Ocropus. Es scheint, mächtig, aber in seiner Dokumentation

Windows-

OCRopus auf POSIX-Pfadnamen und Dateisystemen viel abhängt. Sie können möglicherweise OCRopus unter Windows mit installieren. Ein einfacher Weg ist VirtualBox zu installieren und OCRopus in Ubuntu unter VirtualBox zu starten.

Also ich denke, es ist vor allem für Linux. Ich konnte keine detaillierte Installationsanleitung für die Fensterplattform finden. (Ich bin ein Anfänger, also könnte ich falsch liegen)

Die dritte, die ich fand, ist python-tesseract, ein Wrapper für Tesseract OCR. In ihrer page wurde die Installationsanleitung bereitgestellt. Im Grunde brauche ich,

  1. python-tesseract-win32.deb
  2. python-opencv
  3. numpy

aber ich habe keine Ahnung, wie .deb Dateien auf Fenster zu installieren. Ich habe die opencv und nampy bereits installiert.

Also folgendes sind meine Fragen:

(1) In welcher Weise kann ich das Tabellenbild in verarbeitbare Daten konvertieren (ist es sogar möglich?)?

(2) Gibt es weitere nützliche OCR-APIs, die ich hier nicht erwähnt habe, die hilfreich sein könnten?

(3) Schließlich, (meine dumme Idee) ist es möglich, das Bild in kleine Chucks (basierend auf der Größe der Tabellenzellen - da die Tabelle Abmessungen bekannt sind) unter Verwendung PIL zu teilen und dann pytesser verwenden, um jedes zu konvertieren kleine Bilder in Text, danach die Daten entsprechend aufbereiten?

FYI: Ich brauche es nur für Windows-Plattform, möglicherweise für Windows XP 32 Bit. Ich benutze Python 2.7.5.

+0

.deb sind Linux Deiban/Ubuntu Pachage-Dateien, die Sie normalerweise nicht unter Windows installieren. – McAbra

Antwort

3

Antworten entsprechen Ihre Zahlen

1) OCR ist sehr schwer, im Allgemeinen, aber (ein gute Nachricht für Sie) für Testergebnis Verarbeitung, ich denke, es fast ein gelöstes Problem. In diesem Sinne gibt es bewährte Lösungen für solche Probleme. Schulsysteme haben dies getan, um 'scantron' Tests für Jahre zu automatisieren. Wenn Sie also Zugang zu solchen Ressourcen haben, ist diese Route die beste Wahl. Zumindest sollten Sie prüfen, wie sie es tun

2) Ich bin sicher, es gibt andere, aber das sind die Haupt-frei, die ich kenne

3) ein Ich denke, wenn Sie dies versuchen, auf ein zu tun Budget und Zeit sind weniger ein Thema, Ihre "alberne" Idee ist eigentlich gar nicht albern. Es könnte der beste Weg dazu sein, und es ist wahrscheinlich, dass die Scantron-Test-Grader eine ähnliche Methode verwenden. Sie kennen die genauen Abmessungen des Testformulars. Sie können die direkte Pixelzuordnung kennen, in der Sie suchen können. Sie könnten sehr einfach mit dem pytesser arbeiten. Denken Sie daran, dass Sie manchmal die Größe des Bildes ändern müssen (manchmal nach oben, manchmal nach unten), um die beste Genauigkeit zu erzielen.

3) b Sie sollten in Betracht ziehen, eine eigene Lösung zu erstellen. Sie könnten das Konzept der morphologischen Operationen verwenden (numpy und andere Bildbibliotheken können dies fast out of the box tun). Sie benötigen diese Operatoren möglicherweise nicht einmal und führen einfach einen binären Schwellenwert der Tabellenzeilen aus (vorausgesetzt, Sie haben das Bild bereits in Tabellenzeilen geschnitten) und suchen einfach nach Blobs und markieren den Score als aus der Spalte mit den meisten BLOB-Werten kommend.

Verwandte Themen