📜  ocr图像表到excel python(1)

📅  最后修改于: 2023-12-03 15:33:16.645000             🧑  作者: Mango

OCR图像表到Excel

在日常工作中,我们经常需要处理大量的文档和数据,其中包括很多表格,而这些表格可能是以图像的形式呈现的,如扫描版PDF,图片等。如果我们需要从这些表格中提取数据进行分析和处理,传统的方法就是手动输入,这既费时又费力,并且容易出错。所以本文介绍了如何使用Python进行OCR(Optical Character Recognition,光学字符识别)扫描图像表格,并将提取的数据存储到Excel中。

步骤

本文主要介绍以下步骤:

  1. OCR扫描图像表格
  2. 提取数据生成DataFrame
  3. 将DataFrame保存到Excel文件
步骤1:OCR扫描图像表格

使用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扫描图像表格的步骤,下面我们需要将图片中的数据提取出来。

步骤2:提取数据生成DataFrame

在本文中,我们假设图像表格中的数据都是有规律的,也就是说它们的结构相同,可以通过坐标来定位数据的位置。在提取数据之前,我们需要先确定表格的结构,包括行数,列数和列名称等。可以使用Python的Pillow库中的ImageDrawImageFont模块来绘制图像表格的结构,以下是代码片段:

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文件。

步骤3:将DataFrame保存到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中的方法,主要包括三个步骤:

  1. OCR扫描图像表格
  2. 提取数据生成DataFrame
  3. 将DataFrame保存到Excel文件

通过本文的介绍,相信读者已经能够基于Python完成将图像中的表格提取,并转化为Excel表格的工作了。