ocrd_cis/ocropy/binarize.py
def process(self):
        """Binarize (and optionally deskew/despeckle) the pages/regions/lines of the workspace.

        Open and deserialise PAGE input files and their respective images,
        then iterate over the element hierarchy down to the requested
        ``level-of-operation``.

        Next, for each file, crop each segment image according to the layout
        annotation (via coordinates into the higher-level image, or from the
        alternative image), and determine the threshold for binarization and
        the deskewing angle of the segment (up to ``maxskew``). Then despeckle
        by removing connected components smaller than ``noise_maxsize``.
        Finally, apply results to the image and export it as an image file.

        Add the new image file to the workspace along with the output fileGrp,
        and using a file ID with suffix ``.IMG-BIN`` along with further
        identification of the input element.

        Reference each new image in the AlternativeImage of the element.

        Produce a new output file by serialising the resulting hierarchy.
        """
        level = self.parameter['level-of-operation']
        assert_file_grp_cardinality(self.input_file_grp, 1)
        assert_file_grp_cardinality(self.output_file_grp, 1)

        for (n, input_file) in enumerate(self.input_files):
            self.logger.info("INPUT FILE %i / %s", n, input_file.pageId or input_file.ID)
            file_id = make_file_id(input_file, self.output_file_grp)

            pcgts = page_from_file(self.workspace.download_file(input_file))
            self.add_metadata(pcgts)
            page_id = pcgts.pcGtsId or input_file.pageId or input_file.ID # (PageType has no id)
            page = pcgts.get_Page()
                
            page_image, page_xywh, page_image_info = self.workspace.image_from_page(
                page, page_id, feature_filter='binarized')
            if self.parameter['dpi'] > 0:
                zoom = 300.0/self.parameter['dpi']
            elif page_image_info.resolution != 1:
                dpi = page_image_info.resolution
                if page_image_info.resolutionUnit == 'cm':
                    dpi *= 2.54
                self.logger.info('Page "%s" uses %f DPI', page_id, dpi)
                zoom = 300.0/dpi
            else:
                zoom = 1
            
            if level == 'page':
                self.process_page(page, page_image, page_xywh, zoom,
                                  input_file.pageId, file_id)
            else:
                if level == 'table':
                    regions = page.get_TableRegion()
                else: # region
                    regions = page.get_AllRegions(classes=['Text'])
                if not regions:
                    self.logger.warning('Page "%s" contains no text regions', page_id)
                for region in regions:
                    region_image, region_xywh = self.workspace.image_from_segment(
                        region, page_image, page_xywh, feature_filter='binarized')
                    if level == 'region':
                        self.process_region(region, region_image, region_xywh, zoom,
                                            input_file.pageId, file_id + '_' + region.id)
                        continue
                    lines = region.get_TextLine()
                    if not lines:
                        self.logger.warning('Page "%s" region "%s" contains no text lines',
                                            page_id, region.id)
                    for line in lines:
                        line_image, line_xywh = self.workspace.image_from_segment(
                            line, region_image, region_xywh, feature_filter='binarized')
                        self.process_line(line, line_image, line_xywh, zoom,
                                          input_file.pageId, region.id,
                                          file_id + '_' + region.id + '_' + line.id)

            # update METS (add the PAGE file):
            file_path = os.path.join(self.output_file_grp, file_id + '.xml')
            pcgts.set_pcGtsId(file_id)
            out = self.workspace.add_file(
                ID=file_id,
                file_grp=self.output_file_grp,
                pageId=input_file.pageId,
                local_filename=file_path,
                mimetype=MIMETYPE_PAGE,
                content=to_xml(pcgts))
            self.logger.info('created file ID: %s, file_grp: %s, path: %s',
                             file_id, self.output_file_grp, out.local_filename)
Binarize (and optionally deskew/despeckle) the pages/regions/lines of the workspace.

        Open and deserialise PAGE input files and their respective images,
        then iterate over the element hierarchy down to the requested
        ``level-of-operation``.

        Next, for each file, crop each segment image according to the layout
        annotation (via coordinates into the higher-level image, or from the
        alternative image), and determine the threshold for binarization and
        the deskewing angle of the segment (up to ``maxskew``). Then despeckle
        by removing connected components smaller than ``noise_maxsize``.
        Finally, apply results to the image and export it as an image file.

        Add the new image file to the workspace along with the output fileGrp,
        and using a file ID with suffix ``.IMG-BIN`` along with further
        identification of the input element.

        Reference each new image in the AlternativeImage of the element.

        Produce a new output file by serialising the resulting hierarchy.
        
Binarize (and optionally deskew/despeckle) the pages/regions/lines of the workspace.
Open and deserialise PAGE input files and their respective images,
then iterate over the element hierarchy down to the requested
``level-of-operation``.

Next, for each file, crop each segment image according to the layout
annotation (via coordinates into the higher-level image, or from the
alternative image), and determine the threshold for binarization and
the deskewing angle of the segment (up to ``maxskew``). Then despeckle
by removing connected components smaller than ``noise_maxsize``.
Finally, apply results to the image and export it as an image file.

Add the new image file to the workspace along with the output fileGrp,
and using a file ID with suffix ``.IMG-BIN`` along with further
identification of the input element.

Reference each new image in the AlternativeImage of the element.

Produce a new output file by serialising the resulting hierarchy.
Binarize ( and optionally deskew / despeckle ) the pages / regions / lines of the workspace . Open and deserialise PAGE input files and their respective images then iterate over the element hierarchy down to the requested ` ` level - of - operation ` ` . Next for each file crop each segment image according to the layout annotation ( via coordinates into the higher - level image or from the alternative image ) and determine the threshold for binarization and the deskewing angle of the segment ( up to ` ` maxskew ` ` ) . Then despeckle by removing connected components smaller than ` ` noise_maxsize ` ` . Finally apply results to the image and export it as an image file . Add the new image file to the workspace along with the output fileGrp and using a file ID with suffix ` ` . IMG - BIN ` ` along with further identification of the input element . Reference each new image in the AlternativeImage of the element . Produce a new output file by serialising the resulting hierarchy .
def process(self):
        level = self.parameter['level-of-operation']
        assert_file_grp_cardinality(self.input_file_grp, 1)
        assert_file_grp_cardinality(self.output_file_grp, 1)
        for (n, input_file) in enumerate(self.input_files):
            self.logger.info("INPUT FILE %i / %s", n, input_file.pageId or input_file.ID)
            file_id = make_file_id(input_file, self.output_file_grp)
            pcgts = page_from_file(self.workspace.download_file(input_file))
            self.add_metadata(pcgts)
            page_id = pcgts.pcGtsId or input_file.pageId or input_file.ID 
            page = pcgts.get_Page()
            page_image, page_xywh, page_image_info = self.workspace.image_from_page(
                page, page_id, feature_filter='binarized')
            if self.parameter['dpi'] > 0:
                zoom = 300.0/self.parameter['dpi']
            elif page_image_info.resolution != 1:
                dpi = page_image_info.resolution
                if page_image_info.resolutionUnit == 'cm':
                    dpi *= 2.54
                self.logger.info('Page "%s" uses %f DPI', page_id, dpi)
                zoom = 300.0/dpi
            else:
                zoom = 1
            if level == 'page':
                self.process_page(page, page_image, page_xywh, zoom,
                                  input_file.pageId, file_id)
            else:
                if level == 'table':
                    regions = page.get_TableRegion()
                else: 
                    regions = page.get_AllRegions(classes=['Text'])
                if not regions:
                    self.logger.warning('Page "%s" contains no text regions', page_id)
                for region in regions:
                    region_image, region_xywh = self.workspace.image_from_segment(
                        region, page_image, page_xywh, feature_filter='binarized')
                    if level == 'region':
                        self.process_region(region, region_image, region_xywh, zoom,
                                            input_file.pageId, file_id + '_' + region.id)
                        continue
                    lines = region.get_TextLine()
                    if not lines:
                        self.logger.warning('Page "%s" region "%s" contains no text lines',
                                            page_id, region.id)
                    for line in lines:
                        line_image, line_xywh = self.workspace.image_from_segment(
                            line, region_image, region_xywh, feature_filter='binarized')
                        self.process_line(line, line_image, line_xywh, zoom,
                                          input_file.pageId, region.id,
                                          file_id + '_' + region.id + '_' + line.id)
            file_path = os.path.join(self.output_file_grp, file_id + '.xml')
            pcgts.set_pcGtsId(file_id)
            out = self.workspace.add_file(
                ID=file_id,
                file_grp=self.output_file_grp,
                pageId=input_file.pageId,
                local_filename=file_path,
                mimetype=MIMETYPE_PAGE,
                content=to_xml(pcgts))
            self.logger.info('created file ID: %s, file_grp: %s, path: %s',
                             file_id, self.output_file_grp, out.local_filename)
def process ( self ) : level = self . parameter [ 'level-of-operation' ] assert_file_grp_cardinality ( self . input_file_grp , 1 ) assert_file_grp_cardinality ( self . output_file_grp , 1 ) for ( n , input_file ) in enumerate ( self . input_files ) : self . logger . info ( "INPUT FILE %i / %s" , n , input_file . pageId or input_file . ID ) file_id = make_file_id ( input_file , self . output_file_grp ) pcgts = page_from_file ( self . workspace . download_file ( input_file ) ) self . add_metadata ( pcgts ) page_id = pcgts . pcGtsId or input_file . pageId or input_file . ID page = pcgts . get_Page ( ) page_image , page_xywh , page_image_info = self . workspace . image_from_page ( page , page_id , feature_filter = 'binarized' ) if self . parameter [ 'dpi' ] > 0 : zoom = 300.0 / self . parameter [ 'dpi' ] elif page_image_info . resolution != 1 : dpi = page_image_info . resolution if page_image_info . resolutionUnit == 'cm' : dpi *= 2.54 self . logger . info ( 'Page "%s" uses %f DPI' , page_id , dpi ) zoom = 300.0 / dpi else : zoom = 1 if level == 'page' : self . process_page ( page , page_image , page_xywh , zoom , input_file . pageId , file_id ) else : if level == 'table' : regions = page . get_TableRegion ( ) else : regions = page . get_AllRegions ( classes = [ 'Text' ] ) if not regions : self . logger . warning ( 'Page "%s" contains no text regions' , page_id ) for region in regions : region_image , region_xywh = self . workspace . image_from_segment ( region , page_image , page_xywh , feature_filter = 'binarized' ) if level == 'region' : self . process_region ( region , region_image , region_xywh , zoom , input_file . pageId , file_id + '_' + region . id ) continue lines = region . get_TextLine ( ) if not lines : self . logger . warning ( 'Page "%s" region "%s" contains no text lines' , page_id , region . id ) for line in lines : line_image , line_xywh = self . workspace . image_from_segment ( line , region_image , region_xywh , feature_filter = 'binarized' ) self . process_line ( line , line_image , line_xywh , zoom , input_file . pageId , region . id , file_id + '_' + region . id + '_' + line . id ) file_path = os . path . join ( self . output_file_grp , file_id + '.xml' ) pcgts . set_pcGtsId ( file_id ) out = self . workspace . add_file ( ID = file_id , file_grp = self . output_file_grp , pageId = input_file . pageId , local_filename = file_path , mimetype = MIMETYPE_PAGE , content = to_xml ( pcgts ) ) self . logger . info ( 'created file ID: %s, file_grp: %s, path: %s' , file_id , self . output_file_grp , out . local_filename )
Binarize (and optionally deskew/despeckle) the pages/regions/lines of the workspace.
Binarize ( and optionally deskew / despeckle ) the pages / regions / lines of the workspace .
"""Binarize (and optionally deskew/despeckle) the pages/regions/lines of the workspace.

        Open and deserialise PAGE input files and their respective images,
        then iterate over the element hierarchy down to the requested
        ``level-of-operation``.

        Next, for each file, crop each segment image according to the layout
        annotation (via coordinates into the higher-level image, or from the
        alternative image), and determine the threshold for binarization and
        the deskewing angle of the segment (up to ``maxskew``). Then despeckle
        by removing connected components smaller than ``noise_maxsize``.
        Finally, apply results to the image and export it as an image file.

        Add the new image file to the workspace along with the output fileGrp,
        and using a file ID with suffix ``.IMG-BIN`` along with further
        identification of the input element.

        Reference each new image in the AlternativeImage of the element.

        Produce a new output file by serialising the resulting hierarchy.
        """ # (PageType has no id) # region # update METS (add the PAGE file):
self