向AI转型的程序员都关注了这个号????????????

机器学习AI算法工程   公众号:datayx

最近做了个手写汉字简历识别比赛,需要先提取表格中含有指定信息的各个框,再用TensorFlow对框中的信息进行汉字、数字、英文识别。

所有代码获取:

本文相关代码 项目获取方式:

关注微信公众号 datayx  然后回复  简历  即可获取。

AI项目体验地址 https://loveai.tech

网上对表格框的提取的相关资料较少,尤其是Python+OpenCV的实现方面。

整体流程

该算法的主体思路是:通过对旋转、平移校正的表格用开操作提取网格,获取各信息所在的矩形位置;根据各信息对应的大致中心坐标筛选出对应的矩形,进行文字分割后,将汉字、ABO字母、数字分别输入卷积神经网络进行识别,得到的结果进行校验后即写入CSV文件。

程序主要分成九个Python文件:ABO_mix.py实现的是基于卷积神经网络的手写ABO字母识别,chinese_ocr.py实现的是基于卷积神经网络的手写汉字识别,chinese_out.py实现的是对手写汉字、字母的分割,chinese_out_jiguan.py实现的是对手写汉字(籍贯部分)的分割,mnist_recognize.py实现的是基于卷积神经网络的手写数字识别,num_out.py实现的是对手写数字的分割,time_out.py实现的是对手写时间数字的分割,time_recognize.py实现的是基于卷积神经网络的手写时间数字识别,table_choose.py实现的是表格预处理、函数调用与识别结果的写入。

整体的工作量有点大,此篇先介绍如何对表格中各个框进行提取,此部分代码位于table_choose.py文件中的前半部分,本文中摘取部分进行说明,具体可见上文开源Github代码链接。笔者先前用的都是C++版的OpenCV,因为TensorFlow识别部分的代码基于python,为了减少工作量,这次就顺便使用了Python版的OpenCV,需要在OpenCV编译时补全Python项,并复制cv2.so和cv.py文件【重要!否则import cv2会提示找不到module,见https://www.cnblogs.com/freeweb/p/5794447.html】。

如今OpenCV官方的Document里都包含了各API的Python版用法,从C++转换到Python用起来意外的顺手。这里附上官方的在线Document地址,记得选对应版本:https://docs.opencv.org/

该部分的编译环境如下:

(1)Ubuntu16.04 64位 支持utf-8编码

(2)Python2.7

(3)OpenCV3.4.3 (与Python2.7编译通)

(4)Python2.7 numpy模块、PIL模块、logging模块、pickle模块、os模块、random模块、time模块、matplotlib模块、math模块、csv模块

Python+OpenCV校正并提取表格中的各个框的整体代码table_choose.py(其中包含识别部分的功能,提取表格的功能需要摘出来使用)

读取表格图片文件

这段即将test_data文件中的所有文件进行遍历读取,也可注释最下方的两行,并去除docu_num一行的注释,即可对一张图片文件进行反复的读取、处理。

统计图中长横线的斜率来判断整体需要旋转矫正的角度

这段做的是旋转校正操作,先把表格图片转换为灰度图,再用Canny算子提取边缘(灰度+Canny是提取边缘的标准操作)得到如下这张图片edges_whole.jpg

可见,这张表格是倾斜的,需要对表格进行旋转。旋转需要参照物吧?笔者选择用霍夫变换HoughLinesP()对表格中的长直线进行识别并提取。然后再对这些长直线中斜率小于pi/4且大于-pi/4的直线进行筛选,统计它们的斜率平均值。这样除非这张表格的倾斜度超过45度,或者表格中含有人为划的长横线,这个斜率平均值都可以作为校正旋转的角度了。长直线筛选后的图片见下图line_detect4rotation.jpg:

之后便是用getRotationMatrix2D()、warpAffine()函数进行旋转变换,此处笔者拷贝了一份不进行绘图操作的图片(不然都涂花了,干嘛为难自己)。旋转后的表格图片如下image_Rotation.jpg:

通过对表格左下角直角进行识别,将其顶点统一平移矫正至(78,1581)

这段做的是平移校正操作,其中大部分是为了应对数据集中的各种意外情况,譬如表格形式不同。但对于Github中给出的三幅较为统一的图片,核心的操作只有对旋转校正后的表格左下角进行横线、竖线用HoughLinesP()进行提取,归一后求二者的交点。将交点平移至设定好的坐标即可统筹处理所有表格图片。此处对霍夫变换求出的各条直线分别与设定好两个等分点进行距离求解,选出最靠近等分点的横线、竖线作为归一结果。求得交点坐标后用np.array()函数与cv.warpAffine()函数即可完成平移操作。

横线、竖线的交点求得后在旋转后的表格图像上作图如下line_detect_possible_demo.jpg:

分别通过对二值化后的表格用长横条、长竖条内核进行开操作,将表格分别化为全横线与全竖线,叠加后提取交点,即可得到表格中每个矩形的四个顶点

此段是功能实现的核心操作:通过对校正图像进行横向、纵向的投影,并提取直线、直线交点,提取轮廓后通过所需表格框的尺寸数据对交点进行筛选、匹配,即可得到表格中的各个框四个顶点的坐标。此处理对表格中的小框效果拔群,对大型框进行提取可能遇到一框中有多个小框的情况,需要后续加以限制(统计该框内是否有别的顶点)。具体操作是:

对未涂花的原始图像进行灰度变化和自适应阈值的二值化操作adaptiveThreshold(),这样能最大可能地保留表格中的直线,效果如下图th2.jpg:

之后对图像进行先腐蚀erode()后膨胀dilate()的闭操作,腐蚀与膨胀分别使用N*1与1*N的形态学操作中的核进行处理。该操作可以理解为把表格中所有的像素进行横向、纵向的投影,且投影会往原先已存在直线上偏移,而文字状的不构成直线的像素则会在腐蚀操作中被抹消。就像从长条形的横、纵栅格中看表格图片一般。将横向、纵向投影好的图片进行叠加即如下图mask.jpg:

表格被神奇地提取出来了!这一步需要注意,一定要是旋转校正过的图像,因为对于一张倾斜的图像,投影操作会让图像变“正”了,实际上图像并没有被旋转过来,这对后续的坐标提取是致命的。既然已经提取出了表格框,那我们就可以通过bitwise_and()函数提取出表格框中的各个交点,如下图joints.jpg:

接下来即通过findContours()函数寻找图像轮廓,并用contourArea()函数求出各个轮廓的面积,以对过小的轮廓进行排除。通过approxPolyDP()与boundingRect()函数用矩形去包围各个轮廓,即可得到该表格图片中各个矩形框的位置数据。之后通过再次使用findContours()函数遍历图像轮廓,用尺寸数据对矩形框进行筛选即可得到表格中所需的框的集合。在校正图像上画出这个集合里的所有框,如下图table_out.jpg:

矫正后的表格中信息的大致位置各在一定范围内,根据大致位置的坐标点筛选出该表中该信息对应的矩形框具体坐标

既然框都已经被提取出来了,那不是大功告成了吗?

并没有。因为我们还需要对所需要的位置的框进行提取,先前提取出的框又不附带标签。因此我们此处需要做两步:

首先是选择标准图像中所需的框位置的中心点作为这个框的“ID”,标准图像即先前所说的坐标(78,1581)所在的那张图片。上文代码里即选择(700,370)作为“性别”数据的所在框的大致位置。

其次是通过遍历的方式筛选出这个中心点坐标所处在的矩形框的坐标。因为框较大,因此即使校正的不够精准,这种方法一样可以将目标框精准地框出,只要标准图像中的那个大致位置不偏移得太过严重。


阅读过本文的人还看了以下文章:

【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

《美团机器学习实践》_美团算法团队.pdf

《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

python就业班学习视频,从入门到实战项目

2019最新《PyTorch自然语言处理》英、中文版PDF+源码

《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

《深度学习之pytorch》pdf+附书源码

PyTorch深度学习快速实战入门《pytorch-handbook》

【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

《Python数据分析与挖掘实战》PDF+完整源码

汽车行业完整知识图谱项目实战视频(全23课)

李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

《神经网络与深度学习》最新2018版中英PDF+源码

将机器学习模型部署为REST API

FashionAI服装属性标签图像识别Top1-5方案分享

重要开源!CNN-RNN-CTC 实现手写汉字识别

yolo3 检测出图像中的不规则汉字

同样是机器学习算法工程师,你的面试为什么过不了?

前海征信大数据算法:风险概率预测

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

VGG16迁移学习,实现医学图像识别分类工程项目

特征工程(一)

特征工程(二) :文本数据的展开、过滤和分块

特征工程(三):特征缩放,从词袋到 TF-IDF

特征工程(四): 类别特征

特征工程(五): PCA 降维

特征工程(六): 非线性特征提取和模型堆叠

特征工程(七):图像特征提取和深度学习

如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

Machine Learning Yearning 中文翻译稿

蚂蚁金服2018秋招-算法工程师(共四面)通过

全球AI挑战-场景分类的比赛源码(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

python+flask搭建CNN在线识别手写中文网站

中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

长按图片,识别二维码,点关注

中文简历表格提取,手写汉字识别(Python+OpenCV)相关推荐

  1. python手写汉字识别_中文简历表格提取,手写汉字识别(Python+OpenCV)

    原标题:中文简历表格提取,手写汉字识别(Python+OpenCV) 所有代码获取: 简历 网上对表格框的提取的相关资料较少,尤其是Python+OpenCV的实现方面. 整体流程 如今OpenCV官 ...

  2. 数字图像处理二维码识别 python+opencv实现二维码实时识别

    数字图像处理二维码识别 python+opencv实现二维码实时识别 特点: (1)可以实现普通二维码,条形码: (2)解决了opencv输出中文乱码的问题 (3)增加网页自动跳转功能 (4)实现二维 ...

  3. python中提取几列_自己录制的公开课视频中提取字幕(python+opencv+Tesseract-OCR)

    最近在mooc上看了一个公开课:职场英语,用来学习在找工作时或者工作中用到的英语交流技巧,非常不错.由于自己听力不是很好,有的字幕中的单词不认识,并且想记下来便于以后学习.所以想把公开课中的字幕都记录 ...

  4. 机器学习水果识别——python+opencv实现物体特征提取

    文章目录 一.用python+opencv实现物体特征值提取 1.读取图像.转为灰度图像并降噪 2.获取水果轮廓 将最大轮廓画入最开始的img图像并显示 将小于某一规模的轮廓删除 3.提取水果的面积周 ...

  5. php-opencv身份证识别,python opencv实现证件照换底功能

    本文实例为大家分享了python opencv实现证件照换底功能的具体代码,供大家参考,具体内容如下 思路:先转到HSV空间,利用颜色提取背景制作掩模版mask,然后通过按位操作提取人像和制作新背景, ...

  6. python图片识别-Python+Opencv识别两张相似图片

    在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简 ...

  7. python中文模糊关键词提取_用Python给你的文本提取关键词

     对代码.编程感兴趣的可以关注「老K玩代码」公众号和我交流!分享代码.经验.项目和资讯 用Python给你的文本提取关键词 关键词提取是自然语言处理中常见的业务模块; 要实现关键词提取,Python ...

  8. 机器学习苹果识别——python+opencv实现物体特征提取

    以水果为例.要用机器学习来实现水果识别,无论是训练还是识别阶段都需要提取图片中水果的特征值.本篇将讲述如何提取水果的周长.面积.颜色.长度.宽度7个特征值. cv.findContours cv.fi ...

  9. python opencv数字识别_基于模板匹配的手写数字识别(python+opencv)

    智能计算课第一周的实验是做基于模板匹配的手写数字识别,光听见就很感兴趣,于是决定认真做做这个实验,本实验基于python3+opencv的python版本,所用到的知识都比较简单,基本上边学边做,技术 ...

  10. 大数据毕设项目 深度学习火焰检测识别 python opencv

    文章目录 0 前言 1 基于YOLO的火焰检测与识别 2 课题背景 3 卷积神经网络 3.1 卷积层 3.2 池化层 3.3 激活函数: 3.4 全连接层 3.5 使用tensorflow中keras ...

最新文章

  1. 掌握 MySQL 这 19 个骚操作,效率至少提高3倍
  2. 高速信号传输约翰逊 pdf_在PCB板边走高频高速信号线的注意事项
  3. mysql一些原生基本操作
  4. python乘法口诀表-用python打印99乘法口诀表
  5. mysql数据库的字符集问题和存储引擎
  6. MATLAB实战系列(二十七)-数据预处理-PCA主成分分析
  7. jca oracle官方文档,Oracle 官方文档说明
  8. 2.3线性表的链式存储和运算—双向链表
  9. 根据条件控制参数控件是否显示(可用)
  10. c语言 倒计时不清屏_c语言 清屏函数
  11. Win10下Matlab r2018a 64位 中文破解版的安装以及破解方法
  12. 对抗神经网络(python-一维数据)
  13. iOS13beta2版描述文件,修复了,修复了,修复了,可以用描述文件更新了
  14. Spark SQL 创建局部视图和全局视图,以及找不到全局视图的问题解决
  15. 概率论知识回顾(十):二维连续随机变量分布函数和联合密度函数
  16. 【MYSQL】ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  17. 6--目标检测和边界框和锚框
  18. 【观察】华为云连续四年蝉联政务云第一,背后是“长跑选手”实力的印证
  19. 解析S2B2C模式的典型特征,应用S2B2C商城助力医疗器械企业快速发展
  20. HDU 1218(Blurred Vision)

热门文章

  1. 【UmiJS学习】01-快速上手
  2. vbs格式编程教程基础
  3. 65位高校教师接龙晒工资!给打算入高校的研究生们参考!
  4. vivado修改下载器下载速率
  5. 神经网络是模型还是算法,神经网络模型的优势
  6. 《自卑与超越》的读后感作文1600字
  7. Excel·VBA数组冒泡排序函数
  8. 微信小程序人脸识别功能(wx.faceDetect)、带扫脸动画、人脸图片获取(upng.js)及位置展示
  9. idea上maven引用jar出错(The POM for xxx is missing, no dependen)
  10. Java基础——java代码规范详细版