Esempio n. 1
0
    /// <summary>
    /// Search similar images
    /// </summary>
    private void SearchSimilar()
    {
        if (!this.SearchFolder.Text.Equals(String.Empty) && !image_of_interest.Equals(String.Empty))
            {
                if (Directory.Exists(this.SearchFolder.Text))
                    {
                        // re-create index
                        if ( this.CheckRecreateIndex.IsChecked == true)
                            {

                                var index_files = Directory.EnumerateFiles(this.SearchFolder.Text, "image*.idx", SearchOption.TopDirectoryOnly).ToList();
                                foreach (var index_file in index_files)
                                    {
                                        File.Delete(index_file);
                                        var fs = File.Create(index_file);
                                        fs.Close();
                                        Thread.Sleep(20);
                                    }
                                images_index = new Images.ImageIndexMulti();
                                this.CheckRecreateIndex.IsChecked = false;
                            }

                        info_images_found.Clear();
                        similar_images.Clear();
                        current_page = 1;
                        this.LResultsPageNumber.Content = "  ";

                        try
                            {
                                ReadSearchOptions();
                                RunSearchSimilarTask();

                                GC.Collect(); // force GC to free memory
                                GC.WaitForPendingFinalizers();
                            }
                        catch (Exception e)
                            {
                                this.SBStatusText.Content = String.Format("Error: {0} ", e.Message);
                            }
                    }
            }
    }
Esempio n. 2
0
        public static void Main(string[] args)
        {
            var parameters = ReadCommandLineParameters(args);

            Stopwatch stopWatch = new Stopwatch();

            Console.WriteLine("Find Similar Images");
            Console.WriteLine("-------------------");
            Console.WriteLine("  image directory : {0}", parameters.image_directory);
            Console.WriteLine("image of interest : {0}", parameters.image_of_interest);
            Console.WriteLine("      search mode : {0}", parameters.search_mode);
            if (!parameters.search_mode.Equals("index"))
            {
                Console.WriteLine("       image hash : {0}", parameters.image_hash_algorithm.ToString());
                Console.WriteLine(" pixel comparison : {0}", parameters.color_filter.ToString());
                Console.WriteLine("       similarity : {0}%", parameters.min_similarity);
            }
            Console.WriteLine("-------------------");

            // Index images files in directory
            ////////////////////////////////////////////////

            stopWatch.Reset();
            stopWatch.Start();

            //var images_index = new Images.ImageIndex(parameters.image_directory);
            var images_index = new Images.ImageIndexMulti();

            images_index.IndexImageDirectory(parameters.image_directory);
            Console.WriteLine("");

            stopWatch.Stop();
            TimeSpan ts_index = stopWatch.Elapsed;

            PrintElapsedTime(ts_index);

            var image_files = images_index.ImageFilesIndexed();

            Console.WriteLine("* {1} images in directory \"{0}\"", parameters.image_directory, image_files.Count().ToString());

            if (parameters.search_mode.Equals("index"))
            {
                System.Environment.Exit(0);
            }

            // find similar images and export as html page
            ////////////////////////////////////////////////

            Console.WriteLine("* Search for similar images");
            stopWatch.Reset();
            stopWatch.Start();

            if (File.Exists(parameters.image_of_interest))
            {
                // Case :find images similar to an image of interest in a directory
                try
                {
                    if (!Path.IsPathRooted(parameters.image_of_interest))
                    {
                        parameters.image_of_interest = Path.Combine(Directory.GetCurrentDirectory(), parameters.image_of_interest);
                    }

                    var similar_images = images_index.SearchSimilarImages(parameters.image_of_interest, parameters.image_hash_algorithm, parameters.color_filter, parameters.min_similarity);
                    SaveSimilarHtml(parameters.image_of_interest, parameters.image_of_interest, parameters.min_similarity, similar_images, images_index);
                }
                catch (Exception e)
                {
                    Console.Error.WriteLine("Error  => Search similar images {0}: \n{1}", parameters.image_of_interest, e.Message);
                }
            }
            else
            {
                // Case :find groups of similar images in a directory

                var seen = new Dictionary <string, byte>();

                foreach (var image in image_files)
                {
                    if (!seen.ContainsKey(image))
                    {
                        try
                        {
                            seen.Add(image, 1);

                            var similar_images = images_index.SearchSimilarImages(image, parameters.image_hash_algorithm, parameters.color_filter, parameters.min_similarity);
                            SaveSimilarHtml(parameters.image_of_interest, image, parameters.min_similarity, similar_images, images_index);
                            foreach (var simage in similar_images.Keys)
                            {
                                if (!seen.ContainsKey(simage))
                                {
                                    seen.Add(simage, 1);
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            Console.Error.WriteLine("Error  => Search similar images {0}: \n{1}", image, e);
                        }
                    }
                }
            }

            stopWatch.Stop();
            TimeSpan ts_search = stopWatch.Elapsed;

            PrintElapsedTime(ts_search);
        }