zoukankan      html  css  js  c++  java
  • 验证码识别笔记(二)

    这是验证码识别的第二篇,先看一下样图吧,就是下面那张。

    看到这张图片,直观上就知道比第一篇中的要简单,这个“简单”用语言来描述,可以得到下面的几条结论:

    1. 图片中的字符边界比较清晰,并且单个字符的内容比较单纯;

    2. 虽然字符间有粘连,但是绿色边界围住的白色区域没有粘连,并且颜色一致,可以通过找连通分量的办法把字符分离出来。

    通过上面的分析,接下来的事就很简单了。我觉得编码很简单,只看编码不可能写出好东西来,只有领会思路,理解方法才能触类旁通。

    好了,下面就是接下来的步骤:

    1. 使用合适的阈值,对图片进行二值化处理;

    2. 使用BFS找出所有颜色为白色的连通分量;

    3. 因为图片在二值化之后,底色为白色,所以上图会找出5个连通分量,四个字符和一个整幅图片去掉字符的分量;

    下面四个就是从样图中找到的连通分量:

          

    4. 去掉过大的那个连通分量,如果留下的连通分量如果不等于四个,则直接退出,如果等于四个,继续进行算法;

    注:这种情况是存在的,如果字符之间粘连区域过大,或者字符过小,一个字符被分割成两个分量,但是因为验证码识别的特殊性,所以容许有一定的错误率存在,只要有成功的次数多余失败次数,这样的算法就是可行的。

    5. 将找到的连通分量和模板进行匹配,找到匹配度最大的模板,返回对应的字符。

    模板的做法:

    因为该网站的验证码字体比较单一,所以下载一定数量的验证码图片,覆盖所有可能的字符种类,通过上面的方法,二值化之后找到所有的连通分量,将这些找到的连通分量进行人工分类标号,最后得到可以用的模板。

    找连通分量的代码可以参考:GitHub

  • 相关阅读:
    Java 8简明教程
    ASCII码
    正则 取反匹配
    Eclipse 常用快捷键
    MongoDb基本操作
    Mac下eclipse的快捷键
    oracle的字符集设置与乱码
    Java7、Java8 安装卸载问题
    Oracle | PL/SQL Check约束用法详解
    浅谈数据库中的触发器
  • 原文地址:https://www.cnblogs.com/flyingpeguin/p/3518155.html
Copyright © 2011-2022 走看看