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); } }
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(); }
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()); } }
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; }
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); } }
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(); }
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(); }
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(); } }
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(); }
public FaceVerificationMenu() { InitializeComponent(); Context = new GalliumContext(); }