未名企鹅极客 | 人机图灵测试中数字图像处理方法研究

在这里插入图片描述

1
背景
CAPTCHA的英文全称为Completely Automated Public Turing Test to Tell Computers and Humans Apart,译为“全自动区分计算机和人类的图灵测试”。测试手段多种多样,在图像领域用于测试的数字图像,从最初简单的黑白像素字符演变为包括多种颜色、噪声干扰、变形字体、旋转字体、以及实体识别、目标物标记与滑动操作等多种模式。

2
处理过程
图像处理作为预处理过程要完成区域定位、矫正分割,并依靠连通域分析、仿射变换、二值化处理、投影分析等技术实现。本文讨论的CAPTCHA测试,识别主体基本处于图像中央位置,因此省去了定位这一环节。整体处理过程大致需要以下步骤:

  1. 灰度与二值化,必要时配合去除噪声的操作;
  2. 图像分割与矫正;
  3. 识别字符。

刚接触图像处理的阶段,大家心里会有一个疑问:为什么总是要进行二值化处理?其实二值化是一个“化繁为简”的过程,多数情况下关注被研究物已经足够了,而其余信息是多余的。灰度将多通道信息变为单通道,再通过二值化保留关键信息用于后续的处理。

去除噪声的过程有时优先于二值化过程,有时在二值化过程之后,并且依据研究的问题不同,所使用的方法也不相同。本文使用的测试图片包含有效信息较少,因为存在减弱字符像素信息的风险,需谨慎使用滤波等常规方法消除噪声,而实际的去噪过程一般是利用图像自身特征来进行处理,例如根据通道特征、形态学特征、连通性特征等。

经历上述步骤后图像基本只剩下了关键的文本信息,接下来需要将字符文本分离出来。较简单的情形下,字符之间有明显的间隔即相互不连通,只需利用连通区间的检测就能将其分离。而有些情况,字符之间相互重叠覆盖导致较难进行分离,需要具备一定的边界检测能力,所使用的方法视问题而定。

最后利用模型进行字符图像的识别。此部分可以利用开箱即用的工具,也可以编码自建模型,还可以使用一些开放平台的接口能力。

3
实例说明
下面通过几组实例来做进一步说明:

例1
图像为纯字母组合,单个字符由多个轮廓叠加而呈现镂空状态且有两条水平方向干扰曲线。进一步我们不难发现其存在明显的色彩划分,通过RGB通道可以进行特征提取或者说是分离,进而留下有效信息,这里仅保留G通道信息即纯绿色信息。
图片

可能大家会有疑问,图中绿色为干扰曲线的色彩特征,为何要保留噪声的信息?其实RGB三通道中每一个均为灰度通道,取值范围从0~255。绿色特征越明显说明其G通道灰度值越高、越接近白色,因此操作后绿色干扰线接近纯白。

而此时字符像素偏离G通道很远,因此灰度取值很小接近黑色。另一条干扰曲线同样偏离G通道,但灰度值与字符文本有比较明显的离散关系,经过灰度值反转,取适当的阈值进行二值化即可去除噪声并完成字符特征的提取。为了强化文本特征,尽量使其不连通部分相互连接,可进行一次“膨胀”操作,效果如下图所示:
在这里插入图片描述

通过多个样本观察可知,字符之间位置较固定且界限清晰,因此可通过定值切分的方式实现分割,那么剩下的就是字符的识别,这里通过开放平台进行接口调用识别率较好,不再赘述。

例2
图像的显著特点是字符有旋转并伴随短线段噪声。经过灰度、二值化过程后已经消除大部分背景干扰,再对其进行一次“开操作”去掉背景中的零星噪声点,如图所示:
在这里插入图片描述

下面进行图像分割与角度的矫正,首先找到所有连通区间并遍历集合,对每一个连通区域进行矩形拟合,利用矩形的最小外切圆最终确定切分边界,最后使用拟合角度做逆变换的旋转操作,达到分割与矫正的目的,如下所示:
在这里插入图片描述

矫正后的图像与原图相比规范了很多,利用开放平台接口能够得到比较理想的结果。

例3
图片分辨率较低、混合线段噪声与背景细小白噪声,直接使用常规滤波后字符的像素信息减弱比较明显。分析后发现分离HSV通道后,以S通道二值化后的图像为主,辅助V通道分量的一次“腐蚀”结果,再将两项合并进而得到比较干净的处理结果。

最后通过横轴投影积分完成分割。但“干净”只是相对来说,在下图中最后一个图像中还是保留了较明显的横线噪声。在噪声难以清理的情况下,字符文本的识别率会受到很大影响。本例采用自建模型来进行字符的识别。
在这里插入图片描述

模型采用Keras框架(后端为tensorflow)定制神经网络,由包含4个隐含层的全连接网络组成深度学习模型。增减网络层数、调节节点数量会不同程度的影响识别效果,调整参数最终达到自身要求即可,当然也可以应用如SVM、感知机等机器学习模型来做分类器。模型的示例代码如下:
data_train, lable_train = load_data(’\captcha\train’)
model = Sequential()
model.add(Dense(input_dim=15*20, units=1024, activation=‘relu’))
model.add(Dense(units=512, activation=‘relu’))
model.add(Dense(units=256, activation=‘relu’))
model.add(Dense(units=256, activation=‘relu’))
model.add(Dense(units=128, activation=‘relu’))
model.add(Dense(units=30, activation=‘softmax’))
model.compile(loss=‘categorical_crossentropy’,optimizer=‘adam’,metrics=[‘accuracy’])
model.fit(data_train, lable_train, batch_size=50, epochs=15)
在这里插入图片描述

4
总结
图像处理作为前置过程,为后端识别工作提供必要的数据处理能力。而上面讨论的处理过程,仍属于传统图像处理方式,随着深度学习理论与实践的不断更迭,趋势会逐渐过渡到文本行检测与文字识别的整体深度学习阶段。在实际应用中要视情况制定具体的处理方案,善于针对问题进行分析与测试。
文 / Bob
编辑 / Elsie

关于未名企鹅

未名企鹅以“连接健康”为使命,致力于提供生命健康领域的大数据产品和解决方案,帮助客户实现数据驱动的业务增长。

公司创始人邹晓亮先生是北大博士,前腾讯高管。创始团队主要成员均曾在腾讯、阿里巴巴、网易工作多年,同时结合了来自医药行业经验丰富的人士和业内具有丰富经验的专家顾问团队。公司技术团队中有数十位研发人员均来自腾讯,互联网技术基因和产品文化底蕴深厚。

未名企鹅成立以来获得由经纬中国、成为资本、红石诚金分别领投的三轮累计数亿元融资。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值