知识图谱07——图片中表格开源ocr识别

文章详细描述了如何在Python中使用PaddleOCR进行OCR识别,将结果整理为CSV格式,适合处理标准截图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对比了多种ocr识别算法,最终选择了百度paddle官方的ocr算法
在所在的虚拟环境下运行

pip install paddleocr --user
from paddleocr import PaddleOCR
import os
import csv

# 创建 PaddleOCR 对象
ocr = PaddleOCR(use_gpu=True)   # 无gpu时选择False

# 指定图片文件夹和结果保存文件夹的路径
image_folder = '../页面截图/全部截图'
result_folder = '../提取结果/csv/all'

# 确保结果保存文件夹存在
if not os.path.exists(result_folder):
    os.makedirs(result_folder)

# 用于计数处理的图片数量
count = 0
max_count = 2000  # 最多处理的图片数量

# 遍历图片文件夹中的所有图片
for image_file in os.listdir(image_folder):
    if count >= max_count:
        break

    if image_file.endswith(('.png', '.jpg', '.jpeg')):
        image_path = os.path.join(image_folder, image_file)
        results = ocr.ocr(image_path, cls=True)

        # 初始化行数据
        lines = {}
        for line in results[0]:
            # 得到相应文本
            text = line[1][0]

            # 根据您的计算方法计算平均 x 和 y 坐标
            x_avg = sum([point[0] for point in line[0]]) / 4
            y_avg = sum([point[1] for point in line[0]]) / 4

            # 寻找或创建相应的行
            found_row = False
            for key in lines:
                if abs(y_avg - key) <= 5:  # 判断是否为同一行
                    lines[key].append((x_avg, text))
                    found_row = True
                    break

            if not found_row:
                lines[y_avg] = [(x_avg, text)]

        # 排序行和列
        sorted_lines = sorted(lines.items(), key=lambda x: x[0])
        for i, (y, items) in enumerate(sorted_lines):
            sorted_lines[i] = sorted(items, key=lambda x: x[0])

        # 写入 CSV 文件
        result_csv_path = os.path.join(result_folder, os.path.splitext(image_file)[0] + '.csv')
        with open(result_csv_path, 'w', newline='', encoding='utf-8') as csvfile:
            csvwriter = csv.writer(csvfile)
            for items in sorted_lines:  # 修改此处
                csvwriter.writerow([text for _, text in items])

        print(f"结果已保存到 {result_csv_path}")


        count += 1

注:paddleocr反馈回来文字内容以及包含文字的最小矩形四个点坐标。这里由于我的图很标准,我选择将每个字段的xy坐标做一个平均,按照xy进行排序,生成对应的csv文件。
如果非标准(我是横平竖直的电脑截图)图片文件,请自行修改判别算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值