zoukankan      html  css  js  c++  java
  • 《利用机器学习在15分钟内破解验证码》一文的实践

    看了《深度学习世界深度学习世界深度学习世界深度学习世界》2017-12-21 的文章“验证码,再见!利用机器学习在15分钟内破解验证码”,觉得简单易行,对于深度学习新手来说动手实践的可行性很强。遂决定亲手实践一下,体验深度学习在解决实际问题方面的威力。

    1,安装Python环境

    • 本机的配置是64位windows7操作系统。安装python 3.5.2版。这也是目前windows操作系统下能够使用tensorflow的版本。
    • 要安装的依赖库为numpy、imutils、sklearn、keras。使用pip直接联网安装很容易。
    • 在powershell中使用命令 pip install tensorflow,安装tensorflow。

    2,安装OpenCV 环境

    安装OpenCV3. 具体过程略。

    3,运行深度学习识别代码

    3.1 下载源代码并解压

    https://s3-us-west-2.amazonaws.com/mlif-example-code/solving_captchas_code_examples.zip

    源代码目录solving_captchas_code_examples下的子目录generated_captcha_images下原有9955个图片

     

    子目录extracted_letter_images中是空的。

    3.2 从 CAPTCHA 图片中分割单字母图片

    运行命令:

    python extract_single_letters_from_captchas.py

    运行完成后,extracted_letter_images下产生32个目录。存放切割出来的单字母图片。如:

    3.3 训练神经网络识别单个字母

    python train_model.py

    PS F: estsolving_captchas_code_examples> python train_model.py

    Using TensorFlow backend.

    Train on 29058 samples, validate on 9686 samples

    Epoch 1/10

    29058/29058 [==============================] - 97s - loss: 0.2419 - acc: 0.9395 - val_loss: 0.0233 - val_acc: 0.9937

    Epoch 2/10

    29058/29058 [==============================] - 96s - loss: 0.0150 - acc: 0.9966 - val_loss: 0.0109 - val_acc: 0.9966

    Epoch 3/10

    29058/29058 [==============================] - 98s - loss: 0.0102 - acc: 0.9970 - val_loss: 0.0132 - val_acc: 0.9962

    Epoch 4/10

    29058/29058 [==============================] - 97s - loss: 0.0057 - acc: 0.9986 - val_loss: 0.0140 - val_acc: 0.9968

    Epoch 5/10

    29058/29058 [==============================] - 100s - loss: 0.0042 - acc: 0.9987 - val_loss: 0.0099 - val_acc: 0.9971

    Epoch 6/10

    29058/29058 [==============================] - 96s - loss: 0.0080 - acc: 0.9980 - val_loss: 0.0120 - val_acc: 0.9975

    Epoch 7/10

    29058/29058 [==============================] - 96s - loss: 0.0028 - acc: 0.9991 - val_loss: 0.0086 - val_acc: 0.9976

    Epoch 8/10

    29058/29058 [==============================] - 95s - loss: 0.0028 - acc: 0.9992 - val_loss: 0.0073 - val_acc: 0.9981

    Epoch 9/10

    29058/29058 [==============================] - 96s - loss: 0.0050 - acc: 0.9987 - val_loss: 0.0100 - val_acc: 0.9974

    Epoch 10/10

    29058/29058 [==============================] - 97s - loss: 0.0052 - acc: 0.9990 - val_loss: 0.0084 - val_acc: 0.9980

    3.4 测试识别效果

    python3 solve_captchas_with_model.py

    CAPTCHA text is: PQDR

    CAPTCHA text is: T324

    CAPTCHA text is: FPV3

    CAPTCHA text is: H72Z

    CAPTCHA text is: FCBP

    CAPTCHA text is: 29LY

    CAPTCHA text is: 36YG

    CAPTCHA text is: M3C5

    CAPTCHA text is: 32Y7

    CAPTCHA text is: 6GQ6

    可以看到,由于是从训练数据中随机抽取验证码图片进行识别,识别率全部正确。

    从下图看出,即使字符粘连,也能正确识别。说明字符切割和单字符的训练算法是有效的。

     

  • 相关阅读:
    Connected Components? Codeforces
    洛谷 P1344 [USACO4.4]追查坏牛奶Pollutant Control
    洛谷 P4174 [NOI2006]最大获利 && 洛谷 P2762 太空飞行计划问题 (最大权闭合子图 && 最小割输出任意一组方案)
    表达式求值
    费用流(自用,勿看)
    二分图??(自用,勿看)
    C 标准库
    Linux-socket使用
    C 标准库
    C 标准库
  • 原文地址:https://www.cnblogs.com/jackkwok/p/8116243.html
Copyright © 2011-2022 走看看