chineseocr / table-detect

table detect(yolo) , table line(unet)
MIT License
236 stars 86 forks source link

utils.py模块中的adjust_lines函数存在使得line_to_line函数报分母为0的BUG #20

Closed KevinNuNu closed 1 year ago

KevinNuNu commented 3 years ago

https://github.com/chineseocr/table-detect/blob/92488f30ffaf486d29791aab63802beeb1eaca32/utils.py#L180

稳定触发报错的例子: 1.ColsLines[i] = (189,5,189,92);ColsLines[j] = (202, 92, 202, 396),即(x2,y2) = (189, 92),(x3,y3) = (202, 92),r = sqrt((x2, y2), (x3, y3)) < alph 成立 2.会执行newColsLines.append([x2, y2, x3, y3]),但此处显然[189,92,202,92]是一条横线 3.newColsLines列表里混入横线后,运行到line_to_line函数时,只要与[189,92,202,92]计算的另一条横线y值相同,就会导致fit_line时直线系数A为0 https://github.com/chineseocr/table-detect/blob/92488f30ffaf486d29791aab63802beeb1eaca32/utils.py#L228 4.最后导致分母"A1B2-A2B1"为0报错 https://github.com/chineseocr/table-detect/blob/92488f30ffaf486d29791aab63802beeb1eaca32/utils.py#L255 5.同样adjust_lines函数第152,156,176行这三条分支都会触发上述错误

问题导致原因: RowsLines循环时,两条row_line特殊情况会产生一条垂直的col_line,需要增加判断条件加到newColsLines而非newRowsLines,ColsLines循环同理。

解决方案:增加调整后新增线段是否水平垂直

# 其他情况同理
r = sqrt((x1, y1), (x4, y4))
delta_x = x1 - x4
if r < alph:
    if delta_x == 0.0:
        newColsLines.append([x1, y1, x4, y4])
    else:
        newRowsLines.append([x1, y1, x4, y4])
solofive commented 3 years ago

您好,请问,您遇到过在线条全部检测并准确的情况下,table_ceil.py中8连通区域后的三行代码处理后导致缺线缺格的情况吗,我翻看代码,没找到原因

zhengquanhe commented 2 years ago

您好,请问,您遇到过在线条全部检测并准确的情况下,table_ceil.py中8连通区域后的三行代码处理后导致缺线缺格的情况吗,我翻看代码,没找到原因

我也遇到了相同的问题 请问你是怎么解决的呢

nothing4any commented 2 years ago

@zhengquanhe 找到是找到了,源码里的方法有点碎,得翻好一阵子。不是一个原因导致的,需要debug确认