private async Task LoadPersonFacesFromService() { this.progressControl.IsActive = true; this.PersonFaces.Clear(); try { Person latestVersionOfCurrentPerson = await FaceServiceHelper.GetPersonAsync(this.CurrentPersonGroup.PersonGroupId, this.CurrentPerson.PersonId); this.CurrentPerson.PersistedFaceIds = latestVersionOfCurrentPerson.PersistedFaceIds; if (this.CurrentPerson.PersistedFaceIds != null) { foreach (Guid face in this.CurrentPerson.PersistedFaceIds) { PersonFace personFace = await FaceServiceHelper.GetPersonFaceAsync(this.CurrentPersonGroup.PersonGroupId, this.CurrentPerson.PersonId, face); this.PersonFaces.Add(personFace); } } } catch (Exception e) { await Util.GenericApiCallExceptionHandler(e, "Failure downloading person faces"); } this.progressControl.IsActive = false; }
/// <summary> /// Adds the face to a person in a person-group. /// </summary> /// <returns>The persisted face (only faceId is set).</returns> /// <param name="groupId">Person-group ID.</param> /// <param name="personId">Person ID.</param> /// <param name="userData">User data.</param> /// <param name="faceRect">Face rect or null.</param> /// <param name="imageBytes">Image bytes.</param> public PersonFace AddFaceToPerson(string groupId, string personId, string userData, FaceRectangle faceRect, byte[] imageBytes) { if (string.IsNullOrEmpty(faceSubscriptionKey)) { throw new Exception("The face-subscription key is not set."); } string sFaceRect = faceRect != null?string.Format("{0},{1},{2},{3}", faceRect.left, faceRect.top, faceRect.width, faceRect.height) : string.Empty; string requestUrl = string.Format("{0}/persongroups/{1}/persons/{2}/persistedFaces?userData={3}&targetFace={4}", GetFaceServiceUrl(), groupId, personId, userData, sFaceRect); Dictionary <string, string> headers = new Dictionary <string, string>(); headers.Add("ocp-apim-subscription-key", faceSubscriptionKey); HttpWebResponse response = CloudWebTools.DoWebRequest(requestUrl, "POST", "application/octet-stream", imageBytes, headers, true, false); PersonFace face = null; if (!CloudWebTools.IsErrorStatus(response)) { StreamReader reader = new StreamReader(response.GetResponseStream()); face = JsonUtility.FromJson <PersonFace>(reader.ReadToEnd()); } else { ProcessFaceError(response); } return(face); }
/// <summary> /// Adds face to the user. /// </summary> /// <returns>User face ID.</returns> /// <param name="person">Person.</param> /// <param name="imageBytes">Image bytes.</param> /// <param name="faceRect">Face rectangle.</param> public string AddFaceToUser(Person person, byte[] imageBytes, FaceRectangle faceRect) { // create the user-group if needed if (userGroupId != initedGroupId) { GetOrGreateUserGroup(); } if (userGroupId != initedGroupId) { return(string.Empty); } if (faceManager != null && person != null && imageBytes != null) { PersonFace personFace = faceManager.AddFaceToPerson(userGroupId, person.personId, string.Empty, faceRect, imageBytes); if (personFace != null) { faceManager.TrainPersonGroup(userGroupId); return(personFace.persistedFaceId); } } return(string.Empty); }
private async void OnImageDataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args) { PersonFace dataContext = sender.DataContext as PersonFace; if (dataContext != null) { Image image = sender as Image; if (image != null) { BitmapImage bitmapImage = new BitmapImage(); image.Source = bitmapImage; try { if (Path.IsPathRooted(dataContext.UserData)) { // local file bitmapImage.SetSource(await(await StorageFile.GetFileFromPathAsync(dataContext.UserData)).OpenReadAsync()); } else { // url bitmapImage.UriSource = new Uri(dataContext.UserData); } } catch (Exception) { } } } }
private void btnOK_Click(object sender, EventArgs e) { btnOK.Enabled = false; if (_hasFace) { PersonFace _personFace = new PersonFace(); _personFace.Name = txtPersonName.Text; _personFace.Position = txtPosition.Text; _personFace.Description = txtDescription.Text; _personFace.SerialNumber = txtSerialNumber.Text; if (!Directory.Exists(AppConfigurations.FaceImagesPath)) { Directory.CreateDirectory(AppConfigurations.FaceImagesPath); } var imageFileName = string.Format("{0}.jpg", System.Guid.NewGuid().ToString()); var thumbImageFileName = Path.Combine(AppConfigurations.FaceImagesPath, imageFileName); // 保存人脸截图缩略图 _faceThumbnail.Save(thumbImageFileName, System.Drawing.Imaging.ImageFormat.Jpeg); _personFace.ImageUrl = thumbImageFileName; _personFace.FaceFeature = _feature.FeatureData; // 查找相似度0.5以上的人脸 var face = _faceDetectionService.FindPersonFaceByFeatureFirstOrDefault(_feature); if (face == null) { var result = _personFaceRepository.InsertPersionFace(_personFace); _faceCount++; } else { FrmReplaceFaceFeature frff = new FrmReplaceFaceFeature(_personFace, face.PersonFace, face.Similar); if (frff.ShowDialog() == DialogResult.OK) { _personFace.Id = face.PersonFace.Id; var rep = _personFaceRepository.UpdatePersonFace(_personFace); MessageBox.Show("人脸更新成功!"); } frff.Dispose(); } } btnOK.Enabled = true; i++; if (i < _count) { ShowFaceImage(i); } else { MessageBox.Show("成功添加人脸特征数量:" + _faceCount); this.DialogResult = DialogResult.OK; } }
/// <summary> /// Adds the user to group. /// </summary> /// <returns>Person or null.</returns> /// <param name="userName">User name.</param> /// <param name="userData">User data.</param> /// <param name="imageBytes">Image bytes.</param> /// <param name="faceRect">Face rectangle.</param> public Person AddUserToGroup(string userName, string userData, byte[] imageBytes, FaceRectangle faceRect) { // create the user-group if needed if (userGroupId != initedGroupId) { GetOrGreateUserGroup(); } if (userGroupId != initedGroupId) { return(null); } if (faceManager != null) { // add person Person person = faceManager.AddPersonToGroup(userGroupId, userName, userData); if (person != null) { // if(faceRect != null) // { // faceRect.Left -= 10; // faceRect.Top -= 10; // faceRect.Width += 20; // faceRect.Height += 20; // } PersonFace personFace = null; if (imageBytes != null) { personFace = faceManager.AddFaceToPerson(userGroupId, person.personId, string.Empty, faceRect, imageBytes); } if (personFace != null) { person.persistedFaceIds = new string[1]; person.persistedFaceIds[0] = personFace.persistedFaceId; // train the group faceManager.TrainPersonGroup(userGroupId); // wait for training to complete bool isTrained = false; int retries = 0; while (!isTrained && retries++ < 5) { Thread.Sleep(1000); isTrained = faceManager.IsPersonGroupTrained(userGroupId); } } } return(person); } return(null); }
public async Task <IActionResult> CreatePersonFace(string personGroupId, string personId, IFormFile uploadFile) { var blobUri = await this.storageClient.AddNewBlob(personGroupId, personId, uploadFile); var personFaceResult = await this.faceApi.AddPersonFace(personGroupId, personId, blobUri); var personFace = new PersonFace { PersistedFaceId = personFaceResult.PersistedFaceId, UserData = blobUri }; return(this.Ok(personFace)); }
public PersonFace InsertPersionFace(PersonFace personFace) { //PersonFace face = new PersonFace(); //face.Id = personFace.Id; //face.SerialNumber = personFace.SerialNumber; //face.Name = personFace.Name; //face.ImageUrl = personFace.ImageUrl; //face.Position = personFace.Position; //face.Description = personFace.Description; //face.CreationTime = personFace.CreationTime; //face.FaceFeature = personFace.FaceFeature.Data; personFace.CreationTime = DateTime.Now; return(_personFaceResitory.InsertPersionFace(personFace)); }
/// <summary> /// 添加一个人脸到人脸库 /// </summary> /// <param name="face"></param> public PersonFace InsertPersionFace(PersonFace face) { PersonFace _face = null; try { _face = context.PersonFaces.Add(face); context.SaveChanges(); } catch (DbEntityValidationException dbEx) { throw new Exception(dbEx.Message); } return(_face); }
private async void OnDeleteFaceClicked(object sender, RoutedEventArgs e) { try { foreach (var item in this.selectedPersonFacesGridView.SelectedItems.ToArray()) { PersonFace personFace = (PersonFace)item; await FaceServiceHelper.DeletePersonFaceAsync(this.CurrentPersonGroup.PersonGroupId, this.SelectedPerson.PersonId, personFace.PersistedFaceId); this.SelectedPersonFaces.Remove(personFace); this.needsTraining = true; } } catch (Exception ex) { await Util.GenericApiCallExceptionHandler(ex, "Failure deleting images"); } }
void Update() { // check for mouse click if (Input.GetMouseButtonDown(0)) { DoMouseClick(); } if (Input.GetButton("Jump")) { //bool bRes = FaceManager.Instance.CreatePersonGroup("testusers", "Test Users", "group=test"); //Debug.Log(bRes); FaceManager faceManager = FaceManager.Instance; Person[] persons = faceManager.ListPersonsInGroup("testusers"); //Person person = faceManager.AddPersonToGroup("testusers", "Tester", "Here I come."); foreach (Person person in persons) { if (person != null) { Debug.Log("Person " + person.Name + ", ID: " + person.PersonId); } } if (persons.Length > 0) { Texture2D texCamShot = (Texture2D)cameraShot.GetComponent <Renderer>().material.mainTexture; string personId = persons[0].PersonId.ToString(); // add person face PersonFace face = faceManager.AddFaceToPerson("testusers", personId, string.Empty, null, texCamShot); Debug.Log("Added face: " + face.PersistedFaceId); // train the group faceManager.TrainPersonGroup("testusers"); // check if training is finished Debug.Log("Trained: " + faceManager.IsPersonGroupTrained("testusers")); } } }
/// <summary> /// 更新人脸 /// </summary> /// <param name="personFace"></param> /// <returns></returns> public PersonFace UpdatePersonFace(PersonFace personFace) { var _face = context.PersonFaces.Find(personFace.Id); try { _face.SerialNumber = personFace.SerialNumber; _face.Name = personFace.Name; _face.ImageUrl = personFace.ImageUrl; _face.Position = personFace.Position; _face.Description = personFace.Description; _face.CreationTime = personFace.CreationTime; _face.FaceFeature = personFace.FaceFeature; context.SaveChanges(); } catch (DbEntityValidationException dbEx) { throw new Exception(dbEx.Message); } return(_face); }
public FrmReplaceFaceFeature(PersonFace _newFace, PersonFace _oldFace, float Similar) : this() { this.NewFace = _newFace; this.OldFace = _oldFace; this.Similar = Similar * 100; }
public PersonFace UpdatePersonFace(PersonFace personFace) { return(_personFaceResitory.UpdatePersonFace(personFace)); }
protected async override void OnNavigatedTo(NavigationEventArgs e) { this.DataContext = this; IEnumerable <PersonGroup> personGroups = await FaceServiceHelper.ListPersonGroupsAsync(SettingsHelper.Instance.WorkspaceKey); List <CustomerModel> listCustomer = new List <CustomerModel>(); CustomerModel modelCus; foreach (var itemGrop in personGroups) { var personsTemp = await FaceServiceHelper.GetPersonsAsync(itemGrop.PersonGroupId); foreach (var itemper in personsTemp) { modelCus = new CustomerModel(); PersonFace personFace = null; foreach (Guid face in itemper.PersistedFaceIds) { personFace = await FaceServiceHelper.GetPersonFaceAsync(itemGrop.PersonGroupId, itemper.PersonId, face); break; } if (personFace != null) { modelCus.LinkImage = personFace.UserData; } modelCus.Name = itemper.Name; listCustomer.Add(modelCus); } } //PersonFace personFace = await FaceServiceHelper.GetPersonFaceAsync(this.CurrentPersonGroup.PersonGroupId, this.SelectedPerson.PersonId, face); List <LogCustomerModel> listResult = logCustomer.StatisticLogCustomer().Where(r => r.DateIn.Date == DateTime.Now.Date).ToList(); this.ListCustomerVip = listResult.Where(r => r.Type.Equals("1")).ToList(); var listTemp = this.ListCustomerVip.GroupBy(info => info.CustomerName) .Select(group => new { CustomerName = group.Key, Count = group.Count() }) .OrderBy(x => x.Count); int max = listTemp != null && listTemp.Count() > 0 ? listTemp.Max(r => r.Count) : 0; List <StatisticVip> listVip1 = new List <StatisticVip>(); List <StatisticVip> listVip2 = new List <StatisticVip>(); StatisticVip statisticVip; int index = 1; foreach (var item in listTemp) { var tenpCustomer = listCustomer.Where(r => r.Name.Equals(item.CustomerName)).FirstOrDefault(); statisticVip = new StatisticVip() { CustomerName = item.CustomerName, Count = item.Count, Max = max, LinkImge = tenpCustomer != null ? tenpCustomer.LinkImage : string.Empty }; if (index % 2 == 0) { listVip2.Add(statisticVip); } else { listVip1.Add(statisticVip); } index++; } this.customerVip.ItemsSource = listVip1; this.customerVip2.ItemsSource = listVip2; List <PointModel> data = new List <PointModel>(); List <PointModel> dataVip = new List <PointModel>(); PointModel hourValue; for (int hour = 1; hour <= 24; hour++) { hourValue = new PointModel() { Name = hour.ToString() + "h", Amount = listResult.Where(r => r.DateIn.Hour == hour).Count(), }; data.Add(hourValue); hourValue = new PointModel() { Name = hour.ToString() + "h", Amount = listResult.Where(r => r.DateIn.Hour == hour && r.Type.Equals("1")).GroupBy(g => g.CustomerName).Count(), }; dataVip.Add(hourValue); } List <LineSeries> listLineSeries = new List <LineSeries>(); var seriesLine = new LineSeries() { Title = "Tổng lưu lượng khách hàng", IndependentValuePath = "Name", DependentValuePath = "Amount", ItemsSource = data }; listLineSeries.Add(seriesLine); seriesLine = new LineSeries() { Title = "Lưu lượng khách hàng Vip", IndependentValuePath = "Name", DependentValuePath = "Amount", ItemsSource = dataVip }; listLineSeries.Add(seriesLine); LineChart.Series.AddRange(listLineSeries); base.OnNavigatedTo(e); }