private static async void CreatePersonAsync(string personName, PersonGroupInfo group)
        {
            newPersonName = string.Empty;

            for (int i = 0; i < group.People?.Length; i++)
            {
                if (group.People[i].name == personName)
                {
                    Debug.LogFormat("{0} already exists", personName);
                    return;
                }
            }

            await Person.CreatePersonAsync(personName, group.personGroupId);

            GetPeopleInGroupAsync();
            Directory.CreateDirectory(Directory.GetParent(Application.dataPath) + "/FaceAPI/" + personName);
        }
        private void PersonGUI(PersonGroupInfo group)
        {
            if (group.People == null || group.People.Length == 0)
            {
                EditorGUILayout.BeginHorizontal();
                GUILayout.Space(32f);
                EditorGUILayout.LabelField("No People in group");
                EditorGUILayout.EndHorizontal();
            }

            if (group.People != null)
            {
                for (int i = 0; i < group.People.Length; i++)
                {
                    var    person        = group.People[i];
                    string faceDirectory = Directory.GetParent(Application.dataPath) + "/FaceAPI/" + person.name;
                    EditorGUILayout.BeginHorizontal();
                    GUILayout.Space(32f);
                    EditorGUILayout.LabelField(group.People[i].name, GUILayout.Width(128));
                    GUILayout.FlexibleSpace();

                    if (GUILayout.Button("Photos Folder"))
                    {
                        Process.Start(faceDirectory);
                    }

                    GUI.enabled = !uploadingImages && !isTraining;
                    if (GUILayout.Button("Upload"))
                    {
                        UploadPhotosAsync(person, group, faceDirectory);
                    }

                    if (GUILayout.Button(new GUIContent("X", "Delete Person"), GUILayout.Width(18)))
                    {
                        DeletePersonAsync(group.personGroupId, person.personId);
                    }
                    GUI.enabled = true;

                    EditorGUILayout.EndHorizontal();
                }
            }
        }
        public async static Task <PersonGroupResult> CreatePersonGroupAsync(string displayName)
        {
            HttpClient client = new HttpClient();

            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", Common.CoreConstants.FaceApiSubscriptionKey);

            string groupId = displayName.Replace(" ", "").ToLower();

            PersonGroupInfo groupInfo = new PersonGroupInfo()
            {
                name     = displayName,
                userData = "",
            };

            var payload = new HttpStringContent(JsonConvert.SerializeObject(groupInfo));

            payload.Headers.ContentType = new HttpMediaTypeHeaderValue("application/json");

            var response = await client.PutAsync(new Uri($"{CogsExplorer.Common.CoreConstants.CognitiveServicesBaseUrl}/face/v1.0/persongroups/{groupId}"), payload);

            PersonGroupResult personGroupResult = null;

            try
            {
                var results = await response.Content.ReadAsStringAsync();

                personGroupResult = new PersonGroupResult()
                {
                    personGroupId = groupId,
                    name          = displayName,
                    userData      = "",
                };
            }
            catch (Exception ex)
            {
            }

            return(personGroupResult);
        }
        private static async void TrainPersonGroupAsync(PersonGroupInfo group)
        {
            await PersonGroup.TrainGroupAsync(group.personGroupId);

            isTraining = true;

            while (isTraining)
            {
                var status = await PersonGroup.GetTrainingStatusAsync(group.personGroupId);

                group.TrainingStatus = status.Value;

                for (int i = 0; i < Window.currentGroups.Length; i++)
                {
                    if (Window.currentGroups[i].personGroupId == group.personGroupId)
                    {
                        Window.currentGroups[i].TrainingStatus = group.TrainingStatus;
                        break;
                    }
                }

                switch (group.TrainingStatus.StatusType)
                {
                case StatusType.succeeded:
                    isTraining = false;
                    break;

                case StatusType.failed:
                    isTraining = false;
                    break;

                case StatusType.running:
                    await Task.Delay(1000);

                    break;
                }
            }
        }
        private static async void UploadPhotosAsync(PersonInfo person, PersonGroupInfo group, string faceDirectory)
        {
            uploadingImages = true;

            for (int i = 0; i < Window.currentGroups.Length; i++)
            {
                if (Window.currentGroups[i].personGroupId == group.personGroupId)
                {
                    Window.currentGroups[i].TrainingStatus = new TrainingStatus();
                    break;
                }
            }

            var images = Directory.GetFiles(faceDirectory);

            for (int i = 0; i < images.Length; i++)
            {
                await Person.CreateFaceAsync(person.personId, group.personGroupId, File.ReadAllBytes(images[i]));

                await Task.Delay(1000);
            }

            uploadingImages = false;
        }
        private static async void DeletePersonGroupAsync(PersonGroupInfo personGroup)
        {
            await PersonGroup.DeleteGroupAsync(personGroup.personGroupId);

            GetPersonGroupsAsync();
        }