Computer Vision – Gesichtserkennung mit künstlicher Intelligenz

Künstliche Intelligenz wird in der Computer Vision genutzt. In der Computer Vision geht es darum, Kamerabilder auf unterschiedlichste Art und Weise zu verarbeiten und zu analysieren, um deren Inhalt zu verstehen oder gezielt Informationen zu entnehmen. OpenCV (Open Source Computer Vision Library) ist eine frei verfügbare Programmbibliothek mit Funktionen der Computer Vision.

Eine spannende Funktion der Computer Vision ist die Gesichtserkennung. Wir entwickeln ein Programm, das die Gesichter auf einem Foto zählt. Im Projektordner findest du ein altes Foto mit NASA-Astronauten (Quelle: NASA, das Foto ist gemeinfrei). Du siehst es weiter unten. Außerdem brauchst du noch eine XML-Datei namens haarcascade_ frontalface_default.xml. Nach der Installation von opencv-python findest du sie im Verzeichnis:

… \Python311\Lib\site-packages\cv2\data

Du kannst die Datei einfach in deinen Projektordner kopieren. Die XML-Datei enthält Daten, die für das Erfassen von Gesichtern verwendet werden. Diese Daten wurden durch eine besondere Art des Machine Learnings mit vielen Fotos von menschlichen Gesichtern gewonnen (sogenannte Haar-Kaskaden-Klassifizierer).

Was sind Haar-Kaskaden?

Haar-Kaskaden haben nichts mit Haaren zu tun, sondern sind ein Algorithmus zur Objekterfassung, der im Jahren 2001 von Paul Viola und Michael Jones veröffentlicht worden ist. Dabei wird ein Kamerabild mit sogenannten Haar-Features durchsucht. Dies sind rechteckige Schwarzweiß-Formen, die Funktionsgraphen ähneln, die schon im Jahr 1910 der Mathematiker Alfred Haar beschrieben hat. Das Bild zeigt einige Haar-Features, die von Viola und Jones verwendet worden sind:

Die Grundidee ist, dass Gesichter typische Hell-Dunkelbereiche haben, die von Haar-Features erfasst werden können.

Aus der XML-Datei wird im Python-Programm ein Klassifizierer-Objekt gewonnen. Damit kann man in einem Graustufenbild die Stellen finden, an denen sich ein menschliches Gesicht befindet. Die Methode detectMultiScale() liefert eine Liste von Rechtecken (jeweils repräsentiert durch ein Tupel von vier Zahlen), in denen sich Gesichter befinden.

Das folgende Programm erkennt alle Gesichter auf dem Foto. Es gibt die Anzahl der Gesichter als Text aus und liefert ein Fenster mit dem Astronautenfoto, in dem das erste gefundene Gesicht eingerahmt ist.

Programm:

Ausgabe:

Ich habe 14 Gesichter gefunden.

So funktioniert es:

#1: Aus der Datei mit dem Astronautenfoto wird ein NumPy-Array erzeugt, das die Pixel des Fotos enthält.

#2: Aus dem Farbbild wird ein Graustufenbild gewonnen. Das Objekterkennungsverfahren funktioniert nur mit Graustufenbildern.

#3: Aus der XML-Datei wird ein Klassifizierer-Objekt gewonnen.

#4: Hier wird eine Methode aufgerufen, die das Bild analysiert und die Gesichter findet. Das erste Argument ist der Name des Image-Objekts. Die Methode liefert eine Liste aus Tupeln. Jedes Tupel besteht aus vier Zahlen. Sie geben die x- und y-Position der oberen linken Ecke sowie Breite und Höhe des gefundenen Rechtecks an, in dem sich ein Gesicht befindet.

#5: Hier wird die Anzahl der gefundenen Gesichter ermittelt (Länge der Liste rechtecke).

#6: Hier wird ein Text aus drei Teilen ausgegeben.

#7: Aus der Liste wird das erste Tupel gelesen, das ein Rechteck mit Gesicht darstellt. Die Variablen x, y, w und h enthalten x- und y-Position der linken oberen Ecke des Rechtecks, sowie dessen Breite (w) und Höhe (h).

#8: In das Farbbild wird ein Rechteck gezeichnet, dessen Position und Größe durch das Tupel bestimmt sind. Es ist das Rechteck um das Gesicht des Astronauten rechts oben auf dem Bild.

#9: Es öffnet sich ein Viewer-Fenster mit dem Titel Foto mit dem ersten erkannten Gesicht, das das Farbbild mit eingezeichnetem Rechteck darstellt.

Aufgabe: Alle Gesichter unkenntlich machen

Wandle das Programm ab, sodass auf dem Bild alle Gesichter durch ein graues Rechteck unkenntlich gemacht werden.

Hinweis: Wenn du beim Aufruf der Funktion cv2.rectangle() als Liniendicke (letztes Argument) -1 angibst, wird ein gefülltes Rechteck gezeichnet.


Dieser Artikel ist ein Auszug aus dem Buch Künstliche Intelligenz kapieren & programmieren von Michael Weigend. Alle Infos zum Buch, das Inhaltsverzeichnis und eine kostenlose Leseprobe findet ihr bei uns im Shop.

Kommentar verfassen