in Application/StepFunctions/store-image-metadata/Function.cs [40:83]
public async Task FunctionHandler(InputEvent input, ILambdaContext context)
{
var logger = new ImageRecognitionLogger(input, context);
var thumbnail = JsonSerializer.Deserialize<Thumbnail>(JsonSerializer.Serialize(input.ParallelResults[1]));
var labels = JsonSerializer.Deserialize<List<Label>>(JsonSerializer.Serialize(input.ParallelResults[0]));
var photoUpdate = new Photo
{
PhotoId = WebUtility.UrlDecode(input.PhotoId),
ProcessingStatus = ProcessingStatus.Succeeded,
FullSize = new PhotoImage
{
Key = WebUtility.UrlDecode(input.SourceKey),
Width = input.ExtractedMetadata?.Dimensions?.Width,
Height = input.ExtractedMetadata?.Dimensions?.Height
},
Format = input.ExtractedMetadata?.Format,
ExifMake = input.ExtractedMetadata?.ExifMake,
ExifModel = input.ExtractedMetadata?.ExifModel,
Thumbnail = new PhotoImage
{
Key = WebUtility.UrlDecode(thumbnail?.s3key),
Width = thumbnail?.width,
Height = thumbnail?.height
},
ObjectDetected = labels.Select(l => l.Name).ToArray(),
GeoLocation = input.ExtractedMetadata?.Geo,
UpdatedDate = DateTime.UtcNow
};
// update photo table.
await _ddbContext.SaveAsync(photoUpdate).ConfigureAwait(false);
var data = JsonSerializer.Serialize(photoUpdate);
await logger.WriteMessageAsync(
new MessageEvent
{Message = "Photo recognition metadata stored succesfully", Data = data, CompleteEvent = true},
ImageRecognitionLogger.Target.All);
Console.WriteLine(data);
}