1+ // <snippet_using>
2+ using Azure ;
3+ using Azure . AI . Vision . Face ;
4+ // </snippet_using>
5+
6+ namespace FaceQuickstart
7+ {
8+ class Program
9+ {
10+ // <snippet_image_url>
11+ const string IMAGE_BASE_URL = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/" ;
12+ // </snippet_image_url>
13+
14+ // <snippet_creds>
15+ static readonly string SUBSCRIPTION_KEY = Environment . GetEnvironmentVariable ( "FACE_APIKEY" ) ?? "<apikey>" ;
16+ static readonly string ENDPOINT = Environment . GetEnvironmentVariable ( "FACE_ENDPOINT" ) ?? "<endpoint>" ;
17+ // </snippet_creds>
18+
19+ static void Main ( string [ ] args )
20+ {
21+
22+ // <snippet_detect_models>
23+ FaceRecognitionModel RECOGNITION_MODEL4 = FaceRecognitionModel . Recognition04 ;
24+ // </snippet_detect_models>
25+
26+ // <snippet_maincalls>
27+ FaceClient client = Authenticate ( ENDPOINT , SUBSCRIPTION_KEY ) ;
28+ FindSimilar ( client , IMAGE_BASE_URL , RECOGNITION_MODEL4 ) . Wait ( ) ;
29+ // </snippet_maincalls>
30+ }
31+
32+ // <snippet_auth>
33+ public static FaceClient Authenticate ( string endpoint , string key )
34+ {
35+ return new FaceClient ( new Uri ( endpoint ) , new AzureKeyCredential ( key ) ) ;
36+ }
37+ // </snippet_auth>
38+
39+ // <snippet_face_detect_recognize>
40+ private static async Task < List < FaceDetectionResult > > DetectFaceRecognize ( FaceClient faceClient , string url , FaceRecognitionModel recognition_model )
41+ {
42+ // Detect faces from image URL.
43+ Response < IReadOnlyList < FaceDetectionResult > > response = await faceClient . DetectAsync ( new Uri ( url ) , FaceDetectionModel . Detection03 , recognition_model , returnFaceId : true , [ FaceAttributeType . QualityForRecognition ] ) ;
44+ IReadOnlyList < FaceDetectionResult > detectedFaces = response . Value ;
45+ List < FaceDetectionResult > sufficientQualityFaces = new List < FaceDetectionResult > ( ) ;
46+ foreach ( FaceDetectionResult detectedFace in detectedFaces )
47+ {
48+ var faceQualityForRecognition = detectedFace . FaceAttributes . QualityForRecognition ;
49+ if ( faceQualityForRecognition . HasValue && ( faceQualityForRecognition . Value != QualityForRecognition . Low ) )
50+ {
51+ sufficientQualityFaces . Add ( detectedFace ) ;
52+ }
53+ }
54+ Console . WriteLine ( $ "{ detectedFaces . Count } face(s) with { sufficientQualityFaces . Count } having sufficient quality for recognition detected from image `{ Path . GetFileName ( url ) } `") ;
55+
56+ return sufficientQualityFaces ;
57+ }
58+ // </snippet_face_detect_recognize>
59+
60+ public static async Task FindSimilar ( FaceClient client , string base_url , FaceRecognitionModel recognition_model )
61+ {
62+ // <snippet_loadfaces>
63+ Console . WriteLine ( "========FIND SIMILAR========" ) ;
64+ Console . WriteLine ( ) ;
65+
66+ List < string > targetImageFileNames = new List < string >
67+ {
68+ "Family1-Dad1.jpg" ,
69+ "Family1-Daughter1.jpg" ,
70+ "Family1-Mom1.jpg" ,
71+ "Family1-Son1.jpg" ,
72+ "Family2-Lady1.jpg" ,
73+ "Family2-Man1.jpg" ,
74+ "Family3-Lady1.jpg" ,
75+ "Family3-Man1.jpg"
76+ } ;
77+
78+ string sourceImageFileName = "findsimilar.jpg" ;
79+ IList < Guid > targetFaceIds = new List < Guid > ( ) ;
80+ foreach ( var targetImageFileName in targetImageFileNames )
81+ {
82+ // Detect faces from target image url.
83+ var faces = await DetectFaceRecognize ( client , $ "{ base_url } { targetImageFileName } ", recognition_model ) ;
84+ // Add detected faceId to list of GUIDs.
85+ targetFaceIds . Add ( faces [ 0 ] . FaceId . Value ) ;
86+ }
87+
88+ // Detect faces from source image url.
89+ IList < FaceDetectionResult > detectedFaces = await DetectFaceRecognize ( client , $ "{ base_url } { sourceImageFileName } ", recognition_model ) ;
90+ Console . WriteLine ( ) ;
91+ // </snippet_loadfaces>
92+
93+ // <snippet_find_similar>
94+ // Find a similar face(s) in the list of IDs. Comapring only the first in list for testing purposes.
95+ Response < IReadOnlyList < FaceFindSimilarResult > > response = await client . FindSimilarAsync ( detectedFaces [ 0 ] . FaceId . Value , targetFaceIds ) ;
96+ IList < FaceFindSimilarResult > similarResults = response . Value . ToList ( ) ;
97+ // </snippet_find_similar>
98+ // <snippet_find_similar_print>
99+ foreach ( var similarResult in similarResults )
100+ {
101+ Console . WriteLine ( $ "Faces from { sourceImageFileName } & ID:{ similarResult . FaceId } are similar with confidence: { similarResult . Confidence } .") ;
102+ }
103+ Console . WriteLine ( ) ;
104+ // </snippet_find_similar_print>
105+ }
106+ }
107+ }
0 commit comments