2024-11-30 15:18:06 | 来源: 互联网整理
首先,因为验证码比较简单,图像也不复杂,都是数字。于是尝试用传统的方法,简单的按照网上的教程自己改了一下,使用了PHP识别。大致流程是进行切割、二值去噪等预处理,然后以字符串数组的形式保存。对传入的图片进行识别后,进行同样的预处理,比较字符串的相似度,选择熟悉度最高的分类。识别率不是很理想(验证码比较简单,应该优化得更好),依稀记得只能超过60%。
由于识别效果不理想,仍能长时间保持目标网站的登录状态。没必要花太多精力在这上面,所以就找到了手动打码服务。简直太便宜了。每个月花费并不多。效果还不错,但是有时候延迟比较高。无论如何,对于我们的生意来说已经足够了。
机器学习潮流来了,我就想能不能用在里面,于是参考了TensorFlow识别手写数字的教程,开始模仿猫和老虎。
什么是TensorFlow
TensorFlow 是Google 开发的机器学习框架。看名字,TensorFlow就是“张量流”。出色地。什么是张量?我对张量的理解是数据。张量有自己的形状,例如0阶张量是标量,1阶张量是向量,2阶张量是矩阵。所以在下面我们将看到TensorFlow 中使用的几乎所有量都定义了它们的形状,因为它们都是张量。
我们可以将TensorFlow 视为一个黑匣子,里面有一些设置管道。给它一些“张量”,它就会吐出一些“张量”。它吐出的就是我们需要的结果。
所以我们需要确定输入什么、吐出什么以及如何设置管道。
有关更多介绍性概念,请查看Keras 初学者指南» 一些基本概念
为什么使用TensorFlow
没有其他原因,只是因为谷歌的名气大,我也没有多想。首先卷起袖子开始工作。如果你想快速原型化,我建议你看看Keras,它被称为人类设计的机器学习框架,它用户友好,并为机器学习框架提供了几个更高级别的接口。
一般流程
捕获验证码、标注验证码、预处理图像、保存数据集、构建模型、训练、提取模型、使用捕获验证码
这个很简单,任何方法都可以循环下载很多文件,这里不再赘述。我这里下载了750个验证码,用了500个用于训练,剩下的250个用来验证模型效果。
标注验证码
这里有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.如何评价模型的质量?
检查训练结果
使用提取模型
我们训练了上面的模型,效果还不错。准确率接近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位网友表示赞同!