private static void SavePhotoMetaToDatabase(string key, SingleFaceFaceAPIInfoDTO faceInfo, string tableName, TraceWriter log) { string myAccountName = "roboshellstore"; //TODO string myAccountKey = "lGlfZMuRzmAnsecHA/st9Xrp/DGj+vtW9cvmeidAxfRz3kcSPuQAe9S63GPK/TmYhQBZnr3AotWEW1EIUbFXOg=="; //TODO StorageCredentials storageCredentials = new StorageCredentials(myAccountName, myAccountKey); CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(storageCredentials, useHttps: true); CloudTableClient tableClient = cloudStorageAccount.CreateCloudTableClient(); CloudTable table = tableClient.GetTableReference(tableName); if (faceInfo.Emotion == null) { faceInfo.Emotion = ""; } PhotoInfoTableEntity photoInfoEntity = new PhotoInfoTableEntity(key, faceInfo); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation = TableOperation.Insert(photoInfoEntity); // Execute the insert operation. table.Execute(insertOperation); log.Info("SAVING PHOTO INFO TO DB"); }
public PhotoInfoTableEntity(string key, SingleFaceFaceAPIInfoDTO photoInfo) { this.PartitionKey = PhotosAnalyzer.PARTITION_KEY;//TODO this.RowKey = key; this.Age = photoInfo.Age; this.Gender = photoInfo.Gender; this.Emotion = photoInfo.Emotion; }
private static async Task SaveToDatabase(byte[] photoAsByteArray, PhotoInfoDTO photoInfoDTO, TraceWriter log) { string new_elem_guid = Guid.NewGuid().ToString(); SingleFaceFaceAPIInfoDTO singleFaceFaceApiInfo = new SingleFaceFaceAPIInfoDTO { FaceRectangle = new Rectangle(0, 0, 0, 0), Age = double.Parse(photoInfoDTO.Age), Emotion = photoInfoDTO.Emotion, Gender = photoInfoDTO.Gender }; SavePhotoMetaToDatabase(new_elem_guid, singleFaceFaceApiInfo, "photosInfo", log); SavePhotoToDatabase(new_elem_guid, photoAsByteArray, "photos", log); }
public static async Task <Tuple <FaceAPIInfoDTO, List <SingleFaceFaceAPIInfoDTO> > > AnalyzeFacesAsync(HttpClient client, byte[] photoAsByteArray) { bool foundAndProcessedFaces = false; string faceCountAsString = "", gender = "", age = ""; string requestParameters = string.Join("&", "returnFaceId=true", "returnFaceLandmarks=false", "returnFaceAttributes=age,gender"); string uri = Config.FaceAPIEndpoint + "?" + requestParameters; string faceAPIResponse = await PhotoAPICall(client, uri, Config.FaceAPIKey, photoAsByteArray); JArray faces = JArray.Parse(faceAPIResponse); int males = 0, females = 0, faceCount = 0; double sumage = 0; List <SingleFaceFaceAPIInfoDTO> faceApiInfos = new List <SingleFaceFaceAPIInfoDTO>(); // TODO: foreach (JToken face in faces) JToken face = faces.First; { faceCount++; if (face.SelectToken("faceAttributes").SelectToken("gender").ToString().Equals("male")) { males++; } else { females++; } sumage += face.SelectToken("faceAttributes").SelectToken("age").Value <double>(); Rectangle faceRectangle = new Rectangle { Width = face.SelectToken("faceRectangle").SelectToken("width").Value <int>(), Height = face.SelectToken("faceRectangle").SelectToken("height").Value <int>(), X = face.SelectToken("faceRectangle").SelectToken("left").Value <int>(), Y = face.SelectToken("faceRectangle").SelectToken("top").Value <int>() }; SingleFaceFaceAPIInfoDTO singleFaceInfoDto = new SingleFaceFaceAPIInfoDTO(); singleFaceInfoDto.FaceRectangle = faceRectangle; singleFaceInfoDto.Age = face.SelectToken("faceAttributes").SelectToken("age") .Value <double>(); singleFaceInfoDto.Gender = face.SelectToken("faceAttributes").SelectToken("gender") .ToString(); singleFaceInfoDto.Emotion = "";//TODO faceApiInfos.Add(singleFaceInfoDto); } if (males == 0 && females > 0) { gender = "F"; } if (males > 0 && females == 0) { gender = "M"; } if (males > 0 && females > 0) { gender = males > females ? "MF" : "FM"; } age = ((int)(sumage / faceCount)).ToString(); if (faceCount > 0) { foundAndProcessedFaces = true; } faceCountAsString = faceCount.ToString(); return(new Tuple <FaceAPIInfoDTO, List <SingleFaceFaceAPIInfoDTO> >( new FaceAPIInfoDTO { Age = age, FaceCountAsString = faceCountAsString, Gender = gender, FoundAndProcessedFaces = foundAndProcessedFaces }, faceApiInfos)); }