初来 咋到, 很多坑需要自己一个一个过。 就比如数据预处理, 我谷歌了好半天 也没找到现成的轮子, 只好自己写一个了。
参考的论文是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.
网友评论