当前位置: 首页 > news >正文

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

对比了多种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:breakif 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]]) / 4y_avg = sum([point[1] for point in line[0]]) / 4# 寻找或创建相应的行found_row = Falsefor key in lines:if abs(y_avg - key) <= 5:  # 判断是否为同一行lines[key].append((x_avg, text))found_row = Truebreakif 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文件。
如果非标准(我是横平竖直的电脑截图)图片文件,请自行修改判别算法

http://www.lryc.cn/news/252453.html

相关文章:

  • 每日一练2023.12.4——正整数【PTA】
  • golang之net/http模块学习
  • Python中format函数用法
  • Android 断点调试
  • 对抗神经网络 CGAN实战详解 完整数据代码可直接运行
  • LeetCode417. Pacific Atlantic Water Flow
  • Python字符串模糊匹配工具:TheFuzz 库详解
  • Golang中WebSocket和WSS的支持
  • 亚马逊云科技re:Invent大会,助力安全构建规模化生成式AI应用
  • 价差后的几种方向,澳福如何操作才能盈利
  • 【Java】类和对象之超级详细的总结!!!
  • 机器学习的复习笔记3-回归的细谈
  • Git常用命令#切换分支
  • 【qml入门教程系列】:qml property使用介绍
  • pbootcms建站
  • Spring的事务传播行为
  • 04_网络编程
  • 【五分钟】熟练使用numpy.cumsum()函数(干货!!!)
  • 由11月27日滴滴崩溃到近两个月国内互联网产品接二连三崩溃引发的感想
  • Python按要求从多个txt文本中提取指定数据
  • DFT新手教程:VASP中ISIF取值设置
  • pytest自动化框架之allure测试报告的用例描述设置
  • 在编程中遇到的问题总结
  • 【数据库设计和SQL基础语法】--SQL语言概述--SQL的基本结构和语法规则(二)
  • easyexcel多级表头导出各级设置样式(继承HorizontalCellStyleStrategy实现)
  • QMLfor python pyside6
  • 几何教学工具 Sketchpad几何画板 mac软件特色
  • 华清远见嵌入式学习——C++——作业5
  • Java中的类与类之间的关系
  • 全新仿某度文库网站源码/在线文库源码/文档分享平台网站源码/仿某度文库PHP源码