基于OCR识别引擎的识别表格文字并将结果以Excel电子表格的形式原样导出的Android客户端代码

界面截图

实现思路

  1. 对表格图片进行灰度化和二值化处理
  2. 对图像进行倾斜矫正
  3. 进行表格线提取
  4. 进行表格线矫正
  5. 单元格提取
  6. 根据返回的每个单元格的像素位置对原图像进行剪裁
  7. 对剪裁得到的内容逐个进行Ocr识别
  8. 将识别的内容根据返回的位置数据写入Excel表格
其中的1~5步考虑到效率问题,使用C++代码编写,并编译成了so文件在代码中进行调用。

相关代码说明

public class TrimCell {private int LeftTopRow;     //单元格左上角的纵坐标像素位置private int LeftTopColumn;    //单元格左上角的横坐标像素位置private int RightBottomRow;  //单元格右下角的纵坐标像素位置private int RightBottomColumn; //单元格右下角的横坐标像素位置private int StartRow;   //在原表格的开始行private int EndRow;       //在原表格的结束行private int StartColumn;  //在原表格的开始列private int EndColumn;       //在表格的结束列public int getLeftTopRow() {return LeftTopRow;}public void setLeftTopRow(int leftTopRow) {LeftTopRow = leftTopRow;}public int getLeftTopColumn() {return LeftTopColumn;}public void setLeftTopColumn(int leftTopColumn) {LeftTopColumn = leftTopColumn;}public int getRightBottomRow() {return RightBottomRow;}public void setRightBottomRow(int rightBottomRow) {RightBottomRow = rightBottomRow;}public int getRightBottomColumn() {return RightBottomColumn;}public void setRightBottomColumn(int rightBottomColumn) {RightBottomColumn = rightBottomColumn;}public int getStartRow() {return StartRow;}public void setStartRow(int startRow) {StartRow = startRow;}public int getEndRow() {return EndRow;}public void setEndRow(int endRow) {EndRow = endRow;}public int getStartColumn() {return StartColumn;}public void setStartColumn(int startColumn) {StartColumn = startColumn;}public int getEndColumn() {return EndColumn;}public void setEndColumn(int endColumn) {EndColumn = endColumn;}@Overridepublic String toString() {return "TrimCell [LeftTopRow=" + LeftTopRow + ", LeftTopColumn="+ LeftTopColumn + ", RightBottomRow=" + RightBottomRow+ ", RightBottomColumn=" + RightBottomColumn + ", StartRow="+ StartRow + ", EndRow=" + EndRow + ", StartColumn="+ StartColumn + ", EndColumn=" + EndColumn + "]";}
}

根据TrimCell中的第一组位置数据,对原图像进行裁剪:

Bitmap bitmaptemp = Bitmap.createBitmap(bitmap, trimCell.getLeftTopColumn(),
trimCell.getLeftTopRow(),Math.abs(trimCell.getRightBottomColumn()-trimCell.getLeftTopColumn()), trimCell.getRightBottomRow()-trimCell.getLeftTopRow());

根据TrimCell中的第二组位置数据,使用jxl将识别出的内容写入Excel表格中:

Label label = new Label(trimcelllist.get(i).getStartColumn(),
trimcelllist.get(i).getStartRow(), datas.get(i));
ws.addCell(label);

判断是否需要合并单元格:

if(trimcelllist.get(i).getStartRow()!=trimcelllist.get(i).getEndRow() || trimcelllist.get(i).getStartColumn()!=trimcelllist.get(i).getEndColumn())
{ws.mergeCells(trimcelllist.get(i).getStartColumn(),trimcelllist.get(i).getStartRow(), trimcelllist.get(i).getEndColumn(),trimcelllist.get(i).getEndRow());
}

源码地址:

https://github.com/WebberCao/Ocr2Excel

如果有什么错误或者建议欢迎随时指出,大家可以讨论一起进步。如果你觉得学到了东西,请在Github给个Star,谢谢~

基于OCR识别引擎的识别表格文字并将结果以Excel电子表格的形式原样导出的Android客户端代码相关推荐

  1. 核酸结果统计难?130行代码实现基于ocr的核酸截图识别存储Excel(复现代码核查核酸报告)

    来源: 核酸结果统计难?复旦博士生的操作火了https://m.gmw.cn/baijia/2022-04/08/35644611.html 1 程序背景 学校要收核酸截图,汇总太麻烦了,故将OCR整 ...

  2. 微信小程序基于OCR插件实现图文识别(超简单)

    前言 前几天写了一个有关于微信小程序图文识别的功能,当时引用的是第三方百度云api实现的,那微信小程序官方有没有自带的方法或者插件能实现这个功能呢?经实践,还真有那么一个合适的插件,相对比第三方的调用 ...

  3. 基于OpenAPI Specification自动生成Android客户端代码

    OpenAPI Specification(OAS) 无论你从事前端开发还是后端开发,或多或少都听说过Swagger. Swagger Specification 是一种 API Specificat ...

  4. html表格文字方向改变,excel表格怎么改变文字方向

    我们在工作中制作Excel表格的时候,偶尔会使用倒下的文字,让文字倒过来写,这样的操作我们需要怎么做呢?今天和大家分享一下这个小技能,只要一秒钟就可以让你表格中的文字像喝醉了一样,倒下去. 让你Exc ...

  5. html表格文字横向显示,excel表格中如何将竖向文字变成横向的?:代码转换文字...

    excel表格中如何将竖向文字变成横向的? 选中单元格,右键"设置单元格格式"→"对齐"→右边"方向栏"调角度就可以啦 EXCLE代码转换为 ...

  6. html表格文字方向改变,Excel怎么改变单元格文字方向?

    Excel怎么改变单元格文字方向?乍一听好像是左对齐右对齐?其实不是的,你可以歪着头想像一下旋转的文字,和那个差不多,我们接下来要例举的操作便是这整个过程,具体步骤请看下文. Excel怎么改变单元格 ...

  7. 表格文字自动对齐 html6,Excel文字对齐技巧:学会这6种方式,快速整理规范表格...

    [温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力! Excel制作表格中,文字在单元格内对齐的方式,我们经常用到的有居中对齐.居右对齐.居左对齐,对过这些对齐方式,可以编辑出 ...

  8. 服务器里文件表格如何自动备份,Excel电子表格自动备份的两种方法

    对于数据量大.数据重要性高的EXCEL文件,如果出现任何意外导致数据遭受损坏,那么,将是一件严重的问题. 平时我们在操作EXCEL时,应该养成良好的习惯,即让EXCEL自动备份,以防不测. 以下是两种 ...

  9. 办公软件excel表格_office办公软件excel电子表格教程

    获取更多业界资讯和深度好文● 点击蓝字关注我们 ● 点击上方蓝色字体 关注我们 操作方法 01 首先,我们打开我们的电脑,然后我们打开我们电脑上面的excel,之后我们选中图示中的区域: 02 然后我 ...

最新文章

  1. [转帖]什么是光纤的波长?看看有哪些是你不知道的!
  2. MYSQL5.7版本sql_mode=only_full_group_by问题
  3. Linux 进程管理与监控(supervisor and monit)
  4. C/C++知识分享:C++常用内置函数你会几个,使用过几次呢?
  5. 【pytorch】torch.meshgrid()==>常用于生成二维网格,比如图像的坐标点
  6. 【Thinkphp5+Ueditor】Thinkphp5中用Ueditor无法获取内容的问题
  7. 剑指offer-从尾到头打印链表
  8. .gitignore忽略文件提交服务器
  9. 【Python123】汽车迷
  10. [黑苹果]简单修改FB实现显存增加至2048MB修复某些花屏
  11. tdk磁材手册_TDK磁性材料市场.ppt
  12. 深圳大学计算机单招,2016年深圳大学美术单招校考时间
  13. 1007: A+B 输入输出练习VIII
  14. python的matplotlib绘图(双坐标轴)
  15. 深航App劫持微信;Apple News上线首日遭遇各种崩溃;华为P30“望远镜手机”正式发布 | 雷锋早报...
  16. 基于机器学习的自适应超体素分割揭示了人脑中的躯体定位组织
  17. C语言的字符串输入gets()函数
  18. 获得Bert预训练好的中文词向量
  19. termux安装kodbox-方便简单图形界面操作
  20. 圣诞节来了,怎能还没有圣诞树呢 快来为心爱的她送上专属的圣诞礼物叭~

热门文章

  1. Android计步器算法实现(2)
  2. linux查看raid情况工具,使用MegaCli工具查看Raid磁盘阵列状态
  3. 论文格式设置-页面设置、页眉页脚、自动生成目录等
  4. 初识mac 之设置篇
  5. (转)HBase WAL简介
  6. android手机操作手册,数字填图(Android版)操作手册.pdf
  7. java 文件上传漏洞_文件上传漏洞(绕过姿势)
  8. [高通SDM450][Android9.0]外接键盘闪屏以及默认使用虚拟键盘
  9. 深度学习技术系列(1):Mosaic Model — 不良图片检测开源模型
  10. 算法学习之狄克斯特拉算法