Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,14 @@ public class FileManagementController : Controller
private readonly IFileMetadataService _metadataService;
private readonly IImageMetadataService _imageService;
private readonly IImageLookupService _imageLookupService;
private readonly IModerationService _moderationService;
private readonly ILogger _logger;
public FileManagementController (IStorageService storage, IOptions<AwsSettings> options, IFileMetadataService metadataService, IImageMetadataService imageService, ILogger<FileManagementController> logger, IImageLookupService imageLookupService, IModerationService moderationService)
public FileManagementController (IStorageService storage, IOptions<AwsSettings> options, IFileMetadataService metadataService, IImageMetadataService imageService, ILogger<FileManagementController> logger, IImageLookupService imageLookupService)
{
_storage = storage;
_configuration = options.Value;
_metadataService = metadataService;
_imageService = imageService;
_imageLookupService = imageLookupService;
_moderationService = moderationService;
_logger = logger;
}
// We need to store the files in S3 and then push the metadata into a Dynamo DB Table.
Expand Down Expand Up @@ -63,6 +61,8 @@ public async Task<IActionResult> Upload(IFormFile file)
string s3KeyName = _storage.SaveFile(file);
_logger.Log(LogLevel.Information, "Saved file {0} to S3 bucket as {1}", file.FileName, s3KeyName );

IModerationService _moderationService = new RekognitionModerationService (_configuration, _logger);

var moderationResults = await _moderationService.IsContentAllowed(s3KeyName);
if (moderationResults.ImageAllowed)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ namespace MediaLibrary.Controllers
{
public class RekognitionController : Controller
{

private readonly AwsSettings _configuration;
private readonly IFileMetadataService _metadataService;
private readonly IImageMetadataService _imageMetadataService;
private readonly IImageLookupService _imageLookupService;
private readonly ILogger _logger;

public RekognitionController (IOptions<AwsSettings> options, IFileMetadataService metadataService, IImageMetadataService imageMetadataService, ILogger<RekognitionController> logger, IImageLookupService imageLookupService)
public RekognitionController(IOptions<AwsSettings> options, IFileMetadataService metadataService, IImageMetadataService imageMetadataService, ILogger<RekognitionController> logger, IImageLookupService imageLookupService)
{
_configuration = options.Value;
_metadataService = metadataService;
Expand Down Expand Up @@ -58,7 +58,7 @@ public async Task<IActionResult> ViewItem(string item)
}
}

public async Task<IActionResult> Process (string item)
public async Task<IActionResult> Process(string item)
{
_logger.Log(LogLevel.Information, "RekognitionController::Process", null);
AWSXRayRecorder.Instance.BeginSubsegment("RekognitionController::Process - Getting File Metadata");
Expand Down Expand Up @@ -93,7 +93,7 @@ public async Task<IActionResult> Process (string item)
};

var labels = await client.DetectLabelsAsync(detectLabelsRequest);

// Store the new data in a new dynamo DB Table
foreach (var label in labels.Labels)
{
Expand All @@ -111,7 +111,7 @@ public async Task<IActionResult> Process (string item)
AWSXRayRecorder.Instance.EndSubsegment();
}
// Sore individual indexes
return View (viewModel);
return View(viewModel);
}
[HttpPost]
public async Task<IActionResult> Process(ImageProcessingModel model, IFormCollection collection)
Expand Down Expand Up @@ -162,7 +162,7 @@ public async Task<IActionResult> Process(ImageProcessingModel model, IFormCollec
return RedirectToAction("Index", "FileManagement");
}

public async Task<IActionResult> Search (string filter)
public async Task<IActionResult> Search(string filter)
{
var fullLabelData = await _imageLookupService.GetLabelData();
ImageLookupDataModel imageLookupList;
Expand All @@ -189,7 +189,7 @@ where x.Label.ToLower() == filter.ToLower()
{
viewModel.CurrentValue = "---Choose Label---";
}

viewModel.Labels = new List<string>();

foreach (var item in fullLabelData)
Expand All @@ -200,9 +200,9 @@ where x.Label.ToLower() == filter.ToLower()
}
}



return View(viewModel);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,19 @@

<ItemGroup>
<PackageReference Include="AWS.Logger.AspNetCore" Version="3.3.0" />
<PackageReference Include="AWSSDK.Core" Version="3.7.12.6" />
<PackageReference Include="AWSSDK.DynamoDBv2" Version="3.7.3.54" />
<PackageReference Include="AWSSDK.Extensions.NETCore.Setup" Version="3.7.2" />
<PackageReference Include="AWSSDK.Rekognition" Version="3.7.8.29" />
<PackageReference Include="AWSSDK.S3" Version="3.7.9.22" />
<PackageReference Include="AWSSDK.SimpleSystemsManagement" Version="3.7.17.24" />
<PackageReference Include="AWSXRayRecorder" Version="2.10.1" />
<PackageReference Include="AWSXRayRecorder.Core" Version="2.10.1" />
<PackageReference Include="AWSXRayRecorder.Handlers.AspNetCore" Version="2.7.3" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="6.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.16.1" />
<PackageReference Include="AWSSDK.Core" Version="3.7.106.21" />
<PackageReference Include="AWSSDK.DynamoDBv2" Version="3.7.102.28" />
<PackageReference Include="AWSSDK.Extensions.NETCore.Setup" Version="3.7.5" />
<PackageReference Include="AWSSDK.Rekognition" Version="3.7.103.5" />
<PackageReference Include="AWSSDK.S3" Version="3.7.103.51" />
<PackageReference Include="AWSSDK.SimpleSystemsManagement" Version="3.7.104.17" />
<PackageReference Include="AWSSDK.SSO" Version="3.7.100.114" />
<PackageReference Include="AWSSDK.SSOOIDC" Version="3.7.100.114" />
<PackageReference Include="AWSXRayRecorder" Version="2.14.0" />
<PackageReference Include="AWSXRayRecorder.Core" Version="2.14.0" />
<PackageReference Include="AWSXRayRecorder.Handlers.AspNetCore" Version="2.11.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.18.1" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.7" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
builder.Services.AddScoped<IFileMetadataService, DynamoFileMetadataService>();
builder.Services.AddScoped<IImageMetadataService, DynamoImageMetadataService>();
builder.Services.AddScoped<IImageLookupService, DynamoImageLookupService>();
builder.Services.AddScoped<IModerationService, RekognitionModerationService>();



builder.Services.Configure<AwsSettings>(builder.Configuration.GetSection("AWSConfig"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,23 @@ namespace MediaLibrary.Services
public class RekognitionModerationService : IModerationService
{
private readonly AwsSettings _configuration;
private readonly ILogger<RekognitionModerationService> _logger;
private readonly ILogger _logger;

public RekognitionModerationService (IOptions<AwsSettings> options, ILogger<RekognitionModerationService> logger)


public RekognitionModerationService(AwsSettings options, ILogger logger)
{
_configuration = options.Value;
_configuration = options;
_logger = logger;
}

public async Task<ModerationResultsViewModel> IsContentAllowed(string objectLocation)
{
Amazon.Rekognition.AmazonRekognitionClient client = new Amazon.Rekognition.AmazonRekognitionClient();

var results = await client.DetectModerationLabelsAsync(new Amazon.Rekognition.Model.DetectModerationLabelsRequest()
{
MinConfidence = 75F,
MinConfidence = 50F,
Image = new Amazon.Rekognition.Model.Image()
{
S3Object = new Amazon.Rekognition.Model.S3Object()
Expand Down