📅  最后修改于: 2023-12-03 15:33:16.645000             🧑  作者: Mango
在日常工作中,我们经常需要处理大量的文档和数据,其中包括很多表格,而这些表格可能是以图像的形式呈现的,如扫描版PDF,图片等。如果我们需要从这些表格中提取数据进行分析和处理,传统的方法就是手动输入,这既费时又费力,并且容易出错。所以本文介绍了如何使用Python进行OCR(Optical Character Recognition,光学字符识别)扫描图像表格,并将提取的数据存储到Excel中。
本文主要介绍以下步骤:
使用Python中的pytesseract
库(需要先安装),可以很容易地识别图像中的字符。我们使用该库来处理图像表格,以下是代码片段:
import pytesseract
from PIL import Image
def image_to_string(img_path):
img = Image.open(img_path)
text = pytesseract.image_to_string(img)
return text
此时,我们已经完成了OCR扫描图像表格的步骤,下面我们需要将图片中的数据提取出来。
在本文中,我们假设图像表格中的数据都是有规律的,也就是说它们的结构相同,可以通过坐标来定位数据的位置。在提取数据之前,我们需要先确定表格的结构,包括行数,列数和列名称等。可以使用Python的Pillow
库中的ImageDraw
和ImageFont
模块来绘制图像表格的结构,以下是代码片段:
from PIL import Image, ImageDraw, ImageFont
def draw_grid(img_path, data):
img = Image.open(img_path)
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("arial.ttf", 14)
# 画横线
for i in range(data['rows'] + 1):
y = data['top'] + i * data['row_height']
draw.line((data['left'], y, data['right'], y), fill=128)
# 画竖线
for i in range(data['cols'] + 1):
x = data['left'] + i * data['col_width']
draw.line((x, data['top'], x, data['bottom']), fill=128)
# 写列名
for i, col in enumerate(data['col_names']):
x = data['left'] + i * data['col_width'] + data['col_width'] / 2
y = data['top'] + data['row_height'] / 2
draw.text((x, y), col, font=font, fill=0)
img.show()
通过上述代码创建的结构图,我们就能够很容易地定位到每个单元格的坐标。接下来,我们需要根据坐标提取数据,这时候可以使用Python的Pillow和Pandas库来处理。具体代码如下:
import pandas as pd
from PIL import Image, ImageDraw, ImageFont
def image_to_dataframe(img_path, data):
img = Image.open(img_path)
font = ImageFont.truetype("arial.ttf", 14)
rows_data = []
for i in range(data['rows']):
row = []
for j in range(data['cols']):
# 提取单元格中的数据
x1 = data['left'] + j * data['col_width']
y1 = data['top'] + i * data['row_height']
x2 = x1 + data['col_width']
y2 = y1 + data['row_height']
cell_img = img.crop((x1, y1, x2, y2))
cell_text = pytesseract.image_to_string(cell_img)
row.append(cell_text)
rows_data.append(row)
# 生成DataFrame
df = pd.DataFrame(rows_data, columns=data['col_names'])
return df
此时,我们已经完成了图片中数据的提取,下面就是将数据保存到Excel文件。
使用Python的Pandas库,我们可以将数据存储到Excel文件中。以下是代码片段:
import pandas as pd
def dataframe_to_excel(df, file_path):
df.to_excel(file_path, index=False)
完成上述步骤后,就可以将图像表格中的数据提取出来并存储到Excel中了。
本文主要介绍了使用Python进行OCR扫描图像表格,并将提取的数据存储到Excel中的方法,主要包括三个步骤:
通过本文的介绍,相信读者已经能够基于Python完成将图像中的表格提取,并转化为Excel表格的工作了。