NLP 之 自然场景 文字识别 1 Scene text recognition ICDAR 2003 preprocess

初来 咋到, 很多坑需要自己一个一个过。 就比如数据预处理, 我谷歌了好半天 也没找到现成的轮子, 只好自己写一个了。

参考的论文是An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition.

数据集下载

这个论文里面有 用ICDAR 2003 数据集的测试, 也就是今天的博客的主要内容了。

论文中介绍了有251 scene text images, 严谨的我就来数一数

youngt_05.08.2002 文件夹, 113 个

ryoungt_13.08.2002 文件夹, 134 个

sml_01.08.2002 文件夹, 4个

这样加起来还真是。数据集下载的地方 就是这里啦

http://www.iapr-tc11.org/mediawiki/index.php/ICDAR_2003_Robust_Reading_Competitions

选择 Robust Reading and Text Locating 下载

举个例子,  图片都是这样的。

数据集预处理

这个时候就需要看看那个word.xml文件了, 随便截个图, 观察一下画风

这画风 让学数字电路的我虎躯一阵,决定去谷歌, 看看有没有现成的代码, 可惜谷歌了好久 并没有。 于是乎决定自己写。

这个XML 文件的格式还是很清楚的, imageName 就是文件的路径, 下面的x , y, height, width 就是文字的所在地。  那个 tag 标签 就是对应的 文字内容, 知道了这些 还是觉得自己手写很麻烦, 又去谷歌了。

这个时候发现了强大的xml python package,

这包的具体使用 可以参考如下链接,

https://www.mkyong.com/python/python-read-xml-file-dom-example/

我这个上面的简单代码, 就是用来确认 我能读到 需要的内容, 比如 路径什么的。

接下来我写了两个函数 一个是 isalphanumeric, 一个是inser_split,  这个函数isalphanumeric

主要是用来判断 这个字体内容是不是 数字+字母, 不是就返回false. inser_split 这个呢就是插入 | 用来分开各个字母, 截图如下啦。

接下来就是 crop image and save it

这个写的有点乱, 主要的目的就是用OPENCV 把上面words.xml 指定位置上的文字截图下来, 然后保存到一个文件里, 我这个 就是把所有的裁剪后的图片保存到./crop/里, 根据cv2.imwrite 这个函数 写进去。

这个函数还比较简单, 就是读image 在image2里, 我设置image2 是为了快速debug 遍历一部分图片 , 省着遍历所有图片。

抓image name, 名字通过firstChild.data 得到

抓taggedRectangels,  和taggedRectangle 这两个loop,

然后就是截图 crop, cnt, total_Cnt 的目的主要是为了 确认总数是否正确。 截图 crop image 这个函数

最后又写了csv 文件, 按照  /full/path/to/image2 这个格式写的, 参考注释

这里边有个continue , 主要是论文里说, Ignore images that either contain non-alphanumeric charachters or have less than 3 characters.

图片crop 完了,图片名字格式 就是内容_编号, 效果不错。

写到这里, 数了下截图的个数, 860 cropped images, looks great. 

你可能感兴趣的:(NLP 之 自然场景 文字识别 1 Scene text recognition ICDAR 2003 preprocess)