Commit 47149492 authored by dmMaze's avatar dmMaze
Browse files

fix textblock sorting

parent fd54b5ac
Loading
Loading
Loading
Loading
+34 −1
Original line number Diff line number Diff line
@@ -363,6 +363,38 @@ def sort_textblk_list(blk_list: List[TextBlock], im_w: int, im_h: int) -> List[T
    blk_list.sort(key=lambda blk: blk.sort_weight)
    return blk_list

def sort_regions(regions: List[TextBlock], right_to_left=None) -> List[TextBlock]:
    # from manga image translator
    # Sort regions from right to left, top to bottom
    
    nr = len(regions)
    if right_to_left is None and nr > 0:
        nv = 0
        for r in regions:
            if r.vertical:
                nv += 1
        right_to_left = nv / nr > 0
    
    sorted_regions = []
    for region in sorted(regions, key=lambda region: region.center()[1]):
        for i, sorted_region in enumerate(sorted_regions):
            if region.center()[1] > sorted_region.xyxy[3]:
                continue
            if region.center()[1] < sorted_region.xyxy[1]:
                sorted_regions.insert(i + 1, region)
                break

            # y center of region inside sorted_region so sort by x instead
            if right_to_left and region.center()[0] > sorted_region.center()[0]:
                sorted_regions.insert(i, region)
                break
            if not right_to_left and region.center()[0] < sorted_region.center()[0]:
                sorted_regions.insert(i, region)
                break
        else:
            sorted_regions.append(region)
    return sorted_regions

def examine_textblk(blk: TextBlock, im_w: int, im_h: int, sort: bool = False) -> None:
    lines = blk.lines_array()
    middle_pnts = (lines[:, [1, 2, 3, 0]] + lines) / 2
@@ -553,7 +585,8 @@ def group_output(blks, lines, im_w, im_h, mask=None, sort_blklist=True) -> List[
    final_blk_list += merge_textlines(scattered_lines['hor'])
    final_blk_list += merge_textlines(scattered_lines['ver'])
    if sort_blklist:
        final_blk_list = sort_textblk_list(final_blk_list, im_w, im_h)
        # final_blk_list = sort_textblk_list(final_blk_list, im_w, im_h)
        final_blk_list = sort_regions(final_blk_list, )

    for blk in final_blk_list:
        if blk.language != 'ja' and not blk.vertical: