paddleocr识别表格文字内容,对表格内容进行从左上到右下排序
背景:
使用paddleocr识别表格图片文字内容,但是由于图片拍摄或扫描角度问题,不一定是水平平衡的,可能存在一定的倾斜角度。
所以如果是仅按坐标从左上到右下进行排序的话,可能本来同一行的文字,被切分成了上下行。
因此需要使用阈值来进行近似判断。下面就是一个可用例子。
def sort_top_left_to_bottom_right(coord_list): """ 对识别结果进行预处理,通过阈值进行‘行’划分,实现按区域坐标进行从左上到右下进行排序。 :param coord_list:[ [[[x1,y1],[x2,y2],[x3,y3],[x4,y4]],(识别结果1)],[[区域2坐标组,(识别结果2)],... ] """ # 定义一个阈值,用于判断两个y坐标是否足够接近以被视为同一行 y_threshold = 20 # 可以根据实际情况调整 # 对坐标列表进行初步排序,首先按y1排序,然后按x1排序 pre_sorted = sorted(coord_list, key=lambda item: (item[0][0][1], item[0][0][0])) # 对预排序的列表进行分组和最终排序 final_sorted = [] current_group = [] last_y = None for item in pre_sorted: current_y = item[0][0][1] if last_y is None or abs(current_y - last_y) <= y_threshold: # 如果y坐标足够接近,添加到当前组 current_group.append(item) else: # 如果y坐标相差较大,对当前组按x1排序并添加到最终列表 final_sorted.extend(sorted(current_group, key=lambda x: x[0][0][0])) current_group = [item] last_y = current_y # 处理最后一组 if current_group: final_sorted.extend(sorted(current_group, key=lambda x: x[0][0][0])) return final_sorted