java简单的表格识别

目的

想做个把表格图片直接提取格式化的数据或者excel的小工具。然后在网上找了些实现的思路,和很久很久前做的一个象棋棋盘识别demo(象棋棋谱之棋子识别(三)),大概有个处理的思路了。

先看下效果

前提单表格没有合并和干扰的算出了个demo,话不多说先上效果图。

excel截的图

表格定位识别效果

表格识别效果

只要是线条标记和得到的坐标点进行标记出来的效果。

用到的工具

  • opencv表格识别加切图。
  • paddleocr文字识别(本地编译的dll在win下直接用,linux下编译还不会的后面有时间了会研究下的)。win下编译paddleocr方便java本地调用
  • 识别后就可以对识别数据自己处理了,做成excel的话可以POI;或者直接返回其他格式化的数据。

实现大概思路

网上看到有根据颜色进行处理的那个表格是有背景色的相邻两行表格背景是不同的; 我大概还是之前棋盘的思路就是分割、提取、识别。搞了个demo后感觉表格识别还是要做些定制化的,下面是实现的流程步骤。

  • 0.这里只是简单的普通表格没有单元格合并和表格\处理。
  • 1.用opencv的HoughLinesP进行线条检测
  • 2.得到的线条是个坐标点(x1,y1,x2,y2)
  • 3.根据坐标进行横线和竖线分类
  • 4.横线和竖线进行排序
  • 5.计算交叉点进行切图
  • 6.ocr进行文字识别

遇到的问题

  • 0.opencv每个API的参数控制变量很多的,需要多在网上搜下加上自测看下效果了解下特别的地方。
  • 1.初始线条补偿就是边框没有的话需要自己添加个。
  • 2.过滤因为线条太多需要过滤,需要根据排序后线条的坐标相邻距离需要控制下。
  • 3.后来做测试遇到的问题发现paddleocr对于单字例如大写的一、二识别不到。可能我对使用还不太了解也研究不了。后来搞别的发现对这些单字图片进行特殊处理一下才可以很困惑,有懂得大佬可以给点建议(有问过一些懂得说是单字得识别效果没有多字得好,还有说让det表格识别参数设置为false但是识别效果不行,还有说调参的我不会)。后来处理主要是用了滤波和二值化(用了腐蚀感觉效果还是不行可能不是太熟效果把握不好,后面再做些测试感觉腐蚀应该可以的)。
ini 复制代码
if(null==s||s.length()==0){
    //高斯滤波
    Imgproc.cvtColor(temp, temp,Imgproc.COLOR_BGR2GRAY);
    Imgproc.GaussianBlur(temp, temp, new Size(3, 3), 0, 0);
    //二值化这里第三个参数调到这个位置才有效果 大了有个膨胀的效果
    Imgproc.threshold(temp, temp, 239, 250, Imgproc.THRESH_BINARY);
    Imgcodecs.imwrite(tempPath, temp);
    s=IImageProcess.dta.ImageProcessModel(tempPath,"").replace("\n","");
}
相关推荐
码农BookSea11 分钟前
ReAct:让大模型学会边想边做
后端·ai编程
清心歌19 分钟前
CopyOnWriteArrayList 实现原理
java·开发语言
码农BookSea21 分钟前
10分钟掌握 JSON-RPC 协议,面试加分、设计不踩坑
后端
Java成神之路-40 分钟前
通俗易懂理解 Spring MVC 拦截器:概念、流程与简单实现(Spring系列16)
java·spring·mvc
zhanghongbin0142 分钟前
AI 采集器:Claude Code、OpenAI、LiteLLM 监控
java·前端·人工智能
计算机毕设vx_bysj686944 分钟前
【免费领源码】77196基于java的手机银行app管理系统的设计与实现 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化
java·mysql·智能手机·课程设计
忘梓.44 分钟前
墨色规则与血色节点:C++红黑树设计与实现探秘
java·开发语言·c++
hhh3u3u3u1 小时前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
凤年徐1 小时前
C++手撕红黑树:从0到200行,拿下STL map底层核心
c++·后端·算法
IT_陈寒1 小时前
Python的列表推导式里藏了个坑,差点让我加班到凌晨
前端·人工智能·后端