Exemple #1
0
        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;
        }
Exemple #2
0
    /// <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);
    }
Exemple #4
0
        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)
                    {
                    }
                }
            }
        }
Exemple #5
0
        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));
 }
Exemple #9
0
        /// <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");
            }
        }
Exemple #11
0
    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"));
            }
        }
    }
Exemple #12
0
        /// <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);
        }
Exemple #13
0
 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);
        }