def __init__(self, name, getter, setter, caller): Element.__init__(self, name) self.__may_set_back = False self.__initialized = False self.__path = "" self.__getter = getter self.__setter = setter self.__caller = caller self.__bind = "" self._register_property("bind", TYPE_STRING, self._setp_bind, None, "", doc = "Binds the value to an object property") self._register_property("callback", TYPE_STRING, self._setp, self._getp, None, doc = "Callback function") self._register_property("help", TYPE_STRING, self._setp, self._getp, "", doc = "Tooltip text") self._register_property("label", TYPE_STRING, self._setp_label, self._getp, "", doc = "Description label text") self._register_property("enabled", TYPE_BOOL, self._setp_enabled, self._getp, True, doc = "Whether the widget is enabled")
def incorporate(img_path, compo_path, text_path, output_root, params, resize_by_height=None, show=False, wait_key=0): org = cv2.imread(img_path) compos = [] texts = [] background = None for compo in json.load(open(compo_path, 'r'))['compos']: if compo['class'] == 'Background': background = compo continue element = Element((compo['column_min'], compo['row_min'], compo['column_max'], compo['row_max']), compo['class']) compos.append(element) for text in json.load(open(text_path, 'r'))['compos']: element = Element((text['column_min'], text['row_min'], text['column_max'], text['row_max']), 'Text') texts.append(element) org_resize = resize_img_by_height(org, resize_by_height) draw_bounding_box_class(org_resize, compos, show=show, name='ip', wait_key=wait_key) draw_bounding_box(org_resize, texts, show=show, name='ocr', wait_key=wait_key) compos_merged = reclassify_text_by_ocr(org_resize, compos, texts) # compos_merged = merge_redundant_corner(org_resize, compos_merged) # draw_bounding_box_class(org_resize, compos_merged, name='text', show=show, wait_key=wait_key) # merge words as line compos_merged = merge_intersected_compos(org_resize, compos_merged, max_gap=(params['max-word-inline-gap'], 0), merge_class='Text') draw_bounding_box_class(org_resize, compos_merged, name='merged line', show=show, wait_key=wait_key) # merge lines as paragraph compos_merged = merge_intersected_compos(org_resize, compos_merged, max_gap=(0, params['max-line-gap']), merge_class='Text') # draw_bounding_box_class(org_resize, compos_merged, name='merged paragraph', show=show) # clean compos intersected with paragraphs compos_merged = rm_compos_in_text(compos_merged) compos_merged = merge_label_with_comp(compos_merged) board = draw_bounding_box_class(org_resize, compos_merged, name='merged paragraph', is_return=True, show=show, wait_key=wait_key) # draw_bounding_box_non_text(org_resize, compos_merged, org_shape=org.shape, show=show) compos_json = save_corners_json(output_root, background, compos_merged, org_resize.shape) dissemble_clip_img_fill(pjoin(output_root, 'clips'), org_resize, compos_json) cv2.imwrite(pjoin(output_root, 'result.jpg'), board) print('Merge Complete and Save to', pjoin(output_root, 'result.jpg')) print(time.ctime(), '\n')
def incorporate(img_path, compo_path, text_path, output_root, resize_by_height=None, show=False): org = cv2.imread(img_path) compos = [] texts = [] background = None for compo in json.load(open(compo_path, 'r'))['compos']: if compo['class'] == 'Background': background = compo continue element = Element((compo['column_min'], compo['row_min'], compo['column_max'], compo['row_max']), compo['class']) compos.append(element) for text in json.load(open(text_path, 'r'))['compos']: element = Element((text['column_min'], text['row_min'], text['column_max'], text['row_max']), 'Text') texts.append(element) # bbox_text = refine_text(org, bbox_text, 20, 10) # bbox_text = resize_label(bbox_text, resize_by_height, org.shape[0]) org_resize = resize_img_by_height(org, resize_by_height) draw_bounding_box_class(org_resize, compos, show=show, name='ip') draw_bounding_box(org_resize, texts, show=show, name='ocr') compos_merged = reclassify_text_by_ocr(org_resize, compos, texts) # compos_merged = merge_redundant_corner(org_resize, compos_merged) draw_bounding_box_class(org_resize, compos_merged, name='text', show=show) # compos_merged = merge_text_line(compos_merged) compos_merged = merge_intersected_compos(compos_merged, max_gap=(4, 0)) draw_bounding_box_class(org_resize, compos_merged, name='merged line', show=show) # compos_merged = merge_paragraph(org_resize, compos_merged) compos_merged = merge_intersected_compos(compos_merged, max_gap=(0, 1)) board = draw_bounding_box_class(org_resize, compos_merged, name='merged paragraph', show=show) draw_bounding_box_non_text(org_resize, compos_merged, org_shape=org.shape, show=show) compos_json = save_corners_json(pjoin(output_root, 'compo.json'), background, compos_merged, org_resize.shape) dissemble_clip_img_fill(pjoin(output_root, 'clips'), org_resize, compos_json) cv2.imwrite(pjoin(output_root, 'result.jpg'), board) print('Merge Complete and Save to', pjoin(output_root, 'result.jpg')) print(time.ctime(), '\n') if show: cv2.destroyAllWindows()
def __init__(self, name, parent): # the actions and their associated calls self.__actions = {} # the index path of this target self.__index_path = [] # the parent of this target self.__parent = parent # the display of this target self.__display = parent._get_display() # list of watch bindings for being able to unbind the sensor again # FIXME: remove eventually :) self.__watch_bindings = [] Element.__init__(self, name) self._register_property("event", TYPE_OBJECT, None, self._getp) self._register_property("index-path", TYPE_INT, None, self._getp) self._register_property("watch", TYPE_LIST, self._setp_watch, None) if (parent and not self.is_standalone()): self.__index = parent.get_next_child_index() self.__index_path = parent.get_index_path() else: self.__index = -1 self.__index_path = [] if (not self.is_standalone()): self.add_observer(parent.child_observer) if (self.__index != -1): self.__index_path.append(self.__index) if (self.__index_path): self._setp("index-path", self.__index_path[:]) else: self._setp("index", [])