private void btn_Favorite_Click_1(object sender, RoutedEventArgs e)
 {
     if (FavoriteFolders.Contains(SelectedFolder))
     {
         FavoriteFolders.Remove(SelectedFolder);
     }
     else
     {
         FavoriteFolders.Add(SelectedFolder);
     }
     RaiseEvent(new RoutedEventArgs(RoutedPropertyChangedEvent));
 }
        private void Worker_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker       = (BackgroundWorker)sender;
            List <string>    checked_file = new List <string>();

            using (StreamReader reader = new StreamReader(new BufferedStream(new FileStream("checked_file.txt", FileMode.OpenOrCreate, FileAccess.Read), 512)))
            {
                while (!reader.EndOfStream)
                {
                    checked_file.Add(reader.ReadLine());
                }
            }


            using (StreamWriter writer = new StreamWriter(new BufferedStream(new FileStream("checked_file.txt", FileMode.Append, FileAccess.Write), 512)))
            {
                int i = PV_Recognizer.training_sets.Count;
                //while (!worker.CancellationPending)
                {
                    //System.Threading.Thread.Sleep(2000);
                    IEnumerable <FileInfo> files = FavoriteFolders.SelectMany(x => (new DirectoryInfo(x).GetFilesByExtensions(".jpg", ".bmp", ".png")))
                                                   .Where(x => !checked_file.Contains(x.FullName) && x.Length < 10000000);
                    foreach (FileInfo f in files)
                    {
                        CvInvoke.Resize
                        List <RecognitionModel> result = (PV_Recognizer.Recognize(new UMat(f.FullName, ImreadModes.Color)., f.FullName));
                        writer.WriteLine(f.FullName);
                        //foreach (RecognitionModel rm in result) PeopleImage.Add(rm);
                        worker.ReportProgress(0, result);

                        while ((PV_Recognizer.training_sets.Where(x => (!x.Processed)).Count() > 15) && !worker.CancellationPending)
                        {
                            System.Threading.Thread.Sleep(2000);
                        }
                        ;
                        if (PV_Recognizer.training_sets.Count - i > 30)
                        {
                            Console.WriteLine("Re-training recognizer....");
                            IEnumerable <RecognitionModel> arr = PV_Recognizer.training_sets.Where(x => x.Processed);
                            PV_Recognizer.Recognizer.Train(arr.Select(x => x.FaceImageCV).ToArray(), arr.Select(x => x.LabelInt).ToArray());
                            i = PV_Recognizer.training_sets.Count;
                            Console.WriteLine("Training completed!");
                        }
                    }
                }
            }
        }