RoVi-Einführung - Visual Sensorics and Information Processing

Werbung
RoVi - Einführung in Python
Matthias Ochs
Visual Sensorics and Information Processing Lab
Goethe-University, Frankfurt
14. April 2016
Matthias Ochs
1
Übungsbetrieb
Übungsblätter werden freitags auf der Vorlesungswebsite zum
Download bereitgestellt
Alle Dokumente sind mit einem Passwort geschützt
Passwort: rovi2016
Abgabe der Übungsblätter ist freiwillig
Lösungen können per Mail ([email protected])
an uns geschickt werden
Elegante Lösungsvorschläge können in der nächsten Übung
vorgestellt werden
Matthias Ochs
2
Python
Schnell zu erlernende Programmiersprache
→ ”tut, was man erwartet”
Open-Source Software
Plattformunabhängig
Python ist eine Skriptsprache
→ interpretiert und nicht kompiliert
Objektorientierte Programmierung ist möglich
Viele Standardfunktionen
Breite Auswahl an zusätzlichen Biblotheken
Matthias Ochs
3
Informationen zu Python
Aktuelle Versionen 3.5.2 und 2.7.12
Wichtige Biblotheken für ME: NumPy, SciPy, Matplotlib und
OpenCV
Komplett Paket für einfache Installation: Anaconda
(https://www.continuum.io/)
Matthias Ochs
4
Python Shell
> python
>>> print "Hello World"
Hello World
>>> help("print")
>>> exit()
>>>: markiert Eingaben
print: Ausgabe auf der Konsole
help: Interaktive Hilfe, wird mit ”q” beendet
exit: Beendet Python (Shortcut: strg+d)
Matthias Ochs
5
Python Skripte
HelloWorld.py
# Erstes Beispielprogramm
print "Hello World
python HelloWorld.py: Startet das Skript
#: Kommentar
’’’ code ’’’: Kommentarblock
Matthias Ochs
6
Datentypen
Ganze Zahlen:
>>> print 10
10
>>> print -12
Fließkommazahlen:
>>> print 10.0
10.0
>>> print 1.2e3
1200
>>> print 4.5e-2
0.045
1.2e3 steht für 1.2 · 103
Matthias Ochs
7
Datentypen
Zeichenketten (Strings):
>>> print "Hello World"
Hello World
>>> print ’Hello World’
Hello World
Kein Unterschied zwischen einfachen (’) und doppelten (”)
Anführungszeichen
Zeichenketten sind keine Zahlen! ”1” 6= 1
Matthias Ochs
8
Variablen
>>>
>>>
>>>
1 6
>>>
>>>
ME
x = 1
y = x+5
print x, y
y = "ME"
print y
Variablennamen besteht aus Buchstaben, Ziffern oder
Unterstrichen
Am Anfang keine Ziffern
Groß- und Kleinschreibung ist relevant: X 6= x
Richtig: i, some val, someValue, v123, hidden 1
Falsch: 1 val, some val, some-val
Matthias Ochs
9
Arithmetische Ausdrücke
+: Addition, bei Strings zusammenfügen, z.B.:
1 + 2 → 3,
”a” + ”b” → ”ab”
-: Subtraktion, z.B.: 1 − 2 → −1
*: Multiplikation, Strings verviefältigen, z.B.:
2 ∗ 2 → 4,
”ab” *2 → ”abab”
/: Division, bei ganzen Zahlen ganzzahlig, z.B.:
3/2 → 1, −3/2 → −2, 3.0/2 → 1.5
**: Exponent, z.B.: 3**2 → 9
Matthias Ochs
10
Logische Ausdrücke
==: Gleichheit, z.B.: 1 == 1.0 → True ,
2 == 3 →False
!=: Ungleichheit, z.B.: 1 != 1.0 → False ,
2 != 3 → True
<, >, <=, >=: Vergleiche, z.B.:
2 >1 → True ,
1 <= 1 → True
or, and: Logische Verknüpfungen ”oder” bzw. ”und”
not: Logische Verneinung
Liefern Wahrheitswerte: True oder False
Matthias Ochs
11
if: Bedingte Ausführung
>>> x = 1
>>> if x < 5:
...
print "x ist kleiner 5"
... elif x > 5:
...
print "x ist groesser 5"
... else:
...
print "x ist 5"
x ist kleiner 5
>>> if x < 5 and x > 5:
...
print "das geht nicht"
if-elif-else führt den Block nach der ersten erfüllten
Bedingung aus
Trifft keine Bedingung zu, dann wird der else-Zweig ausgeführt
elif und else sind optional
Matthias Ochs
12
Blöcke und Einrückungen
>>> x = 1
>>> if x < 5:
...
# wenn x kleiner 5
...
b = False
... else: b = True
... print b
False
Alle gleich eingerückten Befehle gehören zum Block
Nach dem if-Befehl geht auf Einrückungsebene des if weiter,
egal welcher if-Block ausgeführt wurde
Einzeilige Blöcke können auch direkt hinter dem Doppelpunkt
stehen
Einrücken durch Leerzeichen (Achtung: immer gleiche
Anzahl!) oder Tabulatoren
Matthias Ochs
13
Blöcke und Einrückungen
Ein Block kann nicht leer sein, aber der Befehl pass tut
nichts:
>>> if x < 5:
...
pass
... else:
...
print "x ist groesser gleich 5"
IndentationError bei falsche Einrückung:
>>> print "hallo"
hallo
>>>
print "hallo"
File "<stdin>", line 1
print "hallo"
^
IndentationError: unexpected indent
Falsche Einrückung führt im Allgemeinen zu
Programmfehlern!
Matthias Ochs
14
while: Schleifen
Ein Block kann nicht leer sein, aber der Befehl pass tut
nichts:
>>> x = 1
>>> while x < 5:
...
x = x+1
>>> print x
5
Führt den Block solange aus, wie die Bedingung wahr ist
>>> x = 6
>>> while x < 5:
...
x = x+1
>>> print x
6
Matthias Ochs
15
for: Schleifen
>>>
1
2
>>>
>>>
...
>>>
for i in range(1,3): print i
b = 0
for i in range(100):
b = b+i
print 4950
for führt einen Block für jedes Element einer Sequenz aus
Das aktuelle Element steht in i
range(a,b) ist eine Liste der Zahlen i mit a ≤ i ≤ b
Kann auch für eine Liste von Werten verwendet werden:
for i in [2,4,6,8]:
Matthias Ochs
16
Funktionen
>>> def printPi():
...
print "pi ist 3.1415"
>>> printPi()
pi ist 3.1415
Eine Funktion kann beliebig viele Argumente haben
Argumente sind Variablen der Funktion
Der Funktionskörper ist wieder ein Block
Matthias Ochs
17
Funktionen
>>> def printMax(a,b)
...
if a > b:
...
print a
...
return a
...
else:
...
print b
...
return b
>>> printMax(3,2)
3
Eine Funktion kann einen Wert zurückliefern
Der Wert wird im return Statement spezifiziert
Matthias Ochs
18
Komplexe Datentypen
Komplexe Datentypen sind zusammengesetzte Datentypen
Beispiel: Eine Zeichenkette besteht aus beliebig vielen Zeichen
Wichtige komplexe Datentypen:
Strings
Listen
Tupel
Dictionaries (Wörterbücher)
Matthias Ochs
19
Komplexe Datentypen
>>> einkaufsListe = ["cola", "milch", "obst"]
>>> einkaufsListe[1] = "sahne"
>>> print einkaufsListe
[’cola’, ’sahne’, ’obst’]
>>> print einkaufsListe[-1]
obst
>>> einkaufsListe.append("nutella")
>>> print einkaufsListe[-1]
nutella
>>> del einkaufsListe[-1]
print einkaufsListe
[’cola’, ’sahne’, ’obst’]
Matthias Ochs
20
Module
>>> import random
>>> print random.random(), random.randint(0, 100)
0.3452345345, 25
>>> from random import randint
>>> print randint(0, 100)
91
Module können per import zugänglich gemacht werden
Einzelne Bestandteile kann man mit from ...
importieren
import ...
Abkürzung: import numpy as np
Matthias Ochs
21
Numerik mit Python - Numpy
Numpy ist ein Modul für effiziente numerische Rechnungen
Baut auf n-dimensionalen Feld-Datentyp numpy.array auf:
Feste Größe und Form
Alle Elemente vom selben Datentyp
Viele Berechnungen und Transformationen möglich
Bietet:
Mathematischen Operationen
Sortieren, Auswahl von Spalten, Zeilen usw.
Eigenwerte, -vektoren, SVD, Diagonalisierung
Fouriertransformation
Statistische Auswertung: Mittelwert, Varianz,
Kovarianzmatrizen
Zufallsgeneratoren
Weitere Infos: http://docs.scipy.org
Matthias Ochs
22
np.array - 1D Arrays
>>> import numpy as np
>>> np.array([1, 2, 3])
array([1,2,3])
>>> np.ones(5)
array([1.,1.,1.,1.,1.])
>>> np.arange(2,3,0.2)
array([2.0, 2.2, 2.4, 2.6, 2.8])
>>> np.linspace(0,1,4)
array([0.0, 0.25, 0.5, 0.75, 1])
np.array: Erzeugt ein Numpy Array
np.zeros/ones: Erzeugt ein Numpy Array mit 0er/1er
np.arange: Entspricht range für Numpy Arrays
np.linspace: Generiert Zahlen mit gleichmäßigen Abstand
Matthias Ochs
23
np.array - Mehrdimensionale Arrays
>>> import numpy as np
>>> np.array([[1, 2, 3],[4, 5, 6]])
array([[1, 2, 3],
[4, 5, 6]])
>>> np.zeros((2,4))
array([[0, 0, 0, 0],
[0, 0, 0, 0])
>>> np.eye(3)
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
Mehrdimensionale Arrays entsprechen verschachtelten Listen
Alle Zeilen müssen dieselbe Länge haben
np.zeroes/ones: Größe als Tupel von Dimensionen
Matthias Ochs
24
np.array - Elementzugriff
>>> import numpy as np
>>> a = np.array([[0, 1, 2, 3, 4],[5, 6, 7, 8, 9]])
>>> print a.shape, a[1,2], a[0,:], a[:,3]
(2,5) 7 array([0,1,2,3,4]) array([3, 8])
>>> print a[1,0::2]
array([5,7,9])
indiziert Elemente und Zeilen
Auch Bereich wie bei Listen
.shape: Gibt die Größe des Arrays zurück
Matthias Ochs
25
Matrixoperationen
>>> import numpy as np
>>> a = np.array([[1, 2],[3, 4]])
>>> b = np.concatenate((a, [[5,6]]), axis = 0)
[[1, 2],
[3, 4],
[5, 6]]
>>> print b.transpose()
[[1,3,5],
[2,4,6]]
>>> print b[1].reshape((2,1))
[[3],
[4]]
concatenate: Verbindet zwei Arrays
transpose: Transponiert ein Array
reshape: Ändert die Form des Arrays
min(), max(): Berechnet Min, Max alle Elemente
Matthias Ochs
26
Lineare Algebra
>>> import numpy as np
>>> a = np.array([[1, 2],[3, 4]])
>>> i = np.eye(2)
>>> print a*i
[[1 0]
[0 4]]
>>> print a.dot(i)
[[1 2]
[3 4]]
>>> print np.linalg.inv(a)
[[-2 1],
[1.5 -0.5]]
>>> print np.lingalg.det(a)
-2.0
Array werden mit Stern-Operator punktweise multipliziert
Numpy bietet viele Funktionen zur Matrixmanipulation
Matthias Ochs
27
Visualisieren mit Python - Matplotlib
>>> import matplotlib.pyplot as plt
...
x = np.arange(0, 2*np.pi, 0.01)
y = np.sin(x)
plt.figure()
plt.plot(x,y,"r")
plt.show()
Mit Matplotlib lassen sich Ergebnisse visualisieren
Funktionalität ähnlich zu Matlab
Viele Möglichkeiten Plots anzupassen
Weitere Infos: http://matplotlib.org/
Matthias Ochs
28
Python mit OpenCV
OpenCV: Open Source Computer Vision Library
Enthält viele Algorithmen für Computer Vision
Aktuelle Version: 3.1
Libary ist in C++ geschrieben, es existieren jedoch
Python-Bindings
Im Internet gibt es viele Beschreibungen für die Installation
Weitere Infos: http://opencv.org
Matthias Ochs
29
Thank you
Matthias Ochs
[email protected]
http://www.vsi.cs.uni-frankfurt.de
Matthias Ochs
30
Herunterladen