Esempio n. 1
0
        private void LoadMatchPages()
        {
            string[] directoryEntries = Directory.GetDirectories(MatchPagesDirectory);

            foreach (var f in directoryEntries)
            {
                string directoryName = Utils.GetFileNameInFullEntry(f, true);
                Console.WriteLine(directoryName + " " + f);

                string pageName = directoryName;

                var matchPage = new MatchPage(f, pageName);
                _matchPages.Add(pageName, matchPage);


                foreach (var p in matchPage.UIRects)
                {
                    _allUIRects[p.Key] = p.Value;
                }
            }


            directoryEntries = Directory.GetDirectories(SlicedPagesDirectory);

            foreach (var f in directoryEntries)
            {
                string directoryName = Utils.GetFileNameInFullEntry(f, true);
                Console.WriteLine(directoryName + " " + f);

                string pageName = directoryName;

                var matchPage = new SlicedPage(f, pageName);
                _slicedPages.Add(pageName, matchPage);
            }
        }
Esempio n. 2
0
        private void ScoreAllMatchPages(Mat mat)
        {
            string mainLog       = "--------------------------ScoreAllMatchPages-----------------------------\n";
            string maxPageName   = Globals.UnknownPage;
            double maxSimilarity = 0.0f;

            MatchPage maxPage = null;
            DateTime  start   = DateTime.Now;

            MatOfFloat descriptors = null;

            _keypoints = null;
            Mat gray = null;

            FastMatchSample.FastDescriptor(mat, out descriptors, out _keypoints, out gray);
            //FastMatchSample.SiftDescriptor(mat, out descriptors, out keypoints, out gray);

            double dissimilarity;
            double similarity;
            string log;

            if (_currentPageName == Globals.UnknownPage)
            {
                foreach (var p in _matchPages)
                {
                    var page = p.Value;

                    int score = page.PageScore(descriptors, out dissimilarity, out similarity, out log);

                    if (_log)
                    {
                        mainLog += log;
                    }

                    similarity = page.AdditionalCalcSimilarity(mat, similarity);

                    if (similarity > maxSimilarity)
                    {
                        maxSimilarity = similarity;
                        maxPageName   = p.Value.PageName;
                        maxPage       = page;
                    }
                }
            }
            else
            {
                var rPages = _matchPages[_currentPageName].RelatedPages;

                foreach (var p in rPages)
                {
                    if (!_matchPages.ContainsKey(p))
                    {
                        Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!! no Page!!!!!!!!!!!!!!!!!!!!!! [" + p + "]");
                        continue;
                    }

                    var page = _matchPages[p];

                    int score = page.PageScore(
                        descriptors, out dissimilarity, out similarity, out log);

                    if (_log)
                    {
                        mainLog += log;
                    }


                    similarity = page.AdditionalCalcSimilarity(mat, similarity);

                    if (similarity > maxSimilarity)
                    {
                        maxSimilarity = similarity;
                        maxPageName   = page.PageName;
                        maxPage       = page;
                    }
                }
            }


            if (RenderImageProcess)
            {
                if (maxPage != null)
                {
                    maxPage.RenderKeyPoints();
                }

                Utils.RenderKeyPoints(Globals.ImShowCurrentPageName, mat, _keypoints);
            }
            else
            {
                Cv2.DestroyWindow(Globals.ImShowMaxMatchPageName);
                Cv2.DestroyWindow(Globals.ImShowCurrentPageName);
            }


            DateTime end  = DateTime.Now;
            var      time = (end - start).TotalMilliseconds;

            if (maxSimilarity > 250.0f)
            {
                ChangePage(maxPageName);
            }
            else
            {
                ChangePage(Globals.UnknownPage);
            }


            if (_log /*&& _prevPageName != _currentPageName*/)
            {
                mainLog += "\n[" + _currentPageName + "]  maxSimilarity : " + maxSimilarity + "  total time : " + time + "\n";
                mainLog += "-------------------------------------------------------------------------\n\n";
                Console.WriteLine(mainLog);
            }
        }