10 Oktober 2007

line segmentation mal wieder

...vor fast zwei Jahren habe ich mich ein wenig mit der Zeilensegmentierung handschriftlicher Texte beschäftigt - hauptsächlich spielte ich mit Filtern, also Pixel- und Kantenorientierten Verfahren rum. Irgendwann möchte ich mal Handschriften deren Transkription zeilenweise gegenüberstellen.
Neulich fiel mir die OCR-Software GOCR in die Hände, die ich natürlich gleich gegen ihren ursprünglichen Verwendungszweck auf eine Handschrift loslassen musste. Das Schöne an GOCR ist, daß man sich die Koordinaten der gefundenen Zeilen und Zeichen als XML ausgeben lassen kann. Den Ausschnitt (ein paar Zeilen) der Handschrift (als jpeg) schicken wir zuerst durch djpeg, um ihn in ein graustufiges pbm umzuwandeln, danach lassen wir gocr darauf los und lassen uns das Ergebnis als xml ausgeben:
djpeg -pnm -gray hs30.jpg | gocr -o hs30.xml -f XML -v 48 -m 256
Mit dem Parameter -v >=32 gibt uns GOCR das Ergebnis zudem noch als png aus. Für das XML kann man sich nun recht einfach ein XSL schreiben, um aus den Koordinaten der gefundenen Zeichen eine Imagemap zu erstellen. Die Links in der Imagemap sollten dann auf die entsprechende Zeile in der Transkription verweisen. So viel zur Idee...
Hier kann man sich das Resultat ansehen (oder hier als statisches html - mit xsltproc gebaut). Die Auszeichnungen von GOCR: Blaue Linien für die Zeilen, rote Rechtecke für die Zeichen. Die Koordinaten der Zeichen und die jeweilige Zeilennummer sind in den area-Tags im title-Attribut hinterlegt. Das XSL sieht so aus.
Gut, die Zeilensegmentierung ist alles andere als optimal - GOCR ist dafür nicht gedacht und funktioniert bei gedruckten Zeilen auch super. Vorgefilterte Bilder (Sobel-Filter etc.?) habe ich auf die Segmentierung von GOCR noch nicht losgelassen.
Gespannt sein darf man aber auch auf OCRopus des DFKI - ausprobiert habe ich es noch nicht, da ich keine Doku gefunden habe und es wohl (noch) kein fertiges Paket gibt.
Vielleicht kann ich ja über die nächsten kleinen Ergebnisse noch vor September 2009 berichten. :)

Labels: , ,