Example #1
0
        private void ProcessPhoto(GalliumContext ctx, Photo photo)
        {
            Console.WriteLine($"Beginning processing of photo {photo.Name}");
            try
            {
                if (!photo.HasFacesChecked)
                {
                    photo.HasFacesChecked = true;

                    var faces = PhotoHelper.UploadToFaceApiAsync(photo.FullName).Result;

                    foreach (var face in faces)
                    {
                        var faceEntity = new Models.FaceApi.DetectedFace
                        {
                            HumanVerified = false,
                            FaceRectangle = face.FaceRectangle,
                            Photo         = photo,
                            FaceId        = face.FaceId
                        };
                        PhotoHelper.ExtractFaceFromPhoto(photo, faceEntity);
                        faceEntity.FaceFile = DirectoryHelper.GetFacePath(face.FaceId.ToString());
                        ctx.DetectedFaces.Add(faceEntity);
                    }
                    ctx.SaveChanges();
                }
            }
            catch (System.IO.IOException e) { Thread.Sleep(500); }
            catch (Exception e)
            {
                Thread.Sleep(5000);
            }
        }
Example #2
0
 private void AddPhotosToDB(GalliumContext ctx, IList <Photo> photos)
 {
     foreach (var photo in photos)
     {
         if (!ctx.Photos.Where(p => p.FullName.Equals(photo.FullName)).Any())
         {
             ctx.Photos.Add(photo);
         }
     }
     ctx.SaveChanges();
 }
Example #3
0
        private void DetectFacesOnPhotosAsync(GalliumContext ctx, IList <Photo> photos)
        {
            float startCount = photos.Count;

            while (photos.Any())
            {
                FaceApiWorker.ReportProgress(100 - (int)(photos.Count / startCount * 100));

                ProcessPhoto(ctx, photos.First());
                photos.Remove(photos.First());
            }
        }
Example #4
0
        public FaceRecognitionWindow(GalliumContext context, DetectedFace unrecognisedFace, bool continueValidationOnEnd = false)
        {
            Context          = context;
            UnrecognisedFace = unrecognisedFace;

            InitializeComponent();
            ContinueValidating.IsChecked = continueValidationOnEnd;

            FaceImage.Source = new BitmapImage(new Uri(unrecognisedFace.FaceFile));

            UsernameList.ItemsSource       = Context.Person.ToList();
            UsernameList.SelectionChanged += UsernameList_SelectionChanged;
        }
Example #5
0
        private void FaceApiWorker_DoWorkAsync(object sender, DoWorkEventArgs e)
        {
            using (GalliumContext ctx = new GalliumContext())
            {
                List <PhotoDirectories> directories = ctx.Directories.ToList();
                IList <Photo>           photos      = PhotoHelper.DiscoverPhotosInDirectories(directories);

                AddPhotosToDB(ctx, photos);

                var uncheckedPhotos = ctx.Photos.Where(p => p.HasFacesChecked == false).ToList();
                DetectFacesOnPhotosAsync(ctx, uncheckedPhotos);
            }
        }
Example #6
0
        public DetailedPersonView(Person person, GalliumContext context)
        {
            Context = context;
            Person  = person;

            this.DataContext = person;
            InitializeComponent();
            GroupBox.Header = $"{person.Name} {person.LastName}";

            DateOfBirth.Content = person.DateOfBirth.HasValue ? person.DateOfBirth.Value.ToString("dd-MM-yyyy") : "";

            PopulateOtherFaces();
            PopulateVerifiedFaces();
        }
Example #7
0
        public MainMenu()
        {
            Context    = new GalliumContext();
            FaceClient = new FaceServiceClient(Constants.APIkey, Constants.APIUri);

            InitializeComponent();

            InitPersonGroup();
            InitWorkingDirectory();

            ResetPostponedFaces();
            SynchroniseData();

            FaceApiWorker                       = new BackgroundWorker();
            FaceApiWorker.DoWork               += FaceApiWorker_DoWorkAsync;
            FaceApiWorker.ProgressChanged      += FaceApiWorker_ProgressChanged;
            FaceApiWorker.RunWorkerCompleted   += FaceApiWorker_RunWorkerCompleted;
            FaceApiWorker.WorkerReportsProgress = true;
            FaceApiWorker.RunWorkerAsync();
        }
Example #8
0
        private async void Gallery_Loaded(object sender, RoutedEventArgs e)
        {
            using (ctx = new GalliumContext())
            {
                List <PhotoDirectories> directories = await ctx.Directories.ToListAsync();

                photos = PhotoHelper.DiscoverPhotosInDirectories(directories);


                photos = await TryGetMiniaturesAsync(photos, ctx);

                foreach (var photo in photos)
                {
                    AddMiniatureToGrid(photo);
                }

                foreach (ILoadableImage miniature in miniatures)
                {
                    miniature.MiniatureLoaded += Miniature_MiniatureLoaded;
                }
                StartLoadingMiniatures();
            }
        }
Example #9
0
        private async Task <IList <Photo> > TryGetMiniaturesAsync(IList <Photo> photos, GalliumContext ctx)
        {
            photos = await ctx.Photos.Include(faceClient => faceClient.DetectedFaces.Select(df => df.FaceOwner)).Include(m => m.Miniature).Include(f => f.DetectedFaces).ToListAsync();

            foreach (var photo in photos)
            {
                photo.Miniature = GetMiniatureForPhoto(photo);
            }
            await ctx.SaveChangesAsync();

            return(photos);
        }
 public PeopleProfilesWindow(GalliumContext context)
 {
     Context = context;
     InitializeComponent();
     PopulateView();
 }
Example #11
0
 public FaceVerificationMenu()
 {
     InitializeComponent();
     Context = new GalliumContext();
 }