in functions/image-analysis/csharp/Function.cs [79:118]
private async Task ProcessAnnotations(string filename, AnnotateImageResponse response)
{
var labels = response.LabelAnnotations
.OrderBy(annotation => annotation.Score)
.Select(annotation => annotation.Description);
_logger.LogInformation($"Labels: {string.Join(",", labels)}");
var color = response.ImagePropertiesAnnotation.DominantColors.Colors
.OrderByDescending(c => c.Score)
.Select(c => c.Color)
.First();
var colorHex = $"#{((int)color.Red):X2}{((int)color.Green):X2}{((int)color.Blue):X2}";
_logger.LogInformation($"Colors: {colorHex}");
var safeSearch = response.SafeSearchAnnotation;
var isSafe = safeSearch.Adult < Likelihood.Possible
&& safeSearch.Medical < Likelihood.Possible
&& safeSearch.Racy < Likelihood.Possible
&& safeSearch.Spoof < Likelihood.Possible
&& safeSearch.Violence < Likelihood.Possible;
_logger.LogInformation($"Safe? {isSafe}");
if (isSafe)
{
var pictureStore = _firestoreDb.Collection("pictures");
var doc = pictureStore.Document(filename);
var metadata = new Dictionary<string, object>()
{
{"labels", labels.ToList()},
{"color", colorHex},
{"created", Timestamp.GetCurrentTimestamp()}
};
await doc.SetAsync(metadata, SetOptions.MergeAll);
_logger.LogInformation("Stored metadata in Firestore");
}
}