CV学习笔记(十九):数据集拼接生成

2020-05-12  本文已影响0人  云时之间

上一次使用了text_renderer尝试生成类似于银行卡的数据,但是实际下来效果并不好,我分析了一下原因:

①:text_renderer输出的背景和真实银行卡图片有很大的差异

②:大多数银行卡采用的是突出的字体,text_renderer很难去模拟

分析出以上的问题后,现在的重点开始转换成如何去近似的模拟银行卡数据集,最好的方法就是使用真实的银行卡卡号片段来拼接成数据。

一边说代码,一边捋顺思路:

一:准备数据

首先准备了大概50张的银行卡卡号片段的真实图片,尽量保证每张图片的长度为3-4位,为什么分为3-4位?分析了大多数的银行卡后,发现一个规律:

信用卡卡号:0000 0000 0000 0000

储蓄卡卡号:0000 0000 0000 0000 000

我们用CTPN检测的时候,往往会一段一段的检测,然后拼接起来,这种效果理论上会更好准备的数据如下:

图片的分辨率180*46

现在分析代码:

第一步:选择生成数量,读取图片

这部分注释很清楚,不再赘述

二:裁剪图片,拼接图片

这部分是整个程序之中的关键,我绘制了一个图,结合图来说一下

因为准备的数据集是3-4个字符一张图,DenseNet的输入长度为10时比较合适(具体为什么还没搞清楚),因此拼接的图片字符长度也是10个字符:读取图片

这里用到cut_image函数对image3进行裁剪:

裁剪前后对比:

对图片进行拼接:

拼接后效果:

三:数据增强

因为DenseNet的输入为280*32的图像,并且为减少计算,需要将图像转换为灰度图像

转换为灰度图像后,这里需要使用ImageDataGenerator类,简单的说ImageDataGenerator是keras.processing.image模块里的图片生成器,每次喂进去一个batch_size的数据,然后对这个批次的数据进行样本增强,用来扩充样本数据集的大小,增强模型的泛化能力,更模拟真实情况,比如旋转,缩放,对比度转换等等。

四:划分训练集和测试集

我们将训练集和测试集按照8:2的比例进行划分

运行,数据生成完毕

上一篇下一篇

猜你喜欢

热点阅读