Microsoft bietet mit seiner Cloud-Plattform Azure eine Vielzahl verschiedener Cloud-Dienste im Bereich künstlicher Intelligenz an. Diese Dienste lassen sich grob in zwei verschiedene Bereiche unterteilen. Der erste Bereich umfasst das Erstellen von eigenen Modellen. Ein Beispiel hierfür ist der Azure Machine Learning Workspace, den ich im dem Blogbeitrag Keras und TensorFlow on Azure vorgestellt habe. Der andere Bereich umfasst vortrainierte Modelle für verschiedene Anwendungsbereiche, die man relativ einfach per Web Request in eigene Anwendungen integrieren kann. Ein Beispiel hierfür sind die Azure Cognitive Services. Die Cognitive Services bieten hierbei Dienste aus den Bereichen Entscheidung, Sprache, Bildanalyse und Suchen an.

Im folgenden Artikel werden wir uns einen Dienst aus dem Bereich Bildanalyse näher anschauen, die Face API.

Funktionen und Anwendungsbereiche

Die Face API ermöglicht es einem menschliche Gesicht in Bildern zu erkennen. Hierfür sendet man das Bild an einen speziellen Endpunkt und erhält als Ergebnis eine Liste mit Koordinaten sowie Höhen- und Breitenangaben (Rechteck mit entsprechender Position) für jedes erkannte Gesicht auf dem Bild. Zusätzlich zu der Information wo im Bild sich ein Gesicht befindet, kann man per Parameter zusätzliche Eigenschaften des Gesichts (Gesichtsattribute) ermitteln. Zu diesen Gesichtsattributen gehören Alter, Emotion, Geschlecht, Haltung, Lächeln und Gesichtsbehaarung. Bei den Emotionen unterscheidet die Face API Wut, Verachtung, Ekel, Angst, Freude, Neutralität, Traurigkeit und Überraschung. Für jede dieser Emotionen wird hierbei eine entsprechende Wahrscheinlichkeit angegeben (siehe Listing 1).

"emotion": {
    "anger": 0,
    "contempt": 0,
    "disgust": 0,
    "fear": 0,
    "happiness": 0.999,
    "neutral": 0.001,
    "sadness": 0,
    "surprise": 0
}

Listing 1

Nachdem man erkennen kann, ob sich auf einem Bild ein oder mehrere Gesichter befinden, und welche Gesichtsattributen den Gesichtern jeweils zugeordnet wurden, stellt sich noch die Frage wer auf dem Bild zu sehen ist.

Diese Frage lässt sich auf zwei verschiedene Arten beantworten. Eine Möglichkeit ist der Gesichtsabgleich. Hierbei wird die Wahrscheinlichkeit berechnet, dass zwei Gesichter zu der gleichen Person gehören. Hierfür werden entsprechend zwei Bilder analysiert und als Ergebnis erhält man einen Wahrscheinlichkeitswert der angibt, mit welcher Wahrscheinlichkeit beide Gesichter zur gleichen Person gehören. In diesem Fall müsste man aber für jede Person, von der man wissen möchte, ob sie auf dem Bild ist, ein Bild der Person analysieren lassen und diese Informationen dann zusammen mit dem eigentlichen Bild auswerten lassen.

Die andere Möglichkeit besteht darin, dass man für Personen, die man erkennen möchte, jeweils ein eigenes Modell trainiert. Hierfür wird über die Face API eine Person erstellt. Anschließend sendet man eine Menge von Bildern dieser Person an die Face API und lässt ein eigenes Modell basierend auf den gesendeten Bildern berechnen. Auf diese Weise lassen sich für verschiedene Personen jeweils eigene Modelle trainieren.

Sobald das Modell erstellt wurde, kann man ein Bild analysieren lassen und wenn auf dem Bild eine der Personen, für die ein eigenes Modell erstellt wurde, erkannt wird, dann erhält man die eindeutige ID der Person zusammen mit einem entsprechenden Wahrscheinlichkeitswert. Dieser Wert gibt an, mit welcher Wahrscheinlichkeit es sich um die entsprechende Person handelt.

Nachdem wir uns angeschaut haben, was man mit der Face API machen kann, kann man sich eventuell noch die Frage stellen was mögliche Anwendungsfälle für die Face API (oder eine vergleichbare API) sind.

Ein Anwendungsfall für die Erkennung von Gesichtern und Emotionen ist personalisierte Werbung. Die Handelskette Real hat in einigen ihre Filialen personalisierte Werbung über Gesichtserkennung getestet. Dabei analysieren verschiedene Kameras im Markt die Gesichter und Blicke der Kunden, um ihnen dann auf entsprechenden Displays personalisierte Werbung anzuzeigen.

Ein weiterer Anwendungsfall ist das automatisierte Produkt-Feedback. Hierbei werden Produkttestern verschiedene Produkte oder Werbespots präsentiert und die entsprechenden Emotionen automatisiert ausgewertet. Hierdurch müssen die Produkttester keine Fragebögen ausfüllen und man kann auch den Verlauf der Emotionen während der Präsentation oder des Produkttests besser nachhalten und auswerten.

Der letzte Anwendungsfall, der in diesem Artikel beschrieben wird, ist die Authentifizierung. Der Fahrdienst Uber verwendet beispielsweise die Face API, um ihre Fahrer zu identifizieren. Hierbei muss der Fahrer, wenn er die Uber App startet, ein Foto von sich machen und dies wird dann mit der Person abgeglichen, die dem Konto hinterlegt ist. So will Uber sicherstellen, dass der Fahrer, der die Fahrt durchführt, auch wirklich der bei Uber registrierte Fahrer ist.

Beispiel

Nachdem im vorherigen Abschnitt die Face API eher auf einer konzeptionellen bzw. allgemeinen Ebene vorgestellt wurde, wird im Folgenden die Face API auf einer technischen Ebene betrachtet. Hierfür wird zum einen ein Bild von Satya Nadella (siehe Abbildung 1) hinsichtlich der Gesichtsattribute und der Emotionen analysiert und zum anderen wird Satya Nadella als Person innerhalb der Face API angelegt und ein entsprechendes Modell für ihn trainiert und anschließend validiert.

Abbildung 1 – Quelle: https://www.nytimes.com/2014/02/21/business/satya-nadella-chief-of-microsoft-on-his-new-role.html

Voraussetzungen

Um die folgenden Schritte nachvollziehen zu können, benötigt man ein Microsoft-, Facebook-, LinkedIn- oder ein GitHub-Konto. Mit Hilfe eines dieser Konten kann man sich dann einen API-Schlüssel erstellen lassen, mit dem man die Cognitive Services ausprobieren kann. Dieser Schlüssel ist dann 7 Tage lang gültig. Zusätzlich zum Schlüssel für die Face API wird eine lauffähige Node.js-Umgebung benötigt und das Paket sync-request muss installiert sein oder per npm install installiert werden.

Erkennung und Analyse von Gesichtern

Wenn alle Voraussetzungen erfüllt sind, kann man das Beispiel-Skript öffnen und den API-Schlüssel an der Stelle subscriptionKey eintragen (siehe Listing 2).

const request = require("sync-request");
const subscriptionKey = 'ValidSubscriptionKey';
const headerInformation = {
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key' : subscriptionKey
};

Listing 2

Anschließend kann man das Skript per node faceapi.js starten. Als erstes wird hierbei ein Foto von Satya Nadella (siehe Abbildung 1) an die Face API gesendet.

Die Face API unterstützt hierbei die Bildformate JPEG, PNG, GIF und BMP in einer maximalen Größe von 6 MB. Die Gesichter, die erkannt werden sollen, müssen hierbei eine Mindestgröße von 36×36 Pixel haben. Insgesamt können maximal 100 Gesichter pro Foto erkannt werden.

Zusätzlich zum eigentlichen Bild werden noch verschiedene Parameter mit an die Face API gesendet (siehe Listing 3).

const param1 = "returnFaceId=true"
const param2 = "returnFaceAttributes=age,gender,glasses,hair,emotion"
const param3 = "recognitionModel=" + recognitionModel;
var res = request('POST', uriBase + `/detect?${param1}&${param2}&${param3}`, {
   headers: headerInformation,
   json: {
      "url" : imageUrl
   }
});

Listing 3

Der erste Parameter (param1) ist für die FaceID. Jedes Gesicht, das von der Face API analysiert wird, bekommt eine eindeutige FaceID zugewiesen. Unter dieser FaceID sind die extrahierten Features des Gesichts gespeichert. Im Gegensatz zu den analysierten Bildern, werden die FaceIDs für 24 Stunden in der Cloud gespeichert. Die FaceId wird beispielsweise benötigt, wenn man für eine Person ein eigenes Modell erstellt hat und wissen will, ob die ermittelte FaceId zu der Person gehört.

Der zweite Parameter (param2) betrifft die Gesichtsattribute. Hierbei wird angegeben, welche Gesichtsattribute ermittelt werden sollen. In dem vorliegenden Beispiel sollen Alter, Brille, Haare und die Emotion bestimmt werden.

Der dritte und letzte Parameter (param3) betrifft das zu verwendende Basis-Modell. Der Standardwert für diesen Parameter ist recognition_01. Microsoft empfiehlt aber das seit März 2019 verfügbare Modell recognition_02 zu verwenden, da dies eine deutlich bessere Erkennungsrate aufweist. Im Abschnitt Erstellen von eigenen Modellen wird das Modell für Satya Nadella einmal mit recognition_01 und einmal mit recognition_02 trainiert und anschließend die Ergebnisse verglichen.

Wenn alle Parameter entsprechend gesetzt sind, kann der Request an die Face API gesendet werden. Als Ergebnis kommt anschließend ein JSON Dokument zurück (siehe Listing 4)

{
    "faceId": "6d87dd56-e91e-4e00-aa91-a5d7f82ddea7",
    "faceRectangle": {
      "top": 250,
      "left": 310,
      "width": 451,
      "height": 451
    },
    "faceAttributes": {
      "gender": "male",
      "age": 46,
      "glasses": "ReadingGlasses",
      "hair": {
        "bald": 0.96,
        "invisible": false,
        "hairColor": []
      },
      "emotion": {
        "anger": 0,
        "contempt": 0,
        "disgust": 0,
        "fear": 0,
        "happiness": 0.999,
        "neutral": 0.001,
        "sadness": 0,
        "surprise": 0
      },
    }
  }

Listing 4

In dem Ergebnisdokument findet man die FaceId sowie die Koordinaten und Größenangaben des Rechtecks in dem sich das erkannte Gesicht befindet. Wenn sich auf dem Bild mehrere Gesichter befinden würden, dann würde man eine Liste mit den entsprechenden Objekten bekommen.

Zusätzlich zur FaceID und den Daten zur Position des Gesichts befinden sich in dem Dokument auch die ermittelten Gesichtsattribute. In dem Beispiel von Satya Nadella (zu dem Zeitpunkt der Aufnahme 47 Jahre alt) wurde ein glücklicher 46-jähriger Mann mit Glatze und Brille erkannt. In diesem Beispiel hat die Face API das Gesicht und die zusätzlichen Merkmale ziemlich exakt ermittelt.

Erstellen von eigenen Modellen

Wenn man bestimmte Personen auf Bildern erkennen möchte, so kann man für diese Personen ein eigenes Modell trainieren.

Abbildung 2

Hierfür sind insgesamt vier Schritte notwendig (siehe Abbildung 2). Alle Schritte befinden sich auch im dem Beispiel-Skript.

Im ersten Schritt muss eine Personengruppe angelegt werden. In einer Personengruppe können ein oder mehrere Personen angelegt werden. Um eine Personengruppe anzulegen, wird als Parameter lediglich ein eindeutiger Bezeichner (GruppenID) benötigt. Zusätzlich zum Bezeichner kann man noch eine Beschreibung sowie das zugrundeliegende Basis-Modell (recognition_01 oder recognition_02) angeben. Nachdem die Personengruppe erstellt wurde, wird im nächsten Schritt eine Person innerhalb der Personengruppe angelegt. Hierfür werden die GruppenID und der Name der Person benötigt. Sendet man diese Informationen an die Face API erhält man als Ergebnis eine eindeutige PersonID. Im vorletzten Schritt muss man dann Bilder dieser Person hochladen. Hierbei muss neben dem eigentlichen Bild die GruppenID, die PersonID und das zugrundeliegende Basis-Modell als Parameter mitgegeben werden. Hat man alle Bilder der Person hochgeladen, kann das Modell trainiert werden.

Ist das Modell fertig trainiert, kann man ein Bild zur Analyse an die Face API senden. Hierfür lässt man im ersten Schritt das Bild analysieren und man bekommt die Position des Gesichts sowie die eindeutige FaceID zurück. Diese FaceID wird dann an den Endpunkt der Personengruppe, in der sich die Person befindet, von der man wissen möchte, ob diese sich auf dem Bild befindet, gesendet. Als Ergebnis erhält man dann ein JSON Dokument in dem sich die IDs möglicher Kandidaten befinden (siehe Listing 5).

{
    "faceId": "6d87dd56-e91e-4e00-aa91-a5d7f82ddea7",
    "candidates": [
      {
        "personId": "109208c1-ca28-42b4-85b9-6b18651a1e37",
        "confidence": 0.96047
      }
    ]
  }

Listing 5

In dem Beispiel-Skript wird eine Personengruppe mit dem Namen famous-people und darin Satya Nadella als Person angelegt.
Das Modell für die Person Satya Nadella wird mit insgesamt 11 Bildern trainiert. Diese 11 Bilder reichen bereits aus, um bei einem anderen Bild von Satya Nadella eine Wahrscheinlichkeit von 85.7% (recognition_01) bzw. 96.0% (recognition_02) bei der Erkennung zu erreichen.

Preise

Die Face API kann bis zu einem Kontingent von 30.000 Transaktionen (Anfragen) pro Monat kostenlos verwendet werden. Hierbei dürfen aber maximal 20 Transaktionen pro Minute ausgeführt werden. Wenn man mit diesem Kontingent nicht auskommt, werden abhängig von der monatlichen Anzahl der Transaktionen zwischen 0,338€ und 0,844€ pro 1000 Transaktionen berechnet.

0 bis 1 Millionen Transaktionen €0,844 pro 1.000 Transaktionen
1 bis 5 Millionen Transaktionen €0,675 pro 1.000 Transaktionen
5 bis 100 Millionen Transaktionen €0,506 pro 1.000 Transaktionen
Über 100 Millionen Transaktionen €0,338 pro 1.000 Transaktionen
Gesichtsspeicher €0,009 pro 1.000 Gesichter pro Monat

Wenn man eigene Modelle berechnet hat, werden hier noch einmal 0,009€ pro 1.000 Gesichter und Monat berechnet. Die aktuellen Preise für die Face Api kann man sich auf der Webseite der Face API näher ansehen.

Fazit

In diesem Blogbeitrag haben wir uns die Azure Face API näher angeschaut. Mit Hilfe der Face Api kann man sehr schnell und einfach Gesichter in Bildern erkennen. Zusätzlich zu der reinen Erkennung der Gesichter lassen sich noch Zusatzinformationen der Person wie das Alter, die Haarfarbe oder die Emotion bestimmen. Darüber hinaus kann man in wenigen Minuten eigene Modelle für bestimmte Personen erstellen und trainieren und so sehr einfach feststellen, wer auf einem Bild zu sehen ist.

Ein weiterer Vorteil der Face API ist, dass diese auch lokal in einem Docker Container ausgeführt werden kann. Microsoft bietet hierfür ein entsprechendes Docker Image an. Die Kosten kann man hierdurch leider nicht reduzieren, da der Container die Aufrufe überwacht und an einen Rechnungsendpunkt von Microsoft sendet. Allerdings hat man bei gleichen Kosten eine geringere Latenz und die Daten verlassen die eigene Umgebung nicht. Eine ausführliche Beschreibung, wie man die Face API mit Docker verwendet, findet man hier.

Links

Azure Cognitive Services

Transparency Note: Azure Cognitive Services Face API

Facial Emotion Detection using AI: Use-Cases

Deutsche Post und Real testen personalisierte Werbung

Uber boosts platform security with the Face API, part of Microsoft Cognitive Services

Install and run Face containers

Jetzt teilen auf:

Jetzt kommentieren