Deze week ben ik bezig geweest met het lezen van de straatnaamborden. Hier een eerste preview.
Ik gebruikt momenteel de open-source OCR engine Tesseract.
In eerste instantie heb ik gekeken hoe de prestaties zijn met de greyscale-images van de borden, zonder enige verdere processing.
Deze methode kan van de 22 borden die gevonden worden in de eerste testset, er zes correct lezen.
De engine is behoorlijk gevoelig. Het volgende plaatje wordt perfect herkend:
terwijl hij niet eens meer tekst kan halen uit dit plaatje:
Enkele pogingen om het contrast te verbeteren maken de resultaten alleen maar slechter. Ook logisch: Tesseract blijkt zelf vrij geavanceerde image-processing aan boord te hebben.
Dat moet toch beter kunnen. Volgende poging: Het segmenteren van letters met de color-histogram-matching die ook gebruikt wordt om de borden te vinden.

Hier werkt tesseract een stuk beter mee, en slaagt er in om en nabij de helft van de borden goed te lezen.
Dit zorgt wel ook weer voor andere problemen.![]()
De ruis om de ‘de’ heen, maakt dat de OCR dit bord leest als: J^_D$gg-Barkentijn
De volgende stap is nu om kleine ruis weg te filteren met blob detection. Ik hou jullie op de hoogte!
Tags: computer vision, google summer of code, GSoC2009, signFinder, street signs
Wat doet een sobel edge detection op het plaatje? Of zijn de letters dan helemaal niet meer te lezen/snappen? http://en.wikipedia.org/wiki/Sobel_operator
Op zich doet edge detectie op dit plaatje vrij weinig behalve de contouren weergeven. Tesseract is zelf een OCR engine die normaal gesproken PDF en Fax documenten verwerkt. Het verminderen van ruis, het kleiner maken van het alfabet (tekens) die kunnen worden gezocht zal meer relevantie opleveren.
Andere filter technieken om de ‘spikkels’ er uit te halen of een contrastrijker plaatje op te laten leveren is Tijs nu aan het bekijken. Als mensen hierover ideeën hebben graag reageren
commentaar wordt gelezen (en handmatig geaccepteerd, veel spam hier).
Zoals te zien in deze presentatie: http://forum.mestreechonline.nl/showthread.php?t=921
tesseract maakt intern al gebruik van een edge detector: Classificatie van letters vindt vooral plaats op de outline.
Ik liep hier ook tegenaan toen ik probeerde de plaatjes met andere image-processing technieken: Tesseract is al aardig doorontwikkeld wat dat betreft.
Wat nog wel kan helpen, is om informatie toe te voegen die tesseract niet heeft. Daarom gebruik ik nu de blauwe-straatnaamborden-detector ook om nette letters uit te snijden.