[WIP] Refactoring meta-detection
This commit is contained in:
parent
72bc52dc7b
commit
8327794685
@ -1,15 +1,12 @@
|
||||
from functools import reduce, partial
|
||||
from itertools import compress
|
||||
from operator import __and__
|
||||
from typing import Iterable
|
||||
|
||||
import cv2
|
||||
import numpy as np
|
||||
from funcy import lmap, compose, rcompose
|
||||
from funcy import lmap, compose, rcompose, first, lkeep
|
||||
|
||||
from cv_analysis.utils.connect_rects import connect_related_rects2
|
||||
from cv_analysis.utils.conversion import box_to_rectangle, rectangle_to_box
|
||||
from cv_analysis.utils.display import show_image
|
||||
from cv_analysis.utils.postprocessing import (
|
||||
remove_included,
|
||||
has_no_parent,
|
||||
@ -45,22 +42,21 @@ def prepare_for_initial_detection(image: np.ndarray):
|
||||
|
||||
|
||||
def __find_segments(image):
|
||||
def to_rectangle_if_valid(contour, hierarchy):
|
||||
return (
|
||||
box_to_rectangle(cv2.boundingRect(contour))
|
||||
if is_likely_segment(contour) and has_no_parent(hierarchy)
|
||||
else None
|
||||
)
|
||||
|
||||
contours, hierarchies = find_contours(image)
|
||||
likely_segments = map(is_likely_segment, contours)
|
||||
without_parents = map(has_no_parent, hierarchies[0])
|
||||
valid_contours = map(__and__, likely_segments, without_parents)
|
||||
contours = compress(contours, valid_contours)
|
||||
|
||||
boxes = map(cv2.boundingRect, contours)
|
||||
rectangles = lmap(box_to_rectangle, boxes)
|
||||
rectangles = lkeep(map(to_rectangle_if_valid, *find_contours(image)))
|
||||
|
||||
return rectangles
|
||||
|
||||
|
||||
def find_contours(image):
|
||||
contours, hierarchies = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
||||
return contours, hierarchies
|
||||
return contours, first(hierarchies)
|
||||
|
||||
|
||||
def is_likely_segment(rect, min_area=100):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user