Yüz Tanıma API'si kullanılarak algılanan duygu tanıma
Yüz Tanıma API'si, insanlara göre algılanan ek açıklamaları temel alan yüz ifadesinde Anger, Contempt, Degust, Fear, mutluluğu, nötr, sadyeti ve sürpriz 'i tespit etmek için duygu tanıma algılaması gerçekleştirebilir. Ancak, yüz ifadeleri tek başına kişilerin iç durumlarını temsil etmediği unutulmamalıdır.
Yüz ifadesi için duygu tanıma sonucu döndürmenin yanı sıra, yüz tanıma API'si algılanan yüzeyler için de bir sınırlayıcı kutusu de verebilir.
Duygu tanıma, bir istemci kitaplığı aracılığıyla ve bir REST API aracılığıyla gerçekleştirilebilir. Bu makale REST API aracılığıyla duygu tanıma tanımayı gerçekleştirmeye odaklanır. REST API hakkında daha fazla bilgi için bkz. yüz REST API.
Yüz Tanıma API'si, videodaki insanların yüz ifadelerini tanımak için de kullanılabilir ve bunların bir özetini döndürebilir. Daha fazla bilgi için bkz. videoları gerçek zamanlı olarak çözümleme.
Not
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Yüz Tanıma API'si kullanmak için bir API anahtarı alınmalıdır. Bu, TRY bilişsel Hizmetlerüzerinden elde edilebilir.
Yüz Tanıma API'si hakkında daha fazla bilgi için bkz. Yüz Tanıma API'si.
Kimlik Doğrulaması
Yüz Tanıma API'si yapılan her istek üstbilginin değeri olarak belirtilmelidir bir API anahtarı gerektirir Ocp-Apim-Subscription-Key . Aşağıdaki kod örneği, bir isteğin üstbilgisine API anahtarının nasıl ekleneceğini göstermektedir Ocp-Apim-Subscription-Key :
public FaceRecognitionService()
{
_client = new HttpClient();
_client.DefaultRequestHeaders.Add("ocp-apim-subscription-key", Constants.FaceApiKey);
}
Yüz Tanıma API'si geçerli bir API anahtarı geçirilememesi 401 yanıt hatasına neden olur.
Duygu tanıma gerçekleştir
Duygu tanıma detecthttps://[location].api.cognitive.microsoft.com/face/v1.0 , API [location]] anahtarınızı almak için kullandığınız bölge olan ' de API 'ye görüntü içeren bir post isteği yapılarak gerçekleştirilir. İsteğe bağlı istek parametreleri şunlardır:
returnFaceId– algılanan yüzlerin Facd 'leri döndürülüp döndürülmeyeceğini belirtir.truevarsayılan değerdir.returnFaceLandmarks– algılanan yüzlerin yüz yüzlerini döndürülüp döndürülmeyeceğini belirtir.falsevarsayılan değerdir.returnFaceAttributes– bir veya daha fazla belirtilen yüz özniteliği çözümlenip döndürülmeyeceğini belirtir. Desteklenen yüz öznitelikleri,,,,,agegenderheadPosesmilefacialHairglasses,emotion,hair,,,,,makeupocclusionaccessoriesblurexposure, ve içerirnoise. Yüz öznitelik analizinin daha fazla hesaplama ve zaman maliyeti olduğunu unutmayın.
Görüntü içeriği, POST isteğinin gövdesinde URL veya ikili veri olarak yerleştirilmelidir.
Not
Desteklenen görüntü dosyası biçimleri JPEG, PNG, GIF ve BMP, izin verilen dosya boyutu ise 1KB ile 4MB arasında olur.
Örnek uygulamada, duygu tanıma işlemi yöntemi çağırarak çağrılır DetectAsync :
Face[] faces = await _faceRecognitionService.DetectAsync(photoStream, true, false, new FaceAttributeType[] { FaceAttributeType.Emotion });
Bu yöntem çağrısı, yansıma verilerini içeren akışı belirtir, bu, bu yüzlerin döndürülmemesi gerekir ve görüntünün duygu çözümlenmelidir. Ayrıca sonuçların bir nesne dizisi olarak döndürüleceğini belirtir Face . Sırasıyla, DetectAsync yöntemi detect duygu tanıma tanımayı gerçekleştiren REST API çağırır:
public async Task<Face[]> DetectAsync(Stream imageStream, bool returnFaceId, bool returnFaceLandmarks, IEnumerable<FaceAttributeType> returnFaceAttributes)
{
var requestUrl =
$"{Constants.FaceEndpoint}/detect?returnFaceId={returnFaceId}" +
"&returnFaceLandmarks={returnFaceLandmarks}" +
"&returnFaceAttributes={GetAttributeString(returnFaceAttributes)}";
return await SendRequestAsync<Stream, Face[]>(HttpMethod.Post, requestUrl, imageStream);
}
Bu yöntem bir istek URI 'SI oluşturur ve sonra detect yöntemi aracılığıyla API 'ye isteği gönderir SendRequestAsync .
Not
Abonelik anahtarlarınızı elde etmek için kullandığınız Yüz Tanıma API'si çağrılarındaki aynı bölgeyi kullanmanız gerekir. Örneğin, bölgeden abonelik anahtarlarınızı aldıysanız westus , yüz algılama uç noktası olur https://westus.api.cognitive.microsoft.com/face/v1.0/detect .
İsteği gönder
SendRequestAsyncYöntemi, post isteğini yüz tanıma API'si yapar ve sonucu bir dizi olarak döndürür Face :
async Task<TResponse> SendRequestAsync<TRequest, TResponse>(HttpMethod httpMethod, string requestUrl, TRequest requestBody)
{
var request = new HttpRequestMessage(httpMethod, Constants.FaceEndpoint);
request.RequestUri = new Uri(requestUrl);
if (requestBody != null)
{
if (requestBody is Stream)
{
request.Content = new StreamContent(requestBody as Stream);
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
}
else
{
// If the image is supplied via a URL
request.Content = new StringContent(JsonConvert.SerializeObject(requestBody, s_settings), Encoding.UTF8, "application/json");
}
}
HttpResponseMessage responseMessage = await _client.SendAsync(request);
if (responseMessage.IsSuccessStatusCode)
{
string responseContent = null;
if (responseMessage.Content != null)
{
responseContent = await responseMessage.Content.ReadAsStringAsync();
}
if (!string.IsNullOrWhiteSpace(responseContent))
{
return JsonConvert.DeserializeObject<TResponse>(responseContent, s_settings);
}
return default(TResponse);
}
else
{
...
}
return default(TResponse);
}
Görüntü bir akış aracılığıyla sağlandıysa, yöntemi görüntü akışını bir StreamContent akışa göre http içeriği sağlayan bir örneğe sarmalayarak post isteğini oluşturur. Alternatif olarak, görüntü bir URL aracılığıyla sağlandıysa, yöntemi, URL 'yi bir StringContent dizeye göre http içeriği sağlayan bir örneğe sarmalayarak post isteği oluşturur.
POST isteği daha sonra API 'ye gönderilir detect . Yanıt okundu, seri durumdan çıkarılmış ve çağırma yöntemine döndürüldü.
İstek detect geçerli olduğunda, isteğin başarılı olduğunu ve istenen bilgilerin yanıtta olduğunu belirten API, yanıt olarak http durum kodu 200 (Tamam) gönderir. Olası hata yanıtlarının bir listesi için bkz. yüz REST API.
Yanıtı işle
API yanıtı JSON biçiminde döndürülür. Aşağıdaki JSON verileri, örnek uygulama tarafından istenen verileri sağlayan tipik bir başarılı yanıt iletisini gösterir:
[
{
"faceId":"8a1a80fe-1027-48cf-a7f0-e61c0f005051",
"faceRectangle":{
"top":192,
"left":164,
"width":339,
"height":339
},
"faceAttributes":{
"emotion":{
"anger":0.0,
"contempt":0.0,
"disgust":0.0,
"fear":0.0,
"happiness":1.0,
"neutral":0.0,
"sadness":0.0,
"surprise":0.0
}
}
}
]
Başarılı bir yanıt iletisi, yüz dikdörtgen boyutuna göre azalan sırada dereceli bir yüz girişi dizisinden oluşur, boş bir yanıt algılanan yüz olmadığını gösterir. Tanınan her yüz, yöntemin bağımsız değişkeni tarafından belirtilen bir dizi isteğe bağlı yüz özniteliği içerir returnFaceAttributesDetectAsync .
Örnek uygulamada JSON yanıtının serisi bir nesne dizisine kaydedilir Face . Yüz Tanıma API'si sonuçları yorumlarken, puanlar toplamın bir değere normalleştirilmesine göre algılanan duygu tanıma en yüksek puanı olan duygu tanıma olarak yorumlanmalıdır. Bu nedenle örnek uygulama, görüntüde algılanan en büyük yüz için en yüksek puanı içeren tanınan duygu 'yi görüntüler. Bu, aşağıdaki kodla sağlanır:
emotionResultLabel.Text = faces.FirstOrDefault().FaceAttributes.Emotion.ToRankedList().FirstOrDefault().Key;
Aşağıdaki ekran görüntüsünde, örnek uygulamadaki duygu tanıma işleminin sonucu gösterilmektedir:

Örneği indirin