diff --git a/src/eynollah/eynollah.py b/src/eynollah/eynollah.py index 2cc49e1..19c64f5 100644 --- a/src/eynollah/eynollah.py +++ b/src/eynollah/eynollah.py @@ -8,7 +8,6 @@ document layout analysis (segmentation) with output in PAGE-XML # FIXME: fix all of those... # pyright: reportUnnecessaryTypeIgnoreComment=true # pyright: reportPossiblyUnboundVariable=false -# pyright: reportMissingImports=false # pyright: reportCallIssue=false # pyright: reportOperatorIssue=false # pyright: reportUnboundVariable=false @@ -50,16 +49,9 @@ import statistics tf_disable_interactive_logs() -import tensorflow as tf -# warnings.filterwarnings("ignore") -from tensorflow.python.keras import backend as K -from tensorflow.keras.models import load_model -# use tf1 compatibility for keras backend -from tensorflow.compat.v1.keras.backend import set_session -from tensorflow.keras import layers -from tensorflow.keras.layers import StringLookup +import tensorflow as tf # type: ignore try: - import torch + import torch # type: ignore except ImportError: torch = None try: @@ -175,7 +167,6 @@ class Eynollah: self.enable_plotting = enable_plotting self.allow_enhancement = allow_enhancement self.curved_line = curved_line - self.textline_light = textline_light self.full_layout = full_layout self.tables = tables self.right2left = right2left @@ -3706,13 +3697,28 @@ class Eynollah: conf_contours_textregions =[0] pcgts = self.writer.build_pagexml_no_full_layout( - cont_page, page_coord, order_text_new, id_of_texts_tot, - all_found_textline_polygons, page_coord, [], - [], [], [], [], [], [], - slopes, [], [], - cont_page, [], [], + found_polygons_text_region=cont_page, + page_coord=page_coord, + order_of_texts=order_text_new, + id_of_texts=id_of_texts_tot, + all_found_textline_polygons=all_found_textline_polygons, + all_box_coord=page_coord, + polygons_of_images=[], + polygons_of_marginals_left=[], + polygons_of_marginals_right=[], + all_found_textline_polygons_marginals_left=[], + all_found_textline_polygons_marginals_right=[], + all_box_coord_marginals_left=[], + all_box_coord_marginals_right=[], + slopes=slopes, + slopes_marginals_left=[], + slopes_marginals_right=[], + cont_page=cont_page, + polygons_seplines=[], + contours_tables=[], conf_contours_textregion=conf_contours_textregions, - skip_layout_reading_order=True) + skip_layout_reading_order=True + ) self.logger.info("Basic processing complete") return pcgts @@ -3771,8 +3777,26 @@ class Eynollah: self.logger.info("No columns detected - generating empty PAGE-XML") pcgts = self.writer.build_pagexml_no_full_layout( - [], page_coord, [], [], [], [], [], [], [], [], [], [], [], [], [], [], - cont_page, [], []) + found_polygons_text_region=[], + page_coord=page_coord, + order_of_texts=[], + id_of_texts=[], + all_found_textline_polygons=[], + all_box_coord=[], + polygons_of_images=[], + polygons_of_marginals_left=[], + polygons_of_marginals_right=[], + all_found_textline_polygons_marginals_left=[], + all_found_textline_polygons_marginals_right=[], + all_box_coord_marginals_left=[], + all_box_coord_marginals_right=[], + slopes=[], + slopes_marginals_left=[], + slopes_marginals_right=[], + cont_page=cont_page, + polygons_seplines=[], + contours_tables=[] + ) return pcgts #print("text region early in %.1fs", time.time() - t0) @@ -3994,22 +4018,53 @@ class Eynollah: empty_marginals = [[]] * len(polygons_of_marginals) if self.full_layout: pcgts = self.writer.build_pagexml_full_layout( - [], [], page_coord, [], [], [], [], [], [], - polygons_of_images, contours_tables, [], - polygons_of_marginals, polygons_of_marginals, - empty_marginals, empty_marginals, - empty_marginals, empty_marginals, - [], [], [], [], - cont_page, polygons_seplines) + contours_only_text_parent=[], + contours_only_text_parent_h=[], + page_coord=page_coord, + order_of_texts=[], + id_of_texts=[], + all_found_textline_polygons=[], + all_found_textline_polygons_h=[], + all_box_coord=[], + all_box_coord_h=[], + polygons_of_images=polygons_of_images, + contours_tables=contours_tables, + polygons_of_drop_capitals=[], + polygons_of_marginals_left=polygons_of_marginals, + polygons_of_marginals_right=polygons_of_marginals, + all_found_textline_polygons_marginals_left=empty_marginals, + all_found_textline_polygons_marginals_right=empty_marginals, + all_box_coord_marginals_left=empty_marginals, + all_box_coord_marginals_right=empty_marginals, + slopes=[], + slopes_h=[], + slopes_marginals_left=[], + slopes_marginals_right=[], + cont_page=cont_page, + polygons_seplines=polygons_seplines + ) else: pcgts = self.writer.build_pagexml_no_full_layout( - [], page_coord, [], [], [], [], - polygons_of_images, - polygons_of_marginals, polygons_of_marginals, - empty_marginals, empty_marginals, - empty_marginals, empty_marginals, - [], [], [], - cont_page, polygons_seplines, contours_tables) + found_polygons_text_region=[], + page_coord=page_coord, + order_of_texts=[], + id_of_texts=[], + all_found_textline_polygons=[], + all_box_coord=[], + polygons_of_images=polygons_of_images, + polygons_of_marginals_left=polygons_of_marginals, + polygons_of_marginals_right=polygons_of_marginals, + all_found_textline_polygons_marginals_left=empty_marginals, + all_found_textline_polygons_marginals_right=empty_marginals, + all_box_coord_marginals_left=empty_marginals, + all_box_coord_marginals_right=empty_marginals, + slopes=[], + slopes_marginals_left=[], + slopes_marginals_right=[], + cont_page=cont_page, + polygons_seplines=polygons_seplines, + contours_tables=contours_tables + ) return pcgts @@ -4199,24 +4254,55 @@ class Eynollah: if self.full_layout: pcgts = self.writer.build_pagexml_full_layout( - contours_only_text_parent, contours_only_text_parent_h, page_coord, order_text_new, id_of_texts_tot, - all_found_textline_polygons, all_found_textline_polygons_h, all_box_coord, all_box_coord_h, - polygons_of_images, contours_tables, polygons_of_drop_capitals, - polygons_of_marginals_left, polygons_of_marginals_right, - all_found_textline_polygons_marginals_left, all_found_textline_polygons_marginals_right, - all_box_coord_marginals_left, all_box_coord_marginals_right, - slopes, slopes_h, slopes_marginals_left, slopes_marginals_right, - cont_page, polygons_seplines, - conf_contours_textregions, conf_contours_textregions_h) + found_polygons_text_region=contours_only_text_parent, + found_polygons_text_region_h=contours_only_text_parent_h, + page_coord=page_coord, + order_of_texts=order_text_new, + id_of_texts=id_of_texts_tot, + all_found_textline_polygons=all_found_textline_polygons, + all_found_textline_polygons_h=all_found_textline_polygons_h, + all_box_coord=all_box_coord, + all_box_coord_h=all_box_coord_h, + polygons_of_images=polygons_of_images, + contours_tables=contours_tables, + polygons_of_drop_capitals=polygons_of_drop_capitals, + polygons_of_marginals_left=polygons_of_marginals_left, + polygons_of_marginals_right=polygons_of_marginals_right, + all_found_textline_polygons_marginals_left=all_found_textline_polygons_marginals_left, + all_found_textline_polygons_marginals_right=all_found_textline_polygons_marginals_right, + all_box_coord_marginals_left=all_box_coord_marginals_left, + all_box_coord_marginals_right=all_box_coord_marginals_right, + slopes=slopes, + slopes_h=slopes_h, + slopes_marginals_left=slopes_marginals_left, + slopes_marginals_right=slopes_marginals_right, + cont_page=cont_page, + polygons_seplines=polygons_seplines, + conf_contours_textregions=conf_contours_textregions, + conf_contours_textregions_h=conf_contours_textregions_h + ) else: pcgts = self.writer.build_pagexml_no_full_layout( - contours_only_text_parent, page_coord, order_text_new, id_of_texts_tot, - all_found_textline_polygons, all_box_coord, polygons_of_images, - polygons_of_marginals_left, polygons_of_marginals_right, - all_found_textline_polygons_marginals_left, all_found_textline_polygons_marginals_right, - all_box_coord_marginals_left, all_box_coord_marginals_right, - slopes, slopes_marginals_left, slopes_marginals_right, - cont_page, polygons_seplines, contours_tables, - conf_contours_textregions=conf_contours_textregions) + found_polygons_text_region=contours_only_text_parent, + page_coord=page_coord, + order_of_texts=order_text_new, + id_of_texts=id_of_texts_tot, + all_found_textline_polygons=all_found_textline_polygons, + all_box_coord=all_box_coord, + polygons_of_images=polygons_of_images, + polygons_of_marginals_left=polygons_of_marginals_left, + polygons_of_marginals_right=polygons_of_marginals_right, + all_found_textline_polygons_marginals_left=all_found_textline_polygons_marginals_left, + all_found_textline_polygons_marginals_right=all_found_textline_polygons_marginals_right, + all_box_coord_marginals_left=all_box_coord_marginals_left, + all_box_coord_marginals_right=all_box_coord_marginals_right, + slopes=slopes, + slopes_marginals_left=slopes_marginals_left, + slopes_marginals_right=slopes_marginals_right, + cont_page=cont_page, + polygons_seplines=polygons_seplines, + contours_tables=contours_tables, + conf_contours_textregions=conf_contours_textregions + ) return pcgts diff --git a/src/eynollah/writer.py b/src/eynollah/writer.py index 4b444a6..a944c72 100644 --- a/src/eynollah/writer.py +++ b/src/eynollah/writer.py @@ -83,48 +83,91 @@ class EynollahXmlWriter: f.write(to_xml(pcgts)) def build_pagexml_no_full_layout( - self, found_polygons_text_region, - page_coord, order_of_texts, id_of_texts, - all_found_textline_polygons, - all_box_coord, - found_polygons_text_region_img, - found_polygons_marginals_left, found_polygons_marginals_right, - all_found_textline_polygons_marginals_left, all_found_textline_polygons_marginals_right, - all_box_coord_marginals_left, all_box_coord_marginals_right, - slopes, slopes_marginals_left, slopes_marginals_right, - cont_page, polygons_seplines, - found_polygons_tables, - **kwargs): + self, + *, + found_polygons_text_region, + page_coord, + order_of_texts, + id_of_texts, + all_found_textline_polygons, + all_box_coord, + found_polygons_text_region_img, + found_polygons_marginals_left, + found_polygons_marginals_right, + all_found_textline_polygons_marginals_left, + all_found_textline_polygons_marginals_right, + all_box_coord_marginals_left, + all_box_coord_marginals_right, + slopes, + slopes_marginals_left, + slopes_marginals_right, + cont_page, + polygons_seplines, + found_polygons_tables, + ): return self.build_pagexml_full_layout( - found_polygons_text_region, [], - page_coord, order_of_texts, id_of_texts, - all_found_textline_polygons, [], - all_box_coord, [], - found_polygons_text_region_img, found_polygons_tables, [], - found_polygons_marginals_left, found_polygons_marginals_right, - all_found_textline_polygons_marginals_left, all_found_textline_polygons_marginals_right, - all_box_coord_marginals_left, all_box_coord_marginals_right, - slopes, [], slopes_marginals_left, slopes_marginals_right, - cont_page, polygons_seplines, - **kwargs) + found_polygons_text_region=found_polygons_text_region, + found_polygons_text_region_h=[], + page_coord=page_coord, + order_of_texts=order_of_texts, + id_of_texts=id_of_texts, + all_found_textline_polygons=all_found_textline_polygons, + all_found_textline_polygons_h=[], + all_box_coord=all_box_coord, + all_box_coord_h=[], + found_polygons_text_region_img=found_polygons_text_region_img, + found_polygons_tables=found_polygons_tables, + found_polygons_drop_capitals=[], + found_polygons_marginals_left=found_polygons_marginals_left, + found_polygons_marginals_right=found_polygons_marginals_right, + all_found_textline_polygons_marginals_left=all_found_textline_polygons_marginals_left, + all_found_textline_polygons_marginals_right=all_found_textline_polygons_marginals_right, + all_box_coord_marginals_left=all_box_coord_marginals_left, + all_box_coord_marginals_right=all_box_coord_marginals_right, + slopes=slopes, + slopes_h=[], + slopes_marginals_left=slopes_marginals_left, + slopes_marginals_right=slopes_marginals_right, + cont_page=cont_page, + polygons_seplines=polygons_seplines, + ) def build_pagexml_full_layout( - self, - found_polygons_text_region, found_polygons_text_region_h, - page_coord, order_of_texts, id_of_texts, - all_found_textline_polygons, all_found_textline_polygons_h, - all_box_coord, all_box_coord_h, - found_polygons_text_region_img, found_polygons_tables, found_polygons_drop_capitals, - found_polygons_marginals_left,found_polygons_marginals_right, - all_found_textline_polygons_marginals_left, all_found_textline_polygons_marginals_right, - all_box_coord_marginals_left, all_box_coord_marginals_right, - slopes, slopes_h, slopes_marginals_left, slopes_marginals_right, - cont_page, polygons_seplines, - ocr_all_textlines=None, ocr_all_textlines_h=None, - ocr_all_textlines_marginals_left=None, ocr_all_textlines_marginals_right=None, - ocr_all_textlines_drop=None, - conf_contours_textregions=None, conf_contours_textregions_h=None, - skip_layout_reading_order=False): + self, + *, + found_polygons_text_region, + found_polygons_text_region_h, + page_coord, + order_of_texts, + id_of_texts, + all_found_textline_polygons, + all_found_textline_polygons_h, + all_box_coord, + all_box_coord_h, + found_polygons_text_region_img, + found_polygons_tables, + found_polygons_drop_capitals, + found_polygons_marginals_left, + found_polygons_marginals_right, + all_found_textline_polygons_marginals_left, + all_found_textline_polygons_marginals_right, + all_box_coord_marginals_left, + all_box_coord_marginals_right, + slopes, + slopes_h, + slopes_marginals_left, + slopes_marginals_right, + cont_page, + polygons_seplines, + ocr_all_textlines=None, + ocr_all_textlines_h=None, + ocr_all_textlines_marginals_left=None, + ocr_all_textlines_marginals_right=None, + ocr_all_textlines_drop=None, + conf_contours_textregions=None, + conf_contours_textregions_h=None, + skip_layout_reading_order=False, + ): self.logger.debug('enter build_pagexml') # create the file structure