用paddleocr在识别一张4500×4000像素的表格时出现了部分图片直接黑了,识别效果不好,但是把图片分割成小图片就可以非常清晰的识别,并输出Excel,请问有没有办法能直接识别全图,或者能一块一块的识别并输出整个表格。
针对问题,建议可以考虑将整张表格分成若干小图,然后对每个小图进行识别和导出,最后将所有小图的结果合并成完整的表格。具体步骤如下:
代码示例:
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)
代码示例:
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)
代码示例:
# 合并所有小图的识别结果
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文件和文本文件中。