用paddleocr识别文字比较密集的表格出现识别不全的问题怎么解决?

用paddleocr在识别一张4500×4000像素的表格时出现了部分图片直接黑了,识别效果不好,但是把图片分割成小图片就可以非常清晰的识别,并输出Excel,请问有没有办法能直接识别全图,或者能一块一块的识别并输出整个表格。

  • 请看👉 :基于PaddleOCR无法准确识别小图、长图的问题
  • 以下回答由chatgpt基于相关博客总结生成:

    针对问题,建议可以考虑将整张表格分成若干小图,然后对每个小图进行识别和导出,最后将所有小图的结果合并成完整的表格。具体步骤如下:

    1. 使用OpenCV库将整张表格图片分割成若干小图。可以使用cv2.split()函数来分割图片。

    代码示例:

    import cv2
    
    img = cv2.imread('table.jpg')
    height, width, _ = img.shape
    rows = 3 # 将整张表格分成3行
    cols = 4 # 将整张表格分成4列
    
    # 分割图片成小图
    for i in range(rows):
        for j in range(cols):
            x = int(j * width / cols)
            y = int(i * height / rows)
            w = int(width / cols)
            h = int(height / rows)
            sub_img = img[y:y+h, x:x+w]
            cv2.imwrite(f'{i}_{j}.jpg', sub_img)
    
    1. 使用PaddleOCR库对每个小图进行识别和导出。可以使用ocr()函数来对小图进行识别,并使用to_excel()函数将结果导出到Excel文件中。

    代码示例:

    from paddleocr import PaddleOCR
    import pandas as pd
    
    ocr = PaddleOCR()
    
    result = []
    for i in range(rows):
        row_result = []
        for j in range(cols):
            sub_img = cv2.imread(f'{i}_{j}.jpg')
            ocr_result = ocr.ocr(sub_img)
            text = ''
            for item in ocr_result:
                text += item[1][0]
            row_result.append(text)
        result.append(row_result)
    
    # 将结果导出到Excel文件中
    df = pd.DataFrame(result)
    df.to_excel('result.xlsx', index=False, header=False)
    
    1. 将所有小图的结果合并成完整的表格。可以使用pandas库的concat()函数来合并所有小图的识别结果。

    代码示例:

    # 合并所有小图的识别结果
    result = pd.concat([pd.DataFrame(row) for row in result], axis=1)
    
    # 将所有小图的识别结果合并成完整的表格
    final_result = ''
    for i in range(0, result.shape[0], cols):
        for j in range(result.shape[1]):
            final_result += result.iloc[i:i+rows, j].str.cat(sep=' ') + ' '
        final_result += '\n'
    
    # 将最终结果导出到文本文件中
    with open('final_result.txt', 'w') as f:
        f.write(final_result)
    

    这样就可以将整个表格识别成文本,并将结果导出到Excel文件和文本文件中。