Basisopleiding Software Engineering in Python

status:This page is quite outdated! –Albert

Installatie Python

Omdat het de laatste versie is, wordt Python 3.5 gebruikt. Download: https://www.python.org/downloads/

De IDE die gebruikt is, is PyCharm. Dit is een IDE die vergelijkbare functionaliteiten heeft als Eclipse, maar makkelijker is om te downloaden (op de Sogeti laptops geeft ecplipse netwerkerror). Download: https://www.jetbrains.com/pycharm/

Opdracht: Een plaatje van zeven-segment display omzetten naar een string

Voor het inlezen van een image naar tekst kan het beste tesseract gebruikt worden. Zie het volgende stackoverflow topic om de discussie te lezen welke library je het best waarvoor kunt gebruiken. http://stackoverflow.com/questions/11489824/how-do-i-choose-between-tesseract-and-opencv Mijn idee is om beide naast elkaar te gebruiken: OpenCV voor het voorbewerken van de afbeelding, maar voor het specifieke inlezen van afbeelding naar text zou ik tesseract gebruiken.

Tesseract

Beschrijving

Tesseract is een programma voor optical character recognition. Hiermee kun je van een image waarop een tekst afgebeeld staat een string als output geven.

Download laatste release

https://github.com/tesseract-ocr/tesseract/releases (ik heb 3.04.01 gebruikt)

Voor het installeren van tesseract moet je de volgende stappen nemen:

  • Pytesseract installeren (eventueel via je package mananger) in je libraries.
  • Het programma tesseract zelf installeren. Dit kun je doen door de installer te gebruiken van https://github.com/UB-Mannheim/tesseract/wiki Tesseract installer
  • Als laatste moet je in pytesseract.py aan je programma vertellen waar je het programma zelf hebt geinstalleerd op je computer:
# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
tesseract_cmd = r'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe'

OpenCV

Beschrijving

OpenCV (Open Source Computer Vision Library) is een open source computer visie en machine learning software library. Het is gemaakt om het gebruik van perceptie door middel van machines te vergroten.

Download:

http://opencv.org/downloads.html (ik heb 3.1.0. Gebruikt)

Voor het installeren van openCV moet je de volgende stappen nemen:

  • OpenCV installeren in je libraries

    • Open Pycharm>File>Settings>Project:pathways-extension-training>Project Interpreter
    • Kies als Project Interpreter bovenaan voor: 3.5.2 (C:Users’yourname’AppDataLocalProgramsPythonPython35-32python.exe)
    • Klik op de plusteken aan de rechterkant om een package te installeren en installeer opencv-python.
  • Het programma OpenCV zelf installeren - Nu moet je een bestandje van de ene naar de nadere folder verplaatsen:

    • In de map opencv/build/python/2.7 kun je het bestand cv2.pyd vinden. Kopier dit bestand
    • Plak het in de volgende map: C:/Python35/lib/site-packages.
  • Om te kijken of het werkt, gebruik je console of IDLE en check het versienummer:

    • import cv2
    • print (cv2.__version__)

    Als dit werkt, is het gelukt om OpenCV te installeren.

Aan de slag

Wanneer je tesseract hebt geinstalleerd, is de stap snel gemaakt om een programmaatje te schrijven waarmee plaatjes waar cijfers op staan om te zetten in een string. Echter, voor deze opdracht willen we zeven-segment cijfers kunnen inlezen. Hiermee heeft tesseract wat meer moeite, omdat hij dit lettertype niet kent. Hiervoor moet een dataset getraind worden.

Training van de tesseract data

Tesseract is in staat om letters te lezen die hij “geleerd” heeft door middel van een trainingsdataset. Deze trainingsdatasets zitten in het mapje “tessdata”, en eindigen met .traineddata. Met nummers op een zeven segment display heeft tesseract moeite, omdat deze nummers nog niet getraind zijn. Het is mogelijk om een getrainde dataset van internet af te halen en in deze directory te plakken (bijvoorbeeld https://github.com/arturaugusto/display_ocr/tree/master/letsgodigital). Een andere optie is om zelf (door middel van scriptjes die op internet te vinden zijn) de data te trainen.

Voorbewerken van de plaatjes

Tesseract lijkt moeite te hebben met de “witte” stukken tussen de letters, wat kenmerkend is voor een zeven segment display. Het voorbewerken van de plaatjes lijkt de performance van van tesseract aanzienlijk te verbeteren, zoals een blur of een threshold (zie http://stackoverflow.com/questions/28935983/preprocessing-image-for-tesseract-ocr-with-opencv voor wat voorbeelden).