private void OnUserLoginClick(Face f, GameObject panelInstance) { CloudUserData userData = CloudUserData.Instance; if (userData) { userData.selectedUser = f; } // SetHintText("Selected: " + (userData ? userData.selectedUser.candidate.person.name : "-")); CloudUserManager userManager = CloudUserManager.Instance; CloudFaceManager cloudFaceManager = CloudFaceManager.Instance; Person person = userData.selectedUser.candidate.person; StringBuilder sbPerson = new StringBuilder(); CultureInfo culture = new CultureInfo("en-US"); string groupId = userManager ? userManager.userGroupId : ""; string checkIn = System.DateTime.Now.ToString("g", culture); // Timestamp on "Check In" Press person.userData += string.Format("|CheckIn={0}", checkIn); cloudFaceManager.UpdatePersonData(groupId, person); sbPerson.Append(person.name).AppendLine() .AppendLine(person.userData).AppendLine() .AppendLine("Person Updated in Cloud").AppendLine(); Debug.Log(sbPerson.ToString()); panelInstance.gameObject.SetActive(false); SetHintText(string.Format("{0} Checked In", person.name)); // load the main scene // SceneManager.LoadScene(1); }
private IEnumerator UpdatePerson(Person p, string name, string userData) { modalPanel.ShowProgress("Saving data, Please Wait ..."); AsyncTask <bool> task = new AsyncTask <bool>(() => { try { // update data in the cloud CloudUserManager groupMgr = CloudUserManager.Instance; if (groupMgr != null && p != null) { p.name = name; p.userData = userData; groupMgr.UpdateUserData(p); return(true); } return(false); } catch (Exception ex) { Debug.LogError("Failed to process task: " + ex.Message + "\n" + ex.StackTrace); return(false); } }); task.Start(); yield return(null); while (task.State == TaskState.Running) { yield return(null); } modalPanel.Hide(); if (!task.Result) { modalPanel.ShowMessage("Error saving data!"); } else { HidePersonDetails(); if (p != null) { GameObject personPanelInstance = personsPanels[p.personId]; Text personName = personPanelInstance.GetComponentInChildren <Text>(); personName.text = name; } } yield return(null); }
void Start() { try { instance = this; if (string.IsNullOrEmpty(userGroupId)) { throw new Exception("Please set the user-group name."); } faceManager = CloudFaceManager.Instance; if (faceManager != null) { if (string.IsNullOrEmpty(faceManager.faceSubscriptionKey)) { throw new Exception("Please set your face-subscription key."); } } else { throw new Exception("FaceManager-component not found."); } // get the user group info if (checkGroupAtStart) { AsyncTask <bool> task = new AsyncTask <bool>(() => { GetOrGreateUserGroup(); return(userGroupId == initedGroupId); }); task.Start(); int waitounter = threadWaitLoops; while (task.State == TaskState.Running && waitounter > 0) { Thread.Sleep(threadWaitMs); waitounter--; } if (!string.IsNullOrEmpty(task.ErrorMessage)) { throw new Exception(task.ErrorMessage); } } } catch (Exception ex) { Debug.LogError(ex.Message + '\n' + ex.StackTrace); if (debugText != null) { debugText.text = ex.Message; } } }
private IEnumerator DeletePerson(Person p) { modalPanel.ShowProgress("Deleting user, Please Wait ..."); AsyncTask <bool> task = new AsyncTask <bool>(() => { try { // update data in the cloud CloudUserManager groupMgr = CloudUserManager.Instance; if (groupMgr != null && p != null && persons != null) { groupMgr.DeleteUser(p); return(true); } return(false); } catch (Exception ex) { Debug.LogError("Failed to process task: " + ex.Message + "\n" + ex.StackTrace); return(false); } }); task.Start(); yield return(null); while (task.State == TaskState.Running) { yield return(null); } modalPanel.Hide(); if (!task.Result) { modalPanel.ShowMessage("Error deleting user!"); } else { HidePersonDetails(); if (p != null) { persons.Remove(p); GameObject personPanelInstance = personsPanels[p.personId]; DestroyPersonPanel(personPanelInstance); personsPanels.Remove(p.personId); } } yield return(null); }
private IEnumerator CreatePerson(string name) { modalPanel.ShowProgress("Saving data, Please Wait ..."); Person p = null; AsyncTask <bool> task = new AsyncTask <bool>(() => { try { // update data in the cloud CloudUserManager groupMgr = CloudUserManager.Instance; if (groupMgr != null && persons != null) { p = groupMgr.AddUserToGroup(name, string.Empty); return(true); } return(false); } catch (Exception ex) { Debug.LogError("Failed to process task: " + ex.Message + "\n" + ex.StackTrace); return(false); } }); task.Start(); yield return(null); while (task.State == TaskState.Running) { yield return(null); } modalPanel.Hide(); if (!task.Result) { modalPanel.ShowMessage("Error saving data!"); } else { HidePersonDetails(); if (p != null) { persons.Add(p); InstantiatePersonPanel(p); } } yield return(null); }
private IEnumerator CheckGroupStatus() { AsyncTask <bool> task = new AsyncTask <bool>(() => { CloudUserManager groupMgr = CloudUserManager.Instance; // wait for the group manager to start int waitPeriods = 10; while (groupMgr == null && waitPeriods > 0) { Thread.Sleep(500); waitPeriods--; groupMgr = CloudUserManager.Instance; } return(groupMgr ? groupMgr.IsGroupTrained() : false); }); task.Start(); yield return(null); while (task.State == TaskState.Running) { yield return(null); } if (!task.Result) { if (!string.IsNullOrEmpty(task.ErrorMessage)) { Debug.LogError(task.ErrorMessage); } TrainGroupButton.SetActive(true); } CloudUserManager userManager = CloudUserManager.Instance; if (userManager && listHeaderText) { listHeaderText.text = "Group: " + userManager.userGroupId; } yield return(null); }
private void OnSaveUserClick(Face f, InputField saveNameInput, InputField safeInfoInput) { // Create user info string Dictionary <string, string> dUserInfo = new Dictionary <string, string>(); if (safeInfoInput.text != null && safeInfoInput.text.Trim() != string.Empty) { dUserInfo["UserInfo"] = safeInfoInput.text.Trim(); } if (f != null && f.faceAttributes != null) { dUserInfo["Gender"] = f.faceAttributes.gender; dUserInfo["Age"] = f.faceAttributes.age.ToString(); //dUserInfo["Smile"] = string.Format("{0:F3}", f.faceAttributes.smile); dUserInfo["Created"] = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } string sUserInfo = CloudUserManager.ConvertDictToInfo(dUserInfo); // Create the user StartCoroutine(AddUserToGroup(f, saveNameInput.text, sUserInfo)); }
// Creates new user and adds it to the user group private IEnumerator AddUserToGroup(Face face, string userName, string userInfo) { CloudUserManager userManager = CloudUserManager.Instance; if (texCamShot && userManager && face != null && userName != null && userName.Trim() != string.Empty) { SetHintText("Wait..."); yield return(null); FaceRectangle faceRect = face.faceRectangle; byte[] imageBytes = texCamShot.EncodeToJPG(); yield return(null); AsyncTask <Person> task = new AsyncTask <Person>(() => { return(userManager.AddUserToGroup(userName.Trim(), userInfo, imageBytes, faceRect)); }); task.Start(); yield return(null); while (task.State == TaskState.Running) { yield return(null); } // Get the resulting person Person person = task.Result; if (!string.IsNullOrEmpty(task.ErrorMessage)) { SetHintText(task.ErrorMessage); Debug.LogError(task.ErrorMessage); } else if (person != null && person.persistedFaceIds != null && person.persistedFaceIds.Length > 0) { string faceId = face.faceId; bool bFaceFound = false; for (int i = 0; i < faces.Length; i++) { if (faces[i].faceId == faceId) { if (faces[i].candidate == null || faces[i].candidate.person == null) { faces[i].candidate = new Candidate(); faces[i].candidate.personId = person.personId; faces[i].candidate.confidence = 1f; faces[i].candidate.person = person; } bFaceFound = true; break; } } if (!bFaceFound) { Debug.Log(string.Format("Face {0} not found.", faceId)); } SetHintText(string.Format("'{0}' created successfully.", userName.Trim())); ShowIdentityResult(); } else { SetHintText("User could not be created."); } } yield return(null); }
private void InstantiateUserItem(int i, Face f, Person p) { if (!userItemPrefab) { return; } GameObject userItemInstance = Instantiate <GameObject>(userItemPrefab); GameObject userImageObj = userItemInstance.transform.Find("UserImagePanel").gameObject; userImageObj.GetComponentInChildren <RawImage>().texture = f.faceImage; string faceColorName = FaceDetectionUtils.FaceColorNames[i % FaceDetectionUtils.FaceColors.Length]; string userName = string.Format("<color={0}>{1}</color>", faceColorName, p != null ? p.name : faceColorName + " face"); GameObject userNameObj = userItemInstance.transform.Find("UserName").gameObject; userNameObj.GetComponent <Text>().text = userName; if (p != null) { Dictionary <string, string> dUserData = CloudUserManager.ConvertInfoToDict(p.userData); string sUserInfo = dUserData.ContainsKey("UserInfo") ? dUserData["UserInfo"] : string.Empty; GameObject userInfoObj = userItemInstance.transform.Find("UserInfo").gameObject; userInfoObj.GetComponent <Text>().text = sUserInfo; userInfoObj.SetActive(true); GameObject loginBtnObj = userItemInstance.transform.Find("LoginButton").gameObject; loginBtnObj.SetActive(true); Button loginButton = loginBtnObj.GetComponent <Button>(); loginButton.onClick.AddListener(() => OnUserLoginClick(f)); // enable selectable panel userItemInstance.GetComponent <Selectable>().enabled = true; AddUserPanelClickListener(userItemInstance, f); } else { GameObject saveNameObj = userItemInstance.transform.Find("SaveName").gameObject; saveNameObj.SetActive(true); GameObject saveInfoObj = userItemInstance.transform.Find("SaveInfo").gameObject; saveInfoObj.SetActive(true); GameObject saveBtnObj = userItemInstance.transform.Find("SaveButton").gameObject; saveBtnObj.SetActive(true); Button saveButton = saveBtnObj.GetComponent <Button>(); InputField saveNameInput = saveNameObj.GetComponent <InputField>(); InputField saveInfoInput = saveInfoObj.GetComponent <InputField>(); saveButton.onClick.AddListener(() => OnSaveUserClick(f, saveNameInput, saveInfoInput)); // Disable selectable panel userItemInstance.GetComponent <Selectable>().enabled = false; } userItemInstance.transform.SetParent(userListContent, false); personsPanels.Add(f.faceId, userItemInstance); }
// Performs user recognition private IEnumerator DoUserRecognition() { // Get the image to detect faces = null; texCamShot = null; if (cameraShot) { texCamShot = (Texture2D)cameraShot.texture; SetHintText("Wait..."); } // Get the user manager instance CloudUserManager userManager = CloudUserManager.Instance; if (!userManager) { if (hintText) { hintText.text = "Check if the CloudFaceManager and CloudUserManager components exist in the scene."; } } else if (texCamShot) { byte[] imageBytes = texCamShot.EncodeToJPG(); yield return(null); AsyncTask <bool> taskIdentify = new AsyncTask <bool>(() => { bool bSuccess = userManager.IdentifyUsers(imageBytes, ref faces, ref results); return(bSuccess); }); taskIdentify.Start(); yield return(null); while (taskIdentify.State == TaskState.Running) { yield return(null); } if (string.IsNullOrEmpty(taskIdentify.ErrorMessage)) { if (taskIdentify.Result) { CloudFaceManager.DrawFaceRects(texCamShot, faces, FaceDetectionUtils.FaceColors); yield return(null); SetHintText("Select user to login:"******"No users detected."); } // show the identified users ShowIdentityResult(); } else { SetHintText(taskIdentify.ErrorMessage); } } yield return(null); }
private IEnumerator TrainGroup() { AsyncTask <bool> task = new AsyncTask <bool>(() => { CloudUserManager groupMgr = CloudUserManager.Instance; return(groupMgr.StartGroupTraining()); }); bool abort = false; modalPanel.ShowProgress("Started group training. Please wait.", () => abort = true); task.Start(); yield return(null); while (task.State == TaskState.Running) { yield return(null); } if (!task.Result) { if (!string.IsNullOrEmpty(task.ErrorMessage)) { modalPanel.ShowMessage(task.ErrorMessage); } else { modalPanel.ShowMessage("Group training failed. Please, try again later."); } yield return(null); } else if (!abort) { task = new AsyncTask <bool>(() => { CloudUserManager groupMgr = CloudUserManager.Instance; bool isTrained = false; int retries = 0; while (!isTrained && retries++ < 3 && !abort) { Thread.Sleep(5000); isTrained = groupMgr.IsGroupTrained(); } return(isTrained); }); task.Start(); yield return(null); while (task.State == TaskState.Running) { yield return(null); } if (!abort) { if (!task.Result) { if (!string.IsNullOrEmpty(task.ErrorMessage)) { modalPanel.ShowMessage(task.ErrorMessage); } else { modalPanel.ShowMessage("Group training failed. Please, try again later."); } } else { modalPanel.ShowMessage("Group training succeeded."); TrainGroupButton.SetActive(false); } } } yield return(null); }
private IEnumerator LoadPersons() { modalPanel.ShowProgress("Loading users. Please wait ..."); // Clear persons from the list if (persons != null) { persons.Clear(); } foreach (GameObject panel in personsPanels.Values) { DestroyPersonPanel(panel); } personsPanels.Clear(); AsyncTask <List <Person> > task = new AsyncTask <List <Person> >(() => { // load persons here CloudUserManager groupMgr = CloudUserManager.Instance; // wait for the group manager to start int waitPeriods = 10; while (groupMgr == null && waitPeriods > 0) { Thread.Sleep(500); waitPeriods--; groupMgr = CloudUserManager.Instance; } return(groupMgr ? groupMgr.GetUsersList() : null); }); task.Start(); yield return(null); while (task.State == TaskState.Running) { yield return(null); } modalPanel.Hide(); persons = task.Result; if (persons != null) { // sort the person names alphabetically persons = persons.OrderBy(p => p.name).ToList(); foreach (Person p in persons) { InstantiatePersonPanel(p); } } else { if (!string.IsNullOrEmpty(task.ErrorMessage)) { Debug.LogError(task.ErrorMessage); } else { Debug.LogError("Error loading users' list. Check the FaceManager- and UserGroupManager-components."); } } yield return(null); }