Specificare un modello di rilevamento volto
Questa guida spiega come specificare un modello di rilevamento volto per il servizio Viso di Azure per intelligenza artificiale.
Il servizio Viso usa modelli di Machine Learning per eseguire operazioni sui visi umani presenti nelle immagini. La precisione dei modelli viene costantemente migliorata in base al feedback dei clienti e ai progressi nella ricerca. I miglioramenti che ne derivano vengono distribuiti come aggiornamenti del modello. Gli sviluppatori possono specificare la versione del modello di rilevamento volto da usare e scegliere il modello più adatto al proprio caso d'uso.
Continuare a leggere per informazioni su come specificare il modello di rilevamento volto in determinate operazioni sul viso. Il servizio Viso usa la funzionalità di rilevamento volto ogni volta che converte un'immagine di un viso in qualche altra forma di dati.
Se non si è certi se è necessario usare il modello più recente, passare alla sezione Valutare i vari modelli per valutare il nuovo modello e confrontare i risultati usando il set di dati corrente.
Prerequisiti
Si dovrebbe avere una certa familiarità con il concetto di rilevamento volto dell'intelligenza artificiale. In caso contrario, vedere la guida concettuale e la guida pratica relative al rilevamento volto:
Valutare i vari modelli
I vari modelli di rilevamento volto sono ottimizzati per diverse attività. Per una panoramica delle differenze, vedere la tabella seguente.
Modello | Descrizione | Note relative alle prestazioni | Landmarks (Luoghi di interesse) |
---|---|---|---|
detection_01 | Scelta predefinita per tutte le operazioni di rilevamento volto. | Non ottimizzato per visi sfocati, di piccole dimensioni e di profilo. | Restituisce i punti di riferimento del viso se sono specificati nella chiamata di rilevamento. |
detection_02 | Rilasciato a maggio 2019 e disponibile facoltativamente in tutte le operazioni di rilevamento volto. | Precisione migliorata su immagini di visi sfocati, di piccole dimensioni e di profilo. | Non restituisce punti di riferimento del viso. |
detection_03 | Rilasciato a febbraio 2021 e disponibile facoltativamente in tutte le operazioni di rilevamento volto. | Precisione migliorata, compreso su visi di piccole dimensioni (64x64 pixel) e orientamenti ruotati del viso. | Restituisce i punti di riferimento del viso se sono specificati nella chiamata di rilevamento. |
Gli attributi sono un set di funzionalità che possono facoltativamente essere rilevate se specificate nella chiamata di rilevamento:
Modello | accessori | sfocatura | esposizione | occhiali | headPose | mask | rumore | occlusione | qualityForRecognition |
---|---|---|---|---|---|---|---|---|---|
detection_01 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ (per recognition_03 o 04) | |
detection_02 | |||||||||
detection_03 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ (per recognition_03 o 04) |
Il modo migliore per confrontare le prestazioni dei modelli di rilevamento consiste nell'usarli in un set di dati di esempio. È consigliabile chiamare l'API Rilevamento in un'ampia gamma di immagini, in particolare immagini di molti visi o di visi difficili da visualizzare, usando ciascun modello di rilevamento. Prestare attenzione al numero di visi restituiti da ogni modello.
Rilevare i visi con il modello specificato
Il rilevamento volto trova le posizioni del rettangolo delimitatore dei visi umani e identifica i punti di riferimento visivi. Estrae le caratteristiche del viso e le archivia per usarle in un secondo momento nelle operazioni di riconoscimento.
Quando si usa l'API Rilevamento, è possibile assegnare la versione del modello mediante il parametro detectionModel
. I valori disponibili sono:
detection_01
detection_02
detection_03
Un URL di richiesta per l'API REST Rilevamento è simile al seguente:
https://westus.api.cognitive.microsoft.com/face/v1.0/detect?detectionModel={detectionModel}&recognitionModel={recognitionModel}&returnFaceId={returnFaceId}&returnFaceAttributes={returnFaceAttributes}&returnFaceLandmarks={returnFaceLandmarks}&returnRecognitionModel={returnRecognitionModel}&faceIdTimeToLive={faceIdTimeToLive}
Se si usa la libreria client, è possibile assegnare il valore di detectionModel
passando una stringa appropriata. Se non viene assegnato alcun valore, l'API usa la versione predefinita del modello (detection_01
). Vedere l'esempio di codice seguente per la libreria client .NET.
string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
var response = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false, returnFaceLandmarks: false);
var faces = response.Value;
Aggiungere il viso all'oggetto Person con il modello specificato
Il servizio Viso può estrarre i dati del viso da un'immagine e associarli a un oggetto Person tramite l'API Aggiungi viso persona a gruppo persone. In questa chiamata API è possibile specificare il modello di rilevamento con la stessa procedura valida per Rilevamento.
Vedere l'esempio di codice .NET seguente.
// Create a PersonGroup and add a person with face detected by "detection_03" model
string personGroupId = "mypersongroupid";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My Person Group Name", ["recognitionModel"] = "recognition_04" }))))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}", content);
}
string? personId = null;
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My Person Name" }))))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
using (var response = await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}/persons", content))
{
string contentString = await response.Content.ReadAsStringAsync();
personId = (string?)(JsonConvert.DeserializeObject<Dictionary<string, object>>(contentString)?["personId"]);
}
}
string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["url"] = imageUrl }))))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}/persons/{personId}/persistedfaces?detectionModel=detection_03", content);
}
Questo codice crea un oggetto PersonGroup con ID mypersongroupid
e vi aggiunge un oggetto Person. Aggiunge quindi un viso all'oggetto Person usando il modello detection_03
. Se non si specifica il parametro detectionModel, l'API usa il modello predefinito, ovvero detection_01
.
Nota
Non è necessario usare lo stesso modello di rilevamento per tutti i visi in un oggetto Person, né è necessario usare lo stesso modello di rilevamento quando si rilevano nuovi visi da confrontare con un oggetto Person, ad esempio nell'API Identificazione da gruppo persone.
Aggiungere un viso all'oggetto FaceList con il modello specificato
È anche possibile specificare un modello di rilevamento quando si aggiunge un viso a un oggetto FaceList esistente. Vedere l'esempio di codice .NET seguente.
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My face collection", ["recognitionModel"] = "recognition_04" }))))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/facelists/{faceListId}", content);
}
string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["url"] = imageUrl }))))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/facelists/{faceListId}/persistedfaces?detectionModel=detection_03", content);
}
Questo codice crea un oggetto FaceList denominato My face collection
e lo aggiunge mediante il modello detection_03
. Se non si specifica il parametro detectionModel, l'API usa il modello predefinito, ovvero detection_01
.
Nota
Non è necessario usare lo stesso modello di rilevamento per tutti i visi in un oggetto FaceList, né è necessario usare lo stesso modello di rilevamento quando si rilevano nuovi visi da confrontare con un oggetto FaceList.
Passaggi successivi
In questo articolo si è appreso come specificare il modello di rilevamento da usare con API Viso diverse. Seguire quindi le indicazioni fornite in un avvio rapido per iniziare a usare il rilevamento e l'analisi dei volti.