Udostępnij za pośrednictwem


Wywoływanie interfejsu API wykrywania

Uwaga

Dostęp do usługi rozpoznawania twarzy jest ograniczony na podstawie kryteriów kwalifikowalności i użycia w celu obsługi naszych zasad odpowiedzialnej sztucznej inteligencji. Usługa rozpoznawania twarzy jest dostępna tylko dla klientów i partnerów zarządzanych przez firmę Microsoft. Użyj formularza do wprowadzania rozpoznawania twarzy, aby ubiegać się o dostęp. Aby uzyskać więcej informacji, zobacz stronę Dostęp ograniczony do twarzy.

Uwaga

Firma Microsoft ma wycofane lub ograniczone możliwości rozpoznawania twarzy, które mogą służyć do wnioskowania stanów emocjonalnych i atrybutów tożsamości, które, w przypadku nieprawidłowego użycia, mogą podlegać stereotypom, dyskryminacji lub niesprawiedliwej odmowy usług. Wycofane możliwości to emocje i płeć. Ograniczone możliwości to wiek, uśmiech, zarost, włosy i makijaż. Wyślij wiadomość e-mail do interfejsu API rozpoznawania twarzy platformy Azure, jeśli masz odpowiedzialny przypadek użycia któregokolwiek z ograniczonych możliwości. Przeczytaj więcej na temat tej decyzji tutaj.

W tym przewodniku pokazano, jak używać interfejsu API wykrywania twarzy do wyodrębniania atrybutów z danego obrazu. Poznasz różne sposoby konfigurowania zachowania tego interfejsu API w celu spełnienia Twoich potrzeb.

Fragmenty kodu w tym przewodniku są napisane w języku C# przy użyciu biblioteki klienta rozpoznawania twarzy usługi Azure AI. Ta sama funkcja jest dostępna za pośrednictwem interfejsu API REST.

Ustawienia

W tym przewodniku założono, że utworzono już obiekt FaceClient o nazwie faceClient, używając klucza rozpoznawania twarzy i adresu URL punktu końcowego. Aby uzyskać instrukcje dotyczące konfigurowania tej funkcji, postępuj zgodnie z jednym z przewodników Szybki start.

Przesyłanie danych do usługi

Aby znaleźć twarze i uzyskać ich lokalizacje na obrazie, wywołaj metodę DetectAsync. Przyjmuje ciąg adresu URL lub nieprzetworzone dane binarne obrazu jako dane wejściowe.

var response = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false);
IReadOnlyList<FaceDetectionResult> faces = response.Value;

Usługa zwraca obiekt FaceDetectionResult , który można wykonać zapytanie o różne rodzaje informacji, określone poniżej.

Aby uzyskać informacje na temat analizowania lokalizacji i wymiarów twarzy, zobacz FaceRectangle. Zwykle ten prostokąt zawiera oczy, brwi, nos i usta. Górna część głowy, uszu i podbródka nie musi być dołączona. Aby użyć prostokąta twarzy, aby przycinać pełną głowę lub uzyskać portret w połowie strzału, należy rozwinąć prostokąt w każdym kierunku.

Określanie sposobu przetwarzania danych

Ten przewodnik koncentruje się na specyfikach wywołania Detect, takich jak argumenty, które można przekazać i co można zrobić z zwracanymi danymi. Zalecamy wykonywanie zapytań dotyczących tylko potrzebnych funkcji. Wykonanie każdej operacji zajmuje więcej czasu.

Uzyskiwanie identyfikatora twarzy

Jeśli ustawisz parametr returnFaceId na true (tylko zatwierdzonych klientów), możesz uzyskać unikatowy identyfikator dla każdej twarzy, której można użyć w kolejnych zadaniach rozpoznawania twarzy.

foreach (var face in faces)
{
    string id = face.FaceId.ToString();
    FaceRectangle rect = face.FaceRectangle;
}

Opcjonalny parametr faceIdTimeToLive określa, jak długo (w sekundach) identyfikator twarzy powinien być przechowywany na serwerze. Po upływie tego czasu identyfikator twarzy zostanie usunięty. Wartość domyślna to 86400 (24 godziny).

Uzyskiwanie punktów orientacyjnych twarzy

Punkty orientacyjne twarzy to zestaw łatwych do znalezienia punktów na twarzy, takich jak źrenice lub wierzchołek nosa. Aby uzyskać dane punktów orientacyjnych twarzy, ustaw parametr detectionModel na FaceDetectionModel.Detection03 i parametr returnFaceLandmarks na truewartość .

// Note DetectionModel.Detection02 cannot be used with returnFaceLandmarks.
var response2 = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false, returnFaceLandmarks: true);
IReadOnlyList<FaceDetectionResult> faces2 = response2.Value;

Pobieranie atrybutów twarzy

Oprócz prostokątów twarzy i punktów orientacyjnych interfejs API wykrywania twarzy może analizować kilka atrybutów koncepcyjnych twarzy. Aby uzyskać pełną listę, zobacz sekcję koncepcyjną Atrybuty twarzy.

Aby przeanalizować atrybuty twarzy, ustaw parametr detectionModel na FaceDetectionModel.Detection03 i parametr returnFaceAttributes na listę wartości wyliczenia FaceAttributeType.

var requiredFaceAttributes = new FaceAttributeType[] {
    FaceAttributeType.Detection03.Blur,
    FaceAttributeType.Detection03.HeadPose,
    FaceAttributeType.Detection03.Mask,
    FaceAttributeType.Recognition04.QualityForRecognition
};
// Note DetectionModel.Detection02 cannot be used with returnFaceAttributes.
var response3 = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false, returnFaceAttributes: requiredFaceAttributes);
IReadOnlyList<FaceDetectionResult> faces3 = response3.Value;

Pobieranie wyników z usługi

Wyniki punktów orientacyjnych twarzy

Poniższy kod pokazuje, jak można pobrać lokalizacje nosa i źrenice:

foreach (var face in faces2)
{
    var landmarks = face.FaceLandmarks;

    double noseX = landmarks.NoseTip.X;
    double noseY = landmarks.NoseTip.Y;

    double leftPupilX = landmarks.PupilLeft.X;
    double leftPupilY = landmarks.PupilLeft.Y;

    double rightPupilX = landmarks.PupilRight.X;
    double rightPupilY = landmarks.PupilRight.Y;

Możesz również użyć danych charakterystycznych twarzy, aby dokładnie obliczyć kierunek twarzy. Można na przykład zdefiniować obrót twarzy jako wektor z środka ust do środka oczu. Poniższy kod oblicza ten wektor:

    var upperLipBottom = landmarks.UpperLipBottom;
    var underLipTop = landmarks.UnderLipTop;

    var centerOfMouth = new Point(
        (int)((upperLipBottom.X + underLipTop.X) / 2),
        (int)((upperLipBottom.Y + underLipTop.Y) / 2));

    var eyeLeftInner = landmarks.EyeLeftInner;
    var eyeRightInner = landmarks.EyeRightInner;

    var centerOfTwoEyes = new Point(
        (int)((eyeLeftInner.X + eyeRightInner.X) / 2),
        (int)((eyeLeftInner.Y + eyeRightInner.Y) / 2));

    var faceDirectionVectorX = centerOfTwoEyes.X - centerOfMouth.X;
    var faceDirectionVectorY = centerOfTwoEyes.Y - centerOfMouth.Y;
}

Gdy znasz kierunek twarzy, możesz obrócić prostokątną ramkę twarzy, aby wyrównać ją dokładniej. Aby przycinać twarze na obrazie, można programowo obracać obraz, aby twarze zawsze pojawiały się w pozycji pionowej.

Wyniki atrybutu twarzy

Poniższy kod pokazuje, jak można pobrać dane atrybutu twarzy żądane w oryginalnym wywołaniu.

foreach (var face in faces3)
{
    var attributes = face.FaceAttributes;
    var blur = attributes.Blur;
    var headPose = attributes.HeadPose;
    var mask = attributes.Mask;
    var qualityForRecognition = attributes.QualityForRecognition;
}

Aby dowiedzieć się więcej na temat każdego z atrybutów, zobacz przewodnik koncepcyjny dotyczący wykrywania twarzy i atrybutów .

Następne kroki

W tym przewodniku przedstawiono sposób używania różnych funkcji wykrywania i analizy twarzy. Następnie zintegruj te funkcje z aplikacją, aby dodać dane twarzy od użytkowników.