“模式识别”技术识别12306验证码

1 篇文章 0 订阅
1 篇文章 0 订阅

中国春运——相当于一个欧洲国家的人口在一个月内在不同城市之间的流动。今年铁道部火车票实行实名制,并开通网上和电话购票。1月9日,12306.cn点击量就超过了14亿次,相当于所有中国人当天都点击了一次。由于访问量太大,网站无法顺畅登录。就算到今天17日,登上12306仍然很慢,更不用说买到票。


这几天,网上都在热议12306网站的架构问题,仁者见仁,智者见智。12306现在已经这个样子了,如何在目前的状况帮助过年回家的人买到票呢?于是有了很多帮助购票的自动登录插件,但这些自动登录插件能成功要归功于12306的登录程序在登录失败(提示用户过多,稍后再试)时没有刷新验证码,所以这些插件让用户输入用户名、密码,验证码后,就可以通过js脚本的方式一直登录,直到成功,如果12306“不放水”,验证码每次登录失败都变一次,这些插件就嗝屁着凉了,那有没有办法识别出图像中的验证码呢?

Angel Eyes是专门做CV的,Angel Eyes里面也有人要回家,看到铁道部的12306网上售票系统的验证码比较少变化,就着手试了试,下面是效果和算法要点,屡试不爽,与大家分享。

在处理图像噪声方面,这些验证码只被加入了轻微的噪声,用一个二值化就干净的解决了;

在处理字体变形方面,根本就没有任何变形,仅仅是用了两套字体,我就干体力活逐个截取了这两套字体,如果字体有拉伸和缩放,我现在这个算法就不行了,至少会慢若干倍,因为搜索空间增加了若干倍;

在文字重叠上,采用从左到右逐个剔除(当然,笔画完全重叠的部分不剔除),每匹配上一个字符后,下一个字符的搜索起始位置是上一个字符的匹配位置加上字符宽度的一半,这样重叠得很厉害也不怕;

在整体结果上,对已匹配字符全部剔除后看残余笔画数量,如果太多则认为不理想,进行回溯,目前最多回溯到第二候选字就够100%的准确率了。

在单个字符匹配上,原来用归一化互相关,后来考虑到图像点阵非常小,并且是在二值化的基础上处理,用FFT算互相关的加速作用也就不会明显,并且不方便我做空域的其它处理,直接用窗口滑动模板处理了,

准确率和速度方面:如果不采用回溯,可以40ms处理一幅,准确率只有90%,如果要100准确率,速度有点慢,300多毫秒才识别一个。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
深度学习之卷积神经网络CNN做手写体识别的VS代码。支持linux版本和VS2012版本。 tiny-cnn: A C++11 implementation of convolutional neural networks ======== tiny-cnn is a C++11 implementation of convolutional neural networks. design principle ----- * fast, without GPU 98.8% accuracy on MNIST in 13 minutes training (@Core i7-3520M) * header only, policy-based design supported networks ----- ### layer-types * fully-connected layer * convolutional layer * average pooling layer ### activation functions * tanh * sigmoid * rectified linear * identity ### loss functions * cross-entropy * mean-squared-error ### optimization algorithm * stochastic gradient descent (with/without L2 normalization) * stochastic gradient levenberg marquardt dependencies ----- * boost C++ library * Intel TBB sample code ------ ```cpp #include "tiny_cnn.h" using namespace tiny_cnn; // specify loss-function and optimization-algorithm typedef network CNN; // tanh, 32x32 input, 5x5 window, 1-6 feature-maps convolution convolutional_layer C1(32, 32, 5, 1, 6); // tanh, 28x28 input, 6 feature-maps, 2x2 subsampling average_pooling_layer S2(28, 28, 6, 2); // fully-connected layers fully_connected_layer F3(14*14*6, 120); fully_connected_layer F4(120, 10); // connect all CNN mynet; mynet.add(&C1); mynet.add(&S2); mynet.add(&F3); mynet.add(&F4); assert(mynet.in_dim() == 32*32); assert(mynet.out_dim() == 10); ``` more sample, read main.cpp build sample program ------ ### gcc(4.6~) without tbb ./waf configure --BOOST_ROOT=your-boost-root ./waf build with tbb ./waf configure --TBB --TBB_ROOT=your-tbb-root --BOOST_ROOT=your-boost-root ./waf build with tbb and SSE/AVX ./waf configure --AVX --TBB --TBB_ROOT=your-tbb-root --BOOST_ROOT=your-boost-root ./waf build ./waf configure --SSE --TBB --TBB_ROOT=your-tbb-root --BOOST_ROOT=your-boost-root ./waf build or edit inlude/config.h to customize default behavior. ### vc(2012~) open vc/tiny_cnn.sln and build in release mode.
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值