Beispiel #1
0
        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");
        }
Beispiel #2
0
 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;
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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));
        }