public async Task SaveImage(RekognizedImage image) { using (var client = new AmazonDynamoDBClient(GetCredentials(), Region)) { var table = Table.LoadTable(client, "Image"); var document = new Document { ["Hash"] = image.Hash, ["Width"] = image.Width, ["Height"] = image.Height }; if (image.Faces.Count > 0) { var face = image.Faces.First(); document["FaceHeight"] = face.FaceInfo.BoundingBox.Height; document["FaceWidth"] = face.FaceInfo.BoundingBox.Width; document["FaceLeft"] = face.FaceInfo.BoundingBox.Left; document["FaceTop"] = face.FaceInfo.BoundingBox.Top; } await table.PutItemAsync(document); } }
public async Task <RekognizedImage> RekognizeImage(byte[] imageData) { var dataService = new DataService(); var hash = imageData.GetSha1Hash(); var existingImage = await dataService.GetImage(hash); if (existingImage != null) { return(existingImage); } var convertedImage = _converterService.GetRekognitionCompatibleImage(imageData); if (!convertedImage.IsSizeOk()) { throw new SourceImageContentTooLargeException(); } if (!convertedImage.AreDimensionsOk()) { throw new SourceImageDimensionsTooSmallException(); } var client = new AmazonRekognitionClient(GetCredentials(), Region); var stream = new MemoryStream(convertedImage.ImageData); await stream.WriteAsync(convertedImage.ImageData, 0, convertedImage.ImageData.Length); stream.Seek(0, SeekOrigin.Begin); var image = new Image { Bytes = stream }; var request = new RecognizeCelebritiesRequest { Image = image }; var response = await client.RecognizeCelebritiesAsync(request); var recoknizedImage = new RekognizedImage { Width = convertedImage.Width, Height = convertedImage.Height, Hash = hash, Faces = MapResponse(convertedImage, response) }; await dataService.SaveImage(recoknizedImage); return(recoknizedImage); }