知识图谱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文件。
如果非标准(我是横平竖直的电脑截图)图片文件,请自行修改判别算法
相关文章:
知识图谱07——图片中表格开源ocr识别
对比了多种ocr识别算法,最终选择了百度paddle官方的ocr算法 在所在的虚拟环境下运行 pip install paddleocr --userfrom paddleocr import PaddleOCR import os import csv# 创建 PaddleOCR 对象 ocr PaddleOCR(use_gpuTrue) # 无gpu时选择False# 指定图片文件夹…...
每日一练2023.12.4——正整数【PTA】
一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]2 对应 arr[2]1,index[1]0 对应 arr[0]8,index[2]3 对应 arr[3]0,以此类推…… 很容易得到电话号码是18013…...
golang之net/http模块学习
文章目录 开启服务开启访问静态文件获取现在时间按时间创建一个空的json文件按时间创建一个固定值的json文件 跨域请求处理输出是json 开启服务 package mainimport ("fmt""net/http" )//路由 func handler(w http.ResponseWriter, r *http.Request){fmt.…...
Python中format函数用法
嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 format优点 format是python2.6新增的一个格式化字符串的方法,相对于老版的%格式方法,它有很多优点。 1.不需要理会数据类型的问题&#…...
Android 断点调试
Android 调试 https://developer.android.google.cn/studio/debug?hlzh-cn 调试自己写的代码(不在Android源码) 点击 Attach debugger to Android process 图标 需要在添加断点界面手动输入函数名 但也可以不手动,有个技巧可以new 空proje…...
对抗神经网络 CGAN实战详解 完整数据代码可直接运行
代码视频讲解: 中文核心项目:对抗神经网络 CGAN实战详解 完整代码数据可直接运行_哔哩哔哩_bilibili 运行图: 完整代码: from keras.layers import Input, Dense, Reshape, Flatten, Dropout, multiply from keras.layers import BatchNormalization, Activation, Embedd…...
LeetCode417. Pacific Atlantic Water Flow
文章目录 一、题目二、题解 一、题目 There is an m x n rectangular island that borders both the Pacific Ocean and Atlantic Ocean. The Pacific Ocean touches the island’s left and top edges, and the Atlantic Ocean touches the island’s right and bottom edges…...
Python字符串模糊匹配工具:TheFuzz 库详解
更多资料获取 📚 个人网站:ipengtao.com 在处理文本数据时,常常需要进行模糊字符串匹配来找到相似的字符串。Python的 TheFuzz 库提供了强大的方法用于解决这类问题。本文将深入介绍 TheFuzz 库,探讨其基本概念、常用方法和示例代…...
Golang中WebSocket和WSS的支持
引言 WebSocket是一种在单个TCP连接上进行全双工通信的协议,它为实时通信提供了一种简单而强大的方式。而WSS(WebSocket Secure)是一种通过加密的方式使用WebSocket的协议,可以在安全的传输层上进行通信。本文将探讨Golang中WebS…...
亚马逊云科技re:Invent大会,助力安全构建规模化生成式AI应用
2023亚马逊云科技re:Invent全球大会进入第三天,亚马逊云科技数据和人工智能副总裁Swami Sivasubramanian博士在周三的主题演讲中,为大家带来了关于亚马逊云科技生成式AI的最新能力、面向生成式AI时代的数据战略以及借助生成式AI应用提高生产效率的精彩分…...
价差后的几种方向,澳福如何操作才能盈利
在价差出现时,澳福认为会出现以下几种方向。 昂贵资产的贬值和便宜资产的平行升值。昂贵的资产贬值,而便宜的资产保持不变。昂贵资产的贬值和便宜资产的平行贬值,但昂贵资产的贬值速度更快,超过便宜资产。更贵的一对的进一步升值和…...
【Java】类和对象之超级详细的总结!!!
文章目录 前言1. 什么是面向对象?1.2面向过程和面向对象 2.类的定义和使用2.1什么是类?2.2类的定义格式2.3类的实例化2.3.1什么是实例化2.3.2类和对象的说明 3.this引用3.1为什么会有this3.2this的含义与性质3.3this的特性 4.构造方法4.1构造方法的概念4…...
机器学习的复习笔记3-回归的细谈
一、回归的细分 机器学习中的回归问题是一种用于预测连续型输出变量的任务。回归问题的类型和特点如下: 线性回归(Linear Regression):线性回归是回归问题中最简单的一种方法。它假设自变量与因变量之间存在线性关系,…...
Git常用命令#切换分支
要在 Git 中切换分支,你可以使用 git checkout 命令。 a.创建新分支并切换到该分支 如果你想要创建一个新分支并立即切换到该分支,可以使用以下命令: git checkout -b 新分支名这会创建一个名为 新分支名 的新分支,并将你的工作目…...
【qml入门教程系列】:qml property使用介绍
作者:令狐掌门 技术交流QQ群:675120140 博客地址:https://mingshiqiang.blog.csdn.net/ 文章目录 属性的定义property基本用法属性变更事件通知属性绑定属性别名只读属性默认属性 default property访问和修改属性方式1:使用setProperty方法方式2:使用QQmlContext设置属性自定…...
pbootcms建站
pbootcms建站 一、下载pbootcms二、安装1、进入宝塔面在网站栏,新建站点,将该址里面文件全部清再将下载的pbootcms上传至该地址。 三、修改关联数据库1、在根目录下/config打开database.php照如下修改这里我使用mysqli数据库。修改并使用自已创建的数据库…...
Spring的事务传播行为
文章目录 说一下Spring的事务传播行为 今天来和大家聊聊spring中使用的事务传播行为, 说一下Spring的事务传播行为 spring事务的传播行为说的是,当多个事务同时存在的时候,spring如何处理这些事务的行为。 ① PROPAGATION_REQUIRED…...
04_网络编程
网络编程 什么是网络编程 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的) java.net.* 包下提供了网络编程的解决方案 通信的基本架构 CS 架构(Client 客户端 / Server 服务端)BS 架构(…...
【五分钟】熟练使用numpy.cumsum()函数(干货!!!)
引言 numpy.cumsum()函数用于计算输入数组的累积和。当输入是多维数组时,numpy.cumsum()函数可以沿着指定轴计算累积和。 计算一维数组的累计和 代码如下: # 计算一维数组的累计和 tmp_array np.ones((4,), dtypenp.uint8) # [1, 1, 1, 1] print(&…...
由11月27日滴滴崩溃到近两个月国内互联网产品接二连三崩溃引发的感想
文章目录 知乎文分析微信聊天截图微信公众号 滴滴技术 发文k8s 官方文档滴滴官方微博账号 近两个月国内互联网产品“崩溃”事件2023-10-23 语雀崩溃2023-11-12 阿里云崩溃2023-11-27 滴滴崩溃2023-12-03 腾讯视频崩溃总结 我的感想 知乎文分析 最近连续加班,打车较…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
