Code Duplication    Length = 24-24 lines in 2 locations

ocrd/ocrd/workspace.py 2 locations

@@ 685-708 (lines=24) @@
682
        
683
        alternative_image = None
684
        alternative_images = segment.get_AlternativeImage()
685
        if alternative_images:
686
            # (e.g. from segment-level cropping, binarization, deskewing or despeckling)
687
            if feature_selector or feature_filter:
688
                alternative_image = None
689
                # search from the end, because by convention we always append,
690
                # and among multiple satisfactory images we want the most recent:
691
                for alternative_image in reversed(alternative_images):
692
                    features = alternative_image.get_comments()
693
                    if (all(feature in features
694
                            for feature in feature_selector.split(',') if feature) and
695
                        not any(feature in features
696
                                for feature in feature_filter.split(',') if feature)):
697
                        break
698
                    else:
699
                        alternative_image = None
700
            else:
701
                alternative_image = alternative_images[-1]
702
                features = alternative_image.get_comments()
703
            if alternative_image:
704
                log.debug("Using AlternativeImage %d (%s) for segment '%s'",
705
                          alternative_images.index(alternative_image) + 1,
706
                          features, segment.id)
707
                segment_image = self._resolve_image_as_pil(alternative_image.get_filename())
708
                segment_coords['features'] = features
709
        # transpose, if (still) necessary:
710
        if (orientation and
711
            not 'rotated-%d' % orientation in segment_coords['features'] and
@@ 409-432 (lines=24) @@
406
        
407
        alternative_image = None
408
        alternative_images = page.get_AlternativeImage()
409
        if alternative_images:
410
            # (e.g. from page-level cropping, binarization, deskewing or despeckling)
411
            if feature_selector or feature_filter:
412
                alternative_image = None
413
                # search from the end, because by convention we always append,
414
                # and among multiple satisfactory images we want the most recent:
415
                for alternative_image in reversed(alternative_images):
416
                    features = alternative_image.get_comments()
417
                    if (all(feature in features
418
                            for feature in feature_selector.split(',') if feature) and
419
                        not any(feature in features
420
                                for feature in feature_filter.split(',') if feature)):
421
                        break
422
                    else:
423
                        alternative_image = None
424
            else:
425
                alternative_image = alternative_images[-1]
426
                features = alternative_image.get_comments()
427
            if alternative_image:
428
                log.debug("Using AlternativeImage %d (%s) for page '%s'",
429
                          alternative_images.index(alternative_image) + 1,
430
                          features, page_id)
431
                page_image = self._resolve_image_as_pil(alternative_image.get_filename())
432
                page_coords['features'] = features
433
        
434
        # crop, if (still) necessary:
435
        if (border and