AstarLight/Lets_OCR

这里 coords_left 和 coords_right 并无法保证相等

Closed this issue · 1 comments

此处处理有比较严重的bug, 当 4个点中,有x 或者y 值相同时, coords_left 和 coords_right 就不一定会均分成左右2份。然后后面的处理直接造成 out of index 和有部分坐标被丢失。

if coords[i][0] == coords_x[0] or coords[i][0] == coords_x[1]:

比如: [114.0, 459.0, 119.0, 476.0, 124.0, 476.0, 119.0, 461.0]
得到的
coords_left:: [[114.0, 459.0], [119.0, 476.0], [119.0, 461.0]]
coords_right:: [[124.0, 476.0]]

new_box 变成了: [114.0, 459.0, 119.0, 476.0]

重写后的 sortCoords

def sortCoords(box):
    '''
    将可能随机排列的坐标点,统一重新排列成左下、左上、右上、右下排列
    '''
    coords = [(box[i * 2],box[i*2+1]) for i in range(4)]
    coords.sort(key=lambda x:x[0])
    coords_left = coords[:2]
    coords_right = coords[2:]

    coords_left.sort(key=lambda y:y[1])
    coords_right.sort(key=lambda y:y[1],reverse=True)

    # merge
    new_box = []
    new_box += [list(x) for x in coords_left]
    new_box += [list(x) for x in coords_right]

    # 二维转一维
    new_box = [i for item in new_box for i in item]
    # print('coords_left::',coords_left)
    # print('coords_right::',coords_right)
    return new_box