public async Task <ModerationResponse> AnalyzeImage(byte[] imageBytes) { var channel = new Grpc.Core.Channel(ImageAnnotatorClient.DefaultEndpoint.Host, Credentials.ToChannelCredentials()); try { var client = ImageAnnotatorClient.Create(channel); var image = Image.FromBytes(imageBytes); var response = await client.DetectSafeSearchAsync(image); var moderationResponse = new ModerationResponse(); moderationResponse.ModerationScores = new[] { new ModerationScore() { Category = $"Adult", Score = ConvertLikelyhood(response.Adult) }, new ModerationScore() { Category = $"Medical", Score = ConvertLikelyhood(response.Medical) }, new ModerationScore() { Category = $"Spoof", Score = ConvertLikelyhood(response.Spoof) }, new ModerationScore() { Category = $"Violent", Score = ConvertLikelyhood(response.Violence) } }; moderationResponse.Pass = !moderationResponse.ModerationScores.Any(s => s.Score > .40F); return(moderationResponse); } catch (Exception ex) { return(new ModerationResponse() { Pass = false, ModerationScores = new[] { new ModerationScore() { Category = $"ServerError:{ex.Message}", Score = 100 } } }); } finally { await channel.ShutdownAsync(); } }
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); } }
public async Task <ModerationResponse> AnalyzeImage(byte[] imageBytes, string imageName) { var client = new RestClient(String.Format(API_URL_FORMAT, AzureRegion)); client.AddDefaultHeader(API_KEY_HEADER, ApiKey); var request = new RestRequest(API_ENDPOINT, Method.POST); request.AddParameter(DetermineMimeType(imageName), imageBytes, ParameterType.RequestBody); var apiResponse = await client.ExecuteTaskAsync <AzureModerationResponse>(request); var response = new ModerationResponse(); if (apiResponse.ResponseStatus != ResponseStatus.Completed || !apiResponse.IsSuccessful) { response.Pass = false; response.ModerationScores = new[] { new ModerationScore() { Category = $"ServerError:{apiResponse.StatusDescription}", Score = 100 } }; } else { response.Pass = !(apiResponse.Data.IsImageAdultClassified || apiResponse.Data.IsImageRacyClassified); var list = new List <ModerationScore>(); list.Add(new ModerationScore { Category = "Adult", Score = apiResponse.Data.AdultClassificationScore }); list.Add(new ModerationScore { Category = "Racy", Score = apiResponse.Data.RacyClassificationScore }); response.ModerationScores = list; } return(response); }