Optical character recognition (OCR) is een techniek die kan gebruikt worden om ingescande afbeeldingen van handgeschreven, getypte of afgedrukte tekst om te zetten naar ASCII-tekst die leesbaar is voor een computer. Deze techniek wordt vaak gebruikt om afgedrukte teksten te digitaliseren zodat men ze elektronisch kan doorzoeken, compacter kan opslaan, online kan weergeven, of ze automatisch kan laten vertalen of voorlezen door een computer. OCR vormt een onderzoeksdomein binnen de patroonherkenning, artificiële intelligentie en computervisualisatie.

Opgave

In deze opgave werken we met tekstbestanden, waarvan de regels een aantal handgeschreven karakters voorstellen. Het handschrift staat telkens in een lettertype dat voldoet aan volgende voorwaarden:

Een lege kolom is een kolom van de regels met handgeschreven tekst die enkel bestaat uit spaties.

Hieronder wordt bijvoorbeeld de inhoud weergegeven van een tekstbestand dat een handgeschreven versie van de letters ocrrococo bevat. Klik hier1 om een grafische voorstelling van de segmentatie van dit tekstbestand te bekijken. Hierbij worden de segmenten aangegeven met een donkergrijze achtergrond, en worden de regels die niet opgenomen worden in de stringvoorstelling van segmenten met een rode lijn doorstreept.

                                             
                                             
                                             
 ##   ### # ## # ##  ##   ###  ##   ###  ##  
#  # #    ## # ## # #  # #    #  # #    #  # 
#  # #    #    #    #  # #    #  # #    #  # 
#  # #    #    #    #  # #    #  # #    #  # 
#  # #    #    #    #  # #    #  # #    #  # 
 ##   ### #    #     ##   ###  ##   ###  ##  
                                             
                                             

De opgave bestaat erin om de inhoud van het tekstbestand om te zetten naar de corresponderende reeks ASCII karakters. Hiervoor ga je als volgt te werk:

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat de tekstbestanden ocr.txt2, sportmannen.txt3 en romanheld.txt4 zich in de huidige directory bevinden.

>>> segment = segmentatie('ocr.txt5')
>>> segment[0]
' ## \\n#  #\\n#  #\\n#  #\\n#  #\\n ## '
>>> print(segment[0])
 ## 
#  #
#  #
#  #
#  #
 ## 
>>> print(segment[1])
 ###
#   
#   
#   
#   
 ###
>>> print(segment[2])
# ##
## #
#   
#   
#   
#   
>>> print(segment[3])
# ##
## #
#   
#   
#   
#   
>>> print(segment[-1])
 ## 
#  #
#  #
#  #
#  #
 ## 

>>> OCR('ocr.txt6')
'rococo'
>>> OCR('sportmannen.txt7')
'marmer'
>>> OCR('romanheld.txt8')
'emerald'

Klik op onderstaande links om een grafische voorstelling van de segmentatie van de tekstbestanden te bekijken. Hierbij worden de segmenten aangegeven met een donkergrijze achtergrond, en worden de regels die niet opgenomen worden in de stringvoorstelling van segmenten met een rode lijn doorstreept.