예제 #1
0
        static void ProcessTest(string[] args)
        {
            switch (args[0])
            {
            case "1":
            {
                var iss = new ImageSoftSimilarity();
                //foreach (var file in Directory.GetFiles(@"C:\Users\rollrat\Desktop\새 폴더"))
                //    if (file.EndsWith(".png"))
                //        iss.AppendImage(file);

                Parallel.ForEach(Directory.GetFiles(@"C:\Users\rollrat\Desktop\새 폴더").Where(x => x.EndsWith(".png")),
                                 //new ParallelOptions { MaxDegreeOfParallelism = 2 },
                                 (x) =>
                    {
                        iss.AppendImage(x);
                    });

                //iss.FindForSoft(ImageSoftSimilarity.MakeSoftHash(@"C:\Users\rollrat\Desktop\새 폴더\1577170523.png"), 20);
            }
            break;

            case "2":
            {
                var iss = new ImageSoftSimilarity();
                Parallel.ForEach(Directory.GetFiles(@"C:\Users\rollrat\Desktop\새 폴더").Where(x => x.EndsWith(".png") || x.EndsWith(".jpg")),
                                 //new ParallelOptions { MaxDegreeOfParallelism = 4 },
                                 x => iss.AppendImage(x));

                var clustered = iss.Clustering();
            }
            break;
            }
        }
        private async void Clustering_Click(object sender, RoutedEventArgs e)
        {
            StatusProgress.Visibility          = Visibility.Visible;
            Extends.Post(() => StatusText.Text = $"VP-Tree를 생성하는 중...");
            double rate;

            if (!double.TryParse(MaxRate.Text, out rate))
            {
                MessageBox.Show("클러스터링 최고 역치는 실수여야합니다!", "Gallery Explorer", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            await Task.Run(() => {
                var clustered = iss.Clustering(x =>
                {
                    Extends.Post(() => StatusText.Text = $"클러스터링 중 ... [{x.Item1.ToString("#,#")}/{x.Item2.ToString("#,#")}] ({(x.Item1 / (double)x.Item2 * 100.0).ToString("#0.00")} %)");
                }, 50, rate);

                Extends.Post(() =>
                {
                    var vm = ResultList.DataContext as ImageSimilarityDataGridViewModel;
                    vm.Items.Clear();
                    clustered.Where(x => x.Count >= 2).ToList().ForEach(x => vm.Items.Add(new ImageSimilarityDataGridItemViewModel
                    {
                        개수      = x.Count.ToString(),
                        평균_정확도  = x.Max(y => y.Item2).ToString(),
                        results = x
                    }));
                });
            });

            StatusProgress.Visibility          = Visibility.Collapsed;
            Extends.Post(() => StatusText.Text = $"클러스터링이 완료되었습니다.");
        }