使用TensorFlow识别简单的图像验证码

来源:趣玩责编:网络时间:2024-11-30 15:18:06

首先,因为验证码比较简单,图像也不复杂,都是数字。于是尝试用传统的方法,简单的按照网上的教程自己改了一下,使用了PHP识别。大致流程是进行切割、二值去噪等预处理,然后以字符串数组的形式保存。对传入的图片进行识别后,进行同样的预处理,比较字符串的相似度,选择熟悉度最高的分类。识别率不是很理想(验证码比较简单,应该优化得更好),依稀记得只能超过60%。

由于识别效果不理想,仍能长时间保持目标网站的登录状态。没必要花太多精力在这上面,所以就找到了手动打码服务。简直太便宜了。每个月花费并不多。效果还不错,但是有时候延迟比较高。无论如何,对于我们的生意来说已经足够了。

机器学习潮流来了,我就想能不能用在里面,于是参考了TensorFlow识别手写数字的教程,开始模仿猫和老虎。

什么是TensorFlow

TensorFlow 是Google 开发的机器学习框架。看名字,TensorFlow就是“张量流”。出色地。什么是张量?我对张量的理解是数据。张量有自己的形状,例如0阶张量是标量,1阶张量是向量,2阶张量是矩阵。所以在下面我们将看到TensorFlow 中使用的几乎所有量都定义了它们的形状,因为它们都是张量。

我们可以将TensorFlow 视为一个黑匣子,里面有一些设置管道。给它一些“张量”,它就会吐出一些“张量”。它吐出的就是我们需要的结果。

所以我们需要确定输入什么、吐出什么以及如何设置管道。

使用TensorFlow识别简单的图像验证码

有关更多介绍性概念,请查看Keras 初学者指南» 一些基本概念

为什么使用TensorFlow

没有其他原因,只是因为谷歌的名气大,我也没有多想。首先卷起袖子开始工作。如果你想快速原型化,我建议你看看Keras,它被称为人类设计的机器学习框架,它用户友好,并为机器学习框架提供了几个更高级别的接口。

一般流程

捕获验证码、标注验证码、预处理图像、保存数据集、构建模型、训练、提取模型、使用捕获验证码

这个很简单,任何方法都可以循环下载很多文件,这里不再赘述。我这里下载了750个验证码,用了500个用于训练,剩下的250个用来验证模型效果。

标注验证码

使用TensorFlow识别简单的图像验证码

这里有750个验证码。手动标记每个验证码会很累。这时候我们就可以使用人工编码服务,利用廉价的劳动力来为我们做这件事。手动编码后,保存识别结果。这里没有提供代码。这取决于您使用哪种验证码服务。我相信你很聪明,一定能解决。)

图像预处理

图片信息:这个验证码是68x23,二值化为JPG格式:我确信这个验证码足够简单,在丢失图片的颜色信息后仍然可以很好地识别。并且它可以降低模型的复杂度,因此我们可以对图像进行二值化。也就是说,只有两种颜色,全黑或全白。截取验证码:观察验证码。没有特殊的变形或者粘连,所以我们可以将验证码平均切割成4块,分别进行识别。这样,图像识别模型只需要处理10个类别(如果有字母,那就是36个类别而已)由于验证码外面有边框,所以边框也去掉了。处理结果:16x21、黑白2位数据集,包含输入数据和标签数据、训练数据和测试数据。由于数据量不大,为了简单起见,直接将数据保存为python文件,用于模型调用。不要将其保存为另一个文件,然后使用pandas或其他东西来读取它。

我们输入模型的最终数据形状是[[0,1,0,1,0,1,0,1.],[0,1,0,1,0,1,0,1. ],] 标签数据很特殊。本质上我们是在对输入数据进行分类,因此虽然标签应该是从0 到9 的数字,但这里我们将标签数据格式设置为one-hot 向量[[1,0 ,0,0,0,0,0,0,0 ,0,0],] one-hot向量除了某个数字为1外,其他维度均为0**,如[ 1,0,0,0,0,0,0,0 ,0,0]代表1,[0,1,0,0,0,0,0,0,0,0]代表2。再进一步,这里的one-hot向量实际上代表的是对应数据的概率分为这十类。概率为1 是正确的分类。

构建模型训练

数据准备好了,是时候构建“管道”了。也就是说,你需要告诉TensorFlow:

4.如何评价模型的质量?

使用TensorFlow识别简单的图像验证码

检查训练结果

使用提取模型

我们训练了上面的模型,效果还不错。准确率接近99%,可能比手工编码还要高(获取测试数据时经常返回错误值)。但问题是,如果我想用这个模型进行生产,该怎么办?不可能每次都训练它。这里,我们将使用TensorFlow的模型保存和加载功能。

保存模型

恢复模型

终于

这里我们只是展示如何使用TensorFlow来识别一个简单的验证码,效果还不错。使用机器学习不应被认为是矫枉过正。毕竟模型无脑,省了不少时间。如果需要识别更多扭曲和异常的验证码,可能需要使用卷积神经网络等。图像结构和颜色信息不能丢失。另一方面,当涉及到网站安全时,纯图形验证码可能并不能作为判断是否是机器人的依据。对抗到最后,就变成了这么变态的验证码,哈哈哈。

用户评论

如梦初醒

这太酷了!我之前一直对深度学习很感兴趣,现在终于有机会看到它在实际应用中运作了。

    有13位网友表示赞同!

何年何念

想象一下,我们可以用AI来解决那些烦人的验证码!

    有14位网友表示赞同!

青袂婉约

TensorFlow果然强大!学习这个模型应该很有趣。

    有8位网友表示赞同!

凉凉凉”凉但是人心

图像识别一直是我想深入了解的领域,这篇教程刚好击中了我的痛点。

    有11位网友表示赞同!

泪湿青衫

简单图像验证码?那太容易了!期待更复杂的挑战啊!

    有11位网友表示赞同!

矜暮

这篇文章能让我更好地理解TensorFlow的工作原理吗?

    有9位网友表示赞同!

来自火星的我

看起来很实用,也许我能用这个来保护自己的网站安全。

    有11位网友表示赞同!

米兰

我对人工智能的应用前景很 optimistic,这篇教程让我看到了更多的可能性。

    有19位网友表示赞同!

日久见人心

分享一个问题:图像验证码除了识别文字外,还有其他识别需求吗?

    有14位网友表示赞同!

残花为谁悲丶

我想尝试自己搭建这样一个模型,看看能不能做到比原代码更好的效果。

    有8位网友表示赞同!

空巷

学习TensorFlow的资源很多,但是能把知识点讲得这么清晰的教程太少了!

    有7位网友表示赞同!

作业是老师的私生子

这篇文章讲解的很详细,我作为新手也能看懂。

    有8位网友表示赞同!

一尾流莺

如果将这个方法应用于更复杂图像识别场景会怎么样?

    有13位网友表示赞同!

羁绊你

感觉这个模型的训练过程很有意思,下次可以尝试自己去训练一下。

    有19位网友表示赞同!

空谷幽兰

我觉得这种人工智能技术应用非常广泛,将来在很多领域都会发挥重要作用!

    有11位网友表示赞同!

拽年很骚

这篇教程让我对深度学习有了更深入的了解。

    有17位网友表示赞同!

折木

期待看到更多使用TensorFlow实现图像识别问题的解决方案!

    有5位网友表示赞同!

不离我

如果想进一步扩展,可以尝试使用更高级的图像识别模型吧!

    有13位网友表示赞同!

棃海

这个项目很有实用价值,值得大家认真学习和探讨!

    有17位网友表示赞同!

猜你喜欢
最新游戏更多
热门专题更多
最新资讯更多