// // Copyright (c) PlaceholderCompany. All rights reserved. // namespace CompareImages { using Amazon.Rekognition; using Amazon.Rekognition.Model; public class ImageCompare { public ImageCompare() => this.RekognitionClient = new AmazonRekognitionClient(); public ImageCompare(IAmazonRekognition client) => this.RekognitionClient = client; private IAmazonRekognition RekognitionClient { get; set; } public async Task CompareFacesAsync(string batchId, string sourceBucketName, string sourceImage, string targetBucketName, string targetImage) { float similarityThreshold = 70F; Amazon.Rekognition.Model.Image imageSource = new Amazon.Rekognition.Model.Image(); try { imageSource.S3Object = new S3Object() { Name = sourceImage, Bucket = sourceBucketName, }; } catch (Exception) { Console.WriteLine("Failed to load source image: " + sourceImage); throw; } Amazon.Rekognition.Model.Image imageTarget = new Amazon.Rekognition.Model.Image(); try { imageTarget.S3Object = new S3Object() { Name = targetImage, Bucket = targetBucketName, }; } catch (Exception) { Console.WriteLine("Failed to load target image: " + targetImage); throw; } CompareFacesRequest compareFacesRequest = new CompareFacesRequest() { SourceImage = imageSource, TargetImage = imageTarget, SimilarityThreshold = similarityThreshold, }; Console.WriteLine("About to start comparison faces"); // Call operation CompareFacesResponse compareFacesResponse; FaceComparison faceComparison = new FaceComparison(batchId, sourceImage, targetImage); try { compareFacesResponse = await this.RekognitionClient.CompareFacesAsync(compareFacesRequest); } catch (Amazon.Rekognition.Model.InvalidParameterException e) { Console.WriteLine("Failed to compare faces as the image does not contain a face : " + e); return faceComparison; } // Display results foreach (CompareFacesMatch match in compareFacesResponse.FaceMatches) { ComparedFace face = match.Face; BoundingBox position = face.BoundingBox; Console.WriteLine("Face at " + position.Left + " " + position.Top + " matches with " + match.Similarity + "% confidence."); faceComparison.Results.Add(new FaceComparison.ComparisonResult(position.Left, position.Top, match.Similarity)); } return faceComparison; } } }