Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
Доступ к службе "Распознавание лиц" ограничен на основе соответствия требованиям и критериев использования для реализации поддержки наших принципов ответственного ИИ. Служба "Распознавание лиц" доступна только для клиентов и партнеров, управляемых корпорацией Майкрософт. Используйте форму приема Распознавания лиц, чтобы подать заявку на доступ. Для получения дополнительной информации см. страницу Face limited access.
Операция Find Similar выполняет сопоставление лиц между целевым лицом и набором лиц кандидатов, поиск меньшего набора лиц, которые выглядят аналогично целевому лицу. Это удобно для поиска лиц по изображениям.
В этом руководстве показано, как использовать функцию "Найти похожие" в разных языковых пакетах SDK. В следующем примере кода предполагается, что вы уже прошли проверку подлинности клиентского объекта Распознавания лиц. Дополнительные сведения о том, как это сделать, см. в кратком руководстве.
Распознайте лица для сравнения
Прежде чем сравнивать лица, их нужно сначала распознать на изображениях. В этом руководстве в качестве источника будет использоваться следующее удаленное изображение с названием findsimilar.jpg:
В этом руководстве используются удаленные изображения, доступ к которым осуществляется через URL-адрес. Сохраните ссылку на базовую строку URL-адреса. Все изображения, доступные в этом руководстве, находятся по этому URL-адресу.
string baseUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/";
Приведенный далее метод распознавания лиц оптимизирован для операций сравнения. Он не извлекает подробные атрибуты лица и использует оптимизированную модель распознавания.
private static async Task<List<FaceDetectionResult>> DetectFaceRecognize(FaceClient faceClient, string url)
{
// Detect faces from image URL.
var response = await faceClient.DetectAsync(new Uri(url), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, true, [FaceAttributeType.QualityForRecognition]);
IReadOnlyList<FaceDetectionResult> detectedFaces = response.Value;
List<FaceDetectionResult> sufficientQualityFaces = new List<FaceDetectionResult>();
foreach (FaceDetectionResult detectedFace in detectedFaces)
{
QualityForRecognition? faceQualityForRecognition = detectedFace.FaceAttributes.QualityForRecognition;
if (faceQualityForRecognition.HasValue && (faceQualityForRecognition.Value != QualityForRecognition.Low))
{
sufficientQualityFaces.Add(detectedFace);
}
}
Console.WriteLine($"{detectedFaces.Count} face(s) with {sufficientQualityFaces.Count} having sufficient quality for recognition detected from image `{Path.GetFileName(url)}`");
return sufficientQualityFaces;
}
В следующем коде для получения данных о лицах из ряда изображений используется приведенный выше метод.
Console.WriteLine("========FIND SIMILAR========");
Console.WriteLine();
List<string> targetImageFileNames = new List<string>
{
"Family1-Dad1.jpg",
"Family1-Daughter1.jpg",
"Family1-Mom1.jpg",
"Family1-Son1.jpg",
"Family2-Lady1.jpg",
"Family2-Man1.jpg",
"Family3-Lady1.jpg",
"Family3-Man1.jpg"
};
string sourceImageFileName = "findsimilar.jpg";
List<Guid> targetFaceIds = new List<Guid>();
foreach (string targetImageFileName in targetImageFileNames)
{
// Detect faces from target image url.
List<FaceDetectionResult> faces = await DetectFaceRecognize(client, $"{baseUrl}{targetImageFileName}");
// Add detected faceId to list of GUIDs.
targetFaceIds.Add(faces[0].FaceId.Value);
}
// Detect faces from source image url.
List<FaceDetectionResult> detectedFaces = await DetectFaceRecognize(client, $"{baseUrl}{sourceImageFileName}");
Console.WriteLine();
Поиск и печать совпадений
В этом руководстве лицо, обнаруженное на изображении Family1-Dad1.jpg, должно возвращаться в качестве лица, похожего на исходное изображение.
Следующий код вызывает API поиска похожих лиц в сохраненном списке лиц.
// Find a similar face(s) in the list of IDs. Comapring only the first in list for testing purposes.
var response = await client.FindSimilarAsync(detectedFaces[0].FaceId.Value, targetFaceIds);
List<FaceFindSimilarResult> similarResults = response.Value.ToList();
Следующий код выводит в консоль детали совпадений.
foreach (FaceFindSimilarResult similarResult in similarResults)
{
Console.WriteLine($"Faces from {sourceImageFileName} & ID:{similarResult.FaceId} are similar with confidence: {similarResult.Confidence}.");
}
Console.WriteLine();
Следующий шаг
Из этого руководства вы узнали, как вызвать API поиска похожих лиц для поиска лиц по подобию в более крупной группе лиц. Далее вы сможете узнать больше о различных моделях распознавания, доступных для операций сравнения лиц.