Partager via


Microsoft Cognitive Services Face API Teil 1

Die Art und Weise, wie wir in Zukunft Computer bedienen werden, wird sich ändern. Neben den gewohnten Mechanismen mit Tastatur, Maus, Touch und Spracheingabe wird Software zunehmend intelligenter und besser auf den User eingehen und die Kommunikation mit der Maschine vereinfachen.

Zu diesem Zweck forschen Software-Entwickler daran, Machine Learning zu verbessern und Services bereitzustellen, welche APIs zur Konsumentation von Logik in eigene Apps erlauben.

Microsoft hat kürzlich die Cognitive Services vorgestellt, die mehr als zwanzig (!) verschiedene Cloud-Services zur Integration in eigene Apps anbieten. Der Projektname lautete übrigens “Project Oxford”. Die Cognitive Services sind derzeit noch in Preview und die Endpoints und Libraries heißen auch noch “Project Oxford”.

Die Website https://www.microsoft.com/cognitive-services zeigt alle verfügbaren Services.

image

Ich habe mir ein einfaches Service herausgepickt, um dieses selbst einmal auszuprobieren, nämlich die Face-API aus der Vision-Kategorie.

image

Der Startpunkt ist Face-API Webseite.
Die Face-API Dokumentation liefert den Überblick und weitere Links zu Beispielen.

Das Tutorial Get Started with Face API in C# zeigt die ersten Schritte zum Ausprobieren. Los gehts!

Als Voraussetzung ist für jedes Service ein (derzeit kostenfreier) API Key erforderlich. Dieser kann unter https://www.microsoft.com/cognitive-services/en-us/sign-up mit einem Microsoft Account (MSA) angefordert werden.

Die Verwaltung der Keys erfolgt unter https://www.microsoft.com/cognitive-services/en-us/subscriptions.

image

In meinem Fall benötige ich das “Face-Preview” Service. Hier muss der Key für die Face-API angezeigt werden (ein Key ist ausreichend) und hier können die Keys verwaltet werden.

Noch ein Wort zu den Preisen: Diese richten sich nach dem Service und der Nutzung. Soweit ich gesehen habe, sind alle Services bis zu einem Volumen von 5,000 transactions per month kostenfrei! Die aktuellen Preise sind unter Preview pricing ersichtlich.

image

Damit können wir das Demoprojekt starten. Zunächst wird in Schritt 1 mit Visual Studio ein neues WPF Projekt angelegt und in Schritt 2 mit dem NuGet Package Manager das Paket Newtonsoft.Json installiert.

Die Cognitive Services sind per HTTPS Request gegen den entsprechenden Cloud-Endpoint aufrufbar. Dieser lautet (siehe Face API - V1.0):

https://api.projectoxford.ai/face/v1.0/detect[?returnFaceId][&returnFaceLandmarks][&returnFaceAttributes]

Für die .NET Plattform gibt es zur einfacheren Nutzung Client Libraries, um die Web-Requests einzukapseln und um das Service bequemer zu verwenden. In Schritt 3 wird nun die Client-Library “Microsoft.Project Oxford.Face” über NuGet wie folgt bezogen.

image

Danach werden die Libraries zu MainWindow.xaml.cs hinzugefügt:

using Microsoft.ProjectOxford.Face; using Microsoft.ProjectOxford.Face.Contract;

…und ein Interface mit dem eigenen Subscription Key (aus der eigenen Subscription von oben) in der MainWindow class erstellt:

private readonly IFaceServiceClient faceServiceClient = new FaceServiceClient("Your subscription key");

Das wars schon mit den ersten Vorbereitungen für das App-Framework. Nun geht es um den eigentlichen Code zur Verwendung der Face-API.

Wir verwenden die Face-Detect API um ein Bild direkt upzuloaden. Der Link führt direkt zur Dokumentation des Endpoints. Für asynchrone Methoden kann die DetectAsync methode des FaceServiceClient verwendet werden. Jedes retournierte Gesicht enthält ein Rechteck um die Position im Foto zu markieren, das mit Face Attributes ergänzt ist. In Schritt 4 wird der FaceServiceClient verwendet.

In Schritt 5 des Tutorials wird die ButtonClick Methode async und das Ergebnis ausgewertet. Dabei wird pro erkanntem Gesicht ein rotes Rechteck über die Position gezeichnet. Dazu habe ich ein Schwarz/Weiß-Foto von mir verwendet, das Beispiel zeigt den Output.

image

Sehr schön. Das Beispiel klappt und markiert das erkannte Gesicht auf dem Foto. In meinem Beispiel besteht das Array faceRects aus nur einem Face.

Die Qualität der Bilder muss natürlich ausreichend sein. Auch Gruppenfotos (hier ein Schnappschuss der Audience vom letzten Microsoft Community Open Day in München) liefern beeindruckende Ergebnisse.

image

In Teil 2 interessieren mich jedoch noch weitere Details und was die Face-API so alles erkennen und liefern kann…