iX 12/2017
S. 134
Praxis
Maschinelle Bildverarbeitung
Aufmacherbild

Gesichtserkennung mit OpenCV und Python, Teil 2: Die OpenCV-API

Genauer hinsehen

OpenCV bietet eine Vielzahl von Funktionen. Aber welche davon braucht man für die Gesichtserkennung und wie ruft man sie aus Python auf?

Der erste Teil des Tutorials hat einen Überblick gegeben, was OpenCV kann und wie Gesichtserkennung grundsätzlich funktioniert. Er endete damit, wie sich die Computer-Vision-Bibliothek über ein simples

import cv2

aus Python-Programmen heraus in IPython nutzen lässt [1].

Interessant ist nun, was sich an cv2. alles anhängen lässt. Im ersten Teil des Tutorials griff die Funktion cv2.VideoCapture das Bild der Webcam ab und cv2.imshow brachte es auf den Bildschirm. Aber natürlich bietet OpenCV eine Menge mehr Funktionen.

OpenCV, C++ und die Python-Bindings

Zunächst ein Paar Worte zum Thema Python und OpenCV. Die Bildverarbeitungsbibliothek ist in C++ implementiert. Über Bindings lassen sich die APIs auch aus anderen Sprachen ansprechen. Um C++-Funktionen aus Python heraus aufrufen zu können, erstellen Skripte aus den C++-Headern der Bibliothek automatisch Wrapper für alle Funktionen, die der Entwickler zum Exportieren markiert hat.

Das ganze Prozedere im Detail zu kennen, ist nur relevant, wenn man nicht nur mit, sondern auch für OpenCV entwickeln möchte. Eine detaillierte Darstellung findet sich in der OpenCV-Dokumentation (siehe ix.de/ix1712134). Interessant für die Arbeit mit der Bildbearbeitungsbibliothek ist vor allem, dass das Ergebnis das oben importierte Modul cv2 ist.

Auswirkungen hat dies auch auf die Dokumentationen, die es in diversen Ausführungen und für verschiedene OpenCV-Versionen gibt. In der aktuellen Doxygen-Dokumentation finden sich beispielsweise keinerlei Informationen zu den Python-Aufrufen – in den Sphinx-Versionen zu OpenCV 2.4 sowie 3.0 hingegen schon (siehe ix.de/ix1712134). Es lohnt sich daher, in verschiedenen Versionen der Dokumentation zu suchen!

Alternativ lässt sich eine Erläuterung der Python-Funktionen auch direkt in IPython über

help(cv2.VideoCapture)

abfragen. Leider ist die Dokumentation an dieser Stelle eher spärlich.

Der Funktionsumfang ist umso größer: Der Tabulator bringt hinter cv2. über 1700 mögliche Vervollständigungen zum Vorschein. Die originale C++-API-Dokumentation zeigt OpenCV einigermaßen übersichtlich, da der gesamte Funktionsumfang der Bibliothek in Module und Submodule unterteilt ist. Das ungezielte Stöbern in den cv2.-Ergänzungen, die IPython anzeigt, ist hingegen weniger zielführend.

Im Folgenden werden daher alle Funktionen kurz vorgestellt, die allgemein für die Gesichtserkennung und somit für das Beispielprojekt im dritten Teil der OpenCV-Serie benötigt werden – und zwar in der Reihenfolge des Workflows. Der dritte Teil wird dann zeigen, wie die Funktionen verwoben und mit welchen konkreten Parametern sie aufgerufen werden.