public async Task ExecuteAsync() { var keyName = "TestIMage.png"; var client = new AmazonRekognitionClient(RegionEndpoint.USEast1); var labelsRequest = new DetectLabelsRequest { Image = new Image { S3Object = new S3Object() { Name = keyName, Bucket = "rawimagestc1983" } }, MaxLabels = 10, MinConfidence = 75f }; var moderationRequest = new DetectModerationLabelsRequest { Image = new Image { S3Object = new S3Object() { Name = keyName, Bucket = "rawimagestc1983" } }, MinConfidence = 60f }; var labelsResponse = await client.DetectLabelsAsync(labelsRequest); var inappropriateResponse = await client.DetectModerationLabelsAsync(moderationRequest); Console.WriteLine("Detected Labels for Image"); Console.WriteLine(); foreach (Label label in labelsResponse.Labels) { Console.WriteLine("{0}: {1}", label.Name, label.Confidence); } Console.WriteLine(); foreach (ModerationLabel label in inappropriateResponse.ModerationLabels) { Console.WriteLine("Label: {0}\n Confidence: {1}\n Parent: {2}", label.Name, label.Confidence, label.ParentName); } }
public async Task <ModerationResponse> AnalyzeImage(MemoryStream imageStream) { using (var client = new AmazonRekognitionClient(Endpoint)) { var request = new DetectModerationLabelsRequest() { Image = new Image() { Bytes = imageStream }, MinConfidence = 0 //do this so that scores are always returned? }; var awsResponse = await client.DetectModerationLabelsAsync(request); var response = new ModerationResponse(); if (awsResponse.HttpStatusCode != System.Net.HttpStatusCode.OK) { response.Pass = false; response.ModerationScores = new[] { new ModerationScore() { Category = $"ServerError:{awsResponse.HttpStatusCode}", Score = 100 } }; } else { if (awsResponse.ModerationLabels.Any(s => s.Confidence >= 50)) { response.Pass = false; } else { response.Pass = true; } response.ModerationScores = awsResponse.ModerationLabels .Select(m => new ModerationScore() { Category = $"{m.ParentName}:{m.Name}", Score = m.Confidence }); } return(response); } }
// snippet-start:[Rekognition.dotnetv3.DetectModerationLabelsExample] public static async Task Main(string[] args) { string photo = "input.jpg"; string bucket = "bucket"; var rekognitionClient = new AmazonRekognitionClient(); var detectModerationLabelsRequest = new DetectModerationLabelsRequest() { Image = new Image() { S3Object = new S3Object() { Name = photo, Bucket = bucket, }, }, MinConfidence = 60F, }; try { var detectModerationLabelsResponse = await rekognitionClient.DetectModerationLabelsAsync(detectModerationLabelsRequest); Console.WriteLine("Detected labels for " + photo); foreach (ModerationLabel label in detectModerationLabelsResponse.ModerationLabels) { Console.WriteLine($"Label: {label.Name}"); Console.WriteLine($"Confidence: {label.Confidence}"); Console.WriteLine($"Parent: {label.ParentName}"); } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
private async Task <Boolean> ReadObjectDataAsync(String bucketName, String keyName, float confidence, String pendingimagesbucket, String quarantinedimagesbucket, String templatesBucket) { try { GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName }; using (GetObjectResponse response = await s3EmailsClient.GetObjectAsync(request)) { MimeMessage message = MimeMessage.Load(response.ResponseStream); MailAddressCollection mailAddresses = (MailAddressCollection)message.From; MailAddressCollection sendToAddresses = (MailAddressCollection)message.To; emailTo = mailAddresses[0].Address; if (sendToAddresses[0].ToString().ToLower().Contains("northnorthants")) { west = false; Console.WriteLine("Processing email for North Northants from : " + emailTo); } else { Console.WriteLine("Processing email for West Northants from : " + emailTo); } subject = message.Subject; name = message.From[0].Name; int numOfAttachments = 0; imageCheckPass = true; foreach (MimeEntity attachment in message.Attachments) { if (!(attachment is MessagePart)) { numOfAttachments++; MimePart part = (MimePart)attachment; String fileName = part.FileName; if (!fileName.ToLower().Contains("pdf")) { try { Stream objectStream = new MemoryStream(); part.Content.DecodeTo(objectStream); byte[] attachmentArray = new byte[objectStream.Length]; long attachmentLength = objectStream.Length; using (var imageStream = part.Content.Open()) { PutObjectRequest putRequest = new PutObjectRequest() { InputStream = imageStream, BucketName = pendingimagesbucket, Key = fileName, }; putRequest.Headers.ContentLength = attachmentLength; await s3Client.PutObjectAsync(putRequest); Console.WriteLine("Written to S3 : {0}", fileName); } } catch (Exception error) { Console.WriteLine("ERROR : Processing Image : '{0}' ", error.Message); Console.WriteLine(error.StackTrace); } AmazonRekognitionClient rekognitionClient = new AmazonRekognitionClient(); DetectModerationLabelsRequest detectModerationLabelsRequest = new DetectModerationLabelsRequest() { Image = new Image() { S3Object = new Amazon.Rekognition.Model.S3Object() { Name = fileName, Bucket = pendingimagesbucket }, }, MinConfidence = 60F }; try { DetectModerationLabelsResponse detectModerationLabelsResponse = await rekognitionClient.DetectModerationLabelsAsync(detectModerationLabelsRequest); Console.WriteLine("Detected labels"); foreach (ModerationLabel label in detectModerationLabelsResponse.ModerationLabels) { if (!String.IsNullOrEmpty(label.ParentName)) { Console.WriteLine("Found - Label: {0}\n Confidence: {1}\n Parent: {2}", label.Name, label.Confidence, label.ParentName); if (label.Confidence > confidence) { Console.WriteLine("Rejected - Label: {0}\n Confidence: {1}", label.Name, label.Confidence); imageCheckPass = false; } } } try { if (imageCheckPass) { DeleteObjectRequest deleteRequest = new DeleteObjectRequest { BucketName = pendingimagesbucket, Key = fileName }; await s3Client.DeleteObjectAsync(deleteRequest); } else { Console.WriteLine("Image Rejection Started"); try { Console.WriteLine("Clearing : Deleting " + fileName + " from : " + quarantinedimagesbucket); DeleteObjectRequest clearRequest = new DeleteObjectRequest { BucketName = quarantinedimagesbucket, Key = fileName }; await s3Client.DeleteObjectAsync(clearRequest); } catch (Exception) {} Console.WriteLine("Quarantining : Copying " + fileName + " to : " + quarantinedimagesbucket); CopyObjectRequest copyRequest = new CopyObjectRequest { SourceBucket = pendingimagesbucket, SourceKey = fileName, DestinationBucket = quarantinedimagesbucket, DestinationKey = fileName }; await s3Client.CopyObjectAsync(copyRequest); Console.WriteLine("Deleting : Deleting " + fileName + " from : " + pendingimagesbucket); DeleteObjectRequest deleteRequest = new DeleteObjectRequest { BucketName = pendingimagesbucket, Key = fileName }; await s3Client.DeleteObjectAsync(deleteRequest); Console.WriteLine("Deleting : Deleting " + fileName + " from : " + pendingimagesbucket); Console.WriteLine("Image Rejection Ended"); } } catch (Exception error) { Console.WriteLine("ERROR : Moving/Deleting Image : " + error.Message); Console.WriteLine(error.StackTrace); } } catch (Exception e) { Console.WriteLine(e.Message); } } } else { Console.WriteLine("Ignoring attachment"); } } Console.WriteLine("Num of attachments : {0}", numOfAttachments); emailBody = message.HtmlBody; for (int currentHeader = 0; currentHeader < message.Headers.Count; currentHeader++) { if (message.Headers[currentHeader].Field.ToString().Equals("X-SES-Spam-Verdict") && message.Headers[currentHeader].Value.ToString().Equals("PASS")) { spamCheckPass = true; } if (message.Headers[currentHeader].Field.ToString().Equals("X-SES-Virus-Verdict") && message.Headers[currentHeader].Value.ToString().Equals("PASS")) { virusCheckPass = true; } } if (spamCheckPass && virusCheckPass && imageCheckPass) { emailPassedChecks = true; } else { emailBody = "Failed text"; try { GetObjectRequest objectRequest = new GetObjectRequest { BucketName = templatesBucket, Key = "email-unsafe-rejection.txt" }; using (GetObjectResponse objectResponse = await s3TemplatesClient.GetObjectAsync(objectRequest)) using (Stream responseStream = objectResponse.ResponseStream) using (StreamReader reader = new StreamReader(responseStream)) { emailBody = reader.ReadToEnd(); } if (!virusCheckPass) { emailBody = emailBody.Replace("AAA", "a virus"); } else if (!spamCheckPass) { emailBody = emailBody.Replace("AAA", "spam"); } else if (!imageCheckPass) { emailBody = emailBody.Replace("AAA", "inappropriate content in attachments"); } else { emailBody = emailBody.Replace("AAA", "unknown"); } emailBody = emailBody.Replace("DDD", name); } catch (AmazonS3Exception e) { Console.WriteLine("ERROR : Reading Email : '{0}' when reading rejection template", e.Message); } catch (Exception e) { Console.WriteLine("ERROR : An Unknown encountered : '{0}' when reading rejection template", e.Message); } } } } catch (AmazonS3Exception error) { Console.WriteLine("ERROR : Reading Email : '{0}' when reading email", error.Message); Console.WriteLine(error.StackTrace); } catch (Exception error) { Console.WriteLine("ERROR : An Unknown encountered : {0}' when reading email", error.Message); Console.WriteLine(error.StackTrace); } return(emailPassedChecks); }