public Human GetHumanFromId(int id)
 {
     return
         (ServicesWorker.GetInstance <DatabaseService>().Query <Human>(new Dictionary <string, object> {
         { "Id", id }
     }));
 }
        public void LoadFromDb()
        {
            People.Clear();
            bool has_deleting_objs = false;

            foreach (var human in ServicesWorker.GetInstance <DatabaseService>().QueryByClassName <Human>())
            {
                if (Directory.Exists("Images\\" + human.Name))
                {
                    var fileNames = Directory.GetFiles("Images\\" + human.Name, "*.jpg");
                    human.ImagesEmgu =
                        new List <Image <Gray, byte> >(fileNames.Select(fileName => new Image <Gray, byte>(fileName)).ToList());
                    People.Add(human);
                }
                else
                {
                    has_deleting_objs = true;
                }
            }
            if (has_deleting_objs)
            {
                ServicesWorker.GetInstance <DatabaseService>().Clear();
                foreach (var human in People)
                {
                    ServicesWorker.GetInstance <DatabaseService>().Insert <Human>(human.Id, human);
                }
            }
        }
        public void AddHuman(string label, List <Image <Gray, byte> > images)
        {
            var id    = People.Count;
            var human = new Human(id, label, images);

            People.Add(human);
            ServicesWorker.GetInstance <DatabaseService>().Insert <Human>(id, human);
        }
 public void Load()
 {
     ServicesWorker.GetInstance <HumanService>().LoadFromDb();
     if (File.Exists("facerecognizer"))
     {
         _faceRecognizer.Load("facerecognizer");
         _faceRecognizerTrained = true;
     }
     if (File.Exists("genderfacerecognizer"))
     {
         _genderFaceRecognizer.Load("genderfacerecognizer");
     }
 }
        public void TrainFaceRecognizer()
        {
            var allImages = new List <Image <Gray, byte> >();
            var idList    = new List <int>();

            foreach (var human in ServicesWorker.GetInstance <HumanService>().People)
            {
                allImages.AddRange(human.ImagesEmgu);
                idList.AddRange(human.ImagesEmgu.Select(hm => human.Id));
            }
            if (idList.Count == 0 || allImages.Count == 0)
            {
                throw new NoHumanException("Нет данных о людях для обучения!");
            }
            _faceRecognizer.Train(allImages.ToArray(), idList.ToArray());
            _faceRecognizerTrained = true;
            _faceRecognizer.Save("facerecognizer");
        }
        private bool RecognizeFamiliarPerson(Image <Gray, byte> detectedFace)
        {
            var result = _faceRecognizer.Predict(detectedFace);

            if (result.Label != -1)
            {
                var human = ServicesWorker.GetInstance <HumanService>().GetHumanFromId(result.Label);
                if (human != null)
                {
                    Recognized?.Invoke(human.Name, result.Distance);
                }
                else
                {
                    Recognized?.Invoke(result.Label.ToString(), result.Distance);
                }
                return(true);
            }
            return(false);
        }
        public List <Image <Gray, byte> > AddImagesToHuman(string name)
        {
            var images  = new List <Image <Gray, byte> >();
            var count   = 0;
            var capture = new Capture();

            while (count < FaceCount)
            {
                var image        = capture.QueryFrame().ToImage <Gray, byte>();
                var detectedFace = DetectFace(image);
                if (detectedFace != null)
                {
                    images.Add(detectedFace);
                    count++;
                    OnCount(count, FaceCount);
                    Thread.Sleep(500);
                }
            }
            ServicesWorker.GetInstance <HumanService>().AddHuman(name, images);
            capture.Dispose();
            return(images);
        }