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); } }
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); } }