From b540cfd0f2ab596b4dfbc60bace617c4da9a7922 Mon Sep 17 00:00:00 2001 From: Matthias Bisping Date: Mon, 9 Jan 2023 11:38:55 +0100 Subject: [PATCH] [WIP] Refactoring meta-detection --- cv_analysis/layout_parsing.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/cv_analysis/layout_parsing.py b/cv_analysis/layout_parsing.py index 366bfa5..d3cc3de 100644 --- a/cv_analysis/layout_parsing.py +++ b/cv_analysis/layout_parsing.py @@ -13,18 +13,12 @@ from cv_analysis.utils.postprocessing import ( remove_included, has_no_parent, ) - from cv_analysis.utils.rectangle import Rectangle def parse_layout(image: np.array): - original = image.copy() - - image = normalize_to_gray_scale(image) - image = dilate_page_components(image) rectangles = find_segments(image) - rectangles = meta_detection(original, rectangles) rectangles = remove_included(rectangles) rectangles = lmap(rectangle_to_box, rectangles) @@ -35,7 +29,13 @@ def parse_layout(image: np.array): return rectangles -def find_segments(image): +def find_segments(image, meta=1): + + if meta: + original = image.copy() + image = normalize_to_gray_scale(image) + image = dilate_page_components(image) + contours, hierarchies = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) mask1 = map(is_likely_segment, contours) mask2 = map(has_no_parent, hierarchies[0]) @@ -43,6 +43,10 @@ def find_segments(image): contours = compress(contours, mask) rectangles = lmap(compose(box_to_rectangle, cv2.boundingRect), contours) + if meta: + image = meta_detection(original, rectangles) + rectangles = find_segments(image, 0) + return rectangles @@ -67,9 +71,7 @@ def meta_detection(image: np.ndarray, rectangles: Iterable[Rectangle]): image = invert_image(image) image = normalize_to_gray_scale(image) - rectangles = find_segments(image) - - return rectangles + return image def normalize_to_gray_scale(image):