gpt4 book ai didi

python - 使用 tesseract-4.0 进行文本提取时如何保留图像中的所有空格?

转载 作者:行者123 更新时间:2023-12-05 06:18:28 24 4
gpt4 key购买 nike

我正在使用 tesseract-ocr 4.0 从图像中提取表格文本,并将结果导出到 Excel 中,同时保持数据对齐。

我想在提取的表格中保留图像中的所有空格。但是 OCR 会跳过很多前导和尾随空格并将其删除。

我有一些图像,其中某些地方的空白区域出现在表格中。我在 tesseract 中使用了 preserve whitespaces 选项,但 OCR 仍然会跳过很多空格。

在使用 OCR 提取时,有没有办法检测或保留表格中的所有空白区域?或者是否有任何技术可以使用表格中的距离测量来检测空白区域?

附上相同的图像:

enter image description here

最佳答案

我认为您应该将 tesseract 升级到版本 5 并使用“-c preserve_interword_spaces=1”来保留空格。但也许您必须进行后期处理,因为输出可能不符合您的预期。

已编辑

您的问题类似于 this 。但是由于不能直接使用,所以我对它进行了少量的修改。归功于 igrinis。

import cv2
import pytesseract
from pytesseract import Output
import pandas as pd

img = cv2.imread("bsShN.jpg", cv2.COLOR_BGR2GRAY)
gauss = cv2.GaussianBlur(img, (3, 3), 0)

custom_config = r' -l eng --oem 1 --psm 6 -c preserve_interword_spaces=1 -c tessedit_char_whitelist="0123456789- " '
d = pytesseract.image_to_data(gauss, config=custom_config, output_type=Output.DICT)
df = pd.DataFrame(d)

# clean up blanks
df1 = df[(df.conf != '-1') & (df.text != ' ') & (df.text != '')]

# sort blocks vertically
sorted_blocks = df1.groupby('block_num').first().sort_values('top').index.tolist()
for block in sorted_blocks:
curr = df1[df1['block_num'] == block]
sel = curr[curr.text.str.len() > 3]
char_w = (sel.width / sel.text.str.len()).mean()
prev_par, prev_line, prev_left = 0, 0, 0
text = ''
for ix, ln in curr.iterrows():
# add new line when necessary
if prev_par != ln['par_num']:
text += '\n'
prev_par = ln['par_num']
prev_line = ln['line_num']
prev_left = 0
elif prev_line != ln['line_num']:
text += '\n'
prev_line = ln['line_num']
prev_left = 0

added = 0 # num of spaces that should be added
if ln['left'] / char_w > prev_left + 1:
added = int((ln['left']) / char_w) - prev_left
text += ' ' * added
text += ln['text'] + ' '
prev_left += len(ln['text']) + added + 1
text += '\n'
print(text)

这是输出。并非所有数字都能正确识别。有些地方还必须固定空格。

  56     0   232                  35                                    197    19363 
0 3 22 10 12 1586
60 200 165 0 165 11626
44 345 69 50 610 75 54 7593
52 789 191 480 96 618 149 6324
84 71 34 50 8610 20 74 4837
77 680- 131 61 1 71 3000
11 6 103 0 103 9932
2 52 29 3 26 4451
12 65 23 4 19 1626
24 62 100 10 -1 90 6621
497 897 63 360 292 100 0 31 3056
863 1285 331 50 197 50 0 134 17037
0 5 24 2 22 3159
15 131 144 47 97 15070
44 61 86 44 4 112 22 1320
10 90 85 50 135 0 0
3 8 54 11 -9 43 2334

关于python - 使用 tesseract-4.0 进行文本提取时如何保留图像中的所有空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61250577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com