四、网上的一些高级验证码
: E" l* v2 f$ |2 }/ J打造最好的电脑自学交流论坛我爱电脑技术社区--打造最好的电脑技术自学交流平台- }; P# J2 W9 D& w0 ]) ~
1)ICQ
; `2 r7 W a) j# s/ h: W0 ^. N电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
. k2 `2 J2 ]: C: d, f2 \2 i电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 . x6 x5 l) r; ]& ~3 b
; I0 l. I X1 e q0 s我爱电脑技术论坛 2)IMDb
* j' K! w1 V* Y) u7 G" X2 \我爱电脑技术论坛
; i I9 y" z2 q- d电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
8 U- a' }6 f7 o0 S+ E" s' r5 M3 Y打造最好的电脑自学交流论坛www.520diannao.com& O! V& @5 w5 D! d% E" s8 ?# m" X
3)MS MVPS我爱电脑技术社区--打造最好的电脑技术自学交流平台' b* U( T5 `" [* ?
: j: l. W; k/ C+ E
& j, l R8 s0 w% d( _我爱电脑技术论坛www.520diannao.com% d' R3 [% ? Z) K' ~7 E
4)MVN Forum电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站+ [; }% t) v' g( Z4 ~9 o
9 ]0 X& V: ?3 swww.520diannao.com 打造最好的电脑自学交流论坛" K7 k, x6 s# `! ?( s% B
/ r9 O' z/ [8 p" Q+ W我爱电脑技术论坛 这些类型是被很多人认为比较难得类型,分析一下可以发现,字符检测,定位和分割都不难。 唯一影响识别率的是IMDBb和MVPS这两类,字体变形略大。www.520diannao.com4 D, ?+ w# k! }: [
www.520diannao.com1 z! ] ?: _' z, E* C/ g
总体来说,这些类型的破解也不难,很容易做到50%以上的识别率。
: E, X( O, t' |1 _电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
" f+ ?" p# e; @* a我爱电脑技术社区--打造最好的电脑技术自学交流平台 五、高级验证码的破解分析
1 x4 | d& I# ^% y4 s0 I电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站# ] c, [4 Z& _. y* L( Q) I
时间关系,我简单介绍如何利用图像处理和模式识别技术,自动识别比较高级的验证码。
* b/ y6 H: `2 i% ~: ]打造最好的电脑自学交流论坛
2 \8 Q! d" | H; K- E我爱电脑技术社区--打造最好的电脑技术自学交流平台 (以风头正劲的Google为例)www.520diannao.com. D2 r+ p% {/ c! I" j/ H9 U
+ }7 n! s% V- K5 x% |# S打造最好的电脑自学交流论坛
& o% @* b! m% \: i1 T; F6 Hwww.520diannao.com
+ O8 Z. v2 V, Z6 n2 f: w5 bwww.520diannao.com 1)至少从目前的AI的发展程度看,没有简单的做法能自动处理各种不同的验证码,即使能力很强,那么系统自然也十分复杂强大。所以,要想在很简单的算法实现比较高级的验证码破解,必须分析不同验证码算法的特点:
8 L S r- w. E+ {9 V7 y打造最好的电脑自学交流论坛, r e2 C4 d. j i! m, D
作为一般的图像处理和计算机视觉,会考虑色彩,纹理,形状等直接的特征,同时也考虑直方图,灰度等统计特征,还考虑FFT,Wavelet等各种变换后的特征。但最终目标都是Dimension Reduction(降维)然后利于识别,不仅仅是速度的考虑。从图像的角度看,很多系统都考虑转换为灰度级甚者黑白图片。
`' T/ I" X9 Q, ?打造最好的电脑自学交流论坛
1 i, A- o- n. X) Hwww.520diannao.com Google的图片可以看出,颜色变化是虚晃一枪,不存在任何处理难度。难度是字体变形和字符粘连。打造最好的电脑自学交流论坛; d2 h" c$ D' x, ]$ x( ^
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站. o! Q: l) [2 U! C9 V8 z
如果能成功的分割字符,那么后期识别无论是用SVM等分类算法,还是分析笔顺比划走向来硬识别,都相对好做。www.520diannao.com( e5 h9 E- Q* Y+ N: _- w
$ d& y; o7 H4 `2 P, Bwww.520diannao.com 2)图像处理和粘连分割
( B% E9 t& O; U$ I2 x# }我爱电脑技术论坛- y/ p3 v* T; p8 R! ^4 N5 O
代码中的part1目录主要完成图像预处理和粘连字符分割
, V" o" ~5 f/ [9 C& _* X; V
$ ~" }* C% C( l& kwww.520diannao.com 001:将图像从jpg等格式转换为位图便于处理电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站0 Z7 d* s. i n7 U; b' L9 R
www.520diannao.com% h2 F5 k& w3 r4 y0 ~" v
002:采用Fix/Adaptive的Threshold门限算法,将图片Bin-Value二值化。(可用003算法)
$ A6 E Z- j8 |
3 a6 E( t, |$ Q) v! Q/ V7 h9 X u; V我爱电脑技术论坛 003:采用OSTU分水岭算法,将图片Bin-Value二值化。(更通用,大部分时候效果更好)打造最好的电脑自学交流论坛' ^8 o. S4 i3 T' k. C
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 c6 T9 ~' m! L& t, [/ h5 v
005:获取ROI感兴趣的区域。
. V5 H" j" f$ h+ |6 s9 X$ q" K; p我爱电脑技术论坛
. y9 ~" m& a* b: h X) Z% v我爱电脑技术论坛 006:Edge Trace边缘跟踪。
+ m d6 g* O) F! u1 g# `我爱电脑技术社区--打造最好的电脑技术自学交流平台
+ V( x7 G+ w O+ s, e( G% d电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 007:Edge Detection边界检测。打造最好的电脑自学交流论坛% c B' k, F+ e9 n% G
打造最好的电脑自学交流论坛6 }/ d- j; J, Y/ \! j1 l+ a
008:Thin细化去骨架。电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站: T& n5 R) s3 L" R2 T9 j
4 l7 }' ?+ L3 n7 _1 `2 g打造最好的电脑自学交流论坛 009:做了一些Tidy整理。(这个一般要根据特定的Captcha算法调整)
y0 p }" G2 G1 p1 u9 N% S4 q$ G
010:做切割,注意图片中红色的交叉点。
1 g& ]' c1 o) U `+ @- K6 C) h打造最好的电脑自学交流论坛我爱电脑技术社区--打造最好的电脑技术自学交流平台5 B* x1 P( C: z1 A4 N7 F. K
011:将边缘检测和骨干交叉点监测的图像合并。(合并过程可以做分析: 比如X坐标偏移门限分析,交叉点区域纹理分析,线条走势分析,等等各种方法,找出更可能的切分点和分离后部件的组合管理。)打造最好的电脑自学交流论坛' }4 H" u$ J& q- P4 H) q% a
* g( z& m0 d) K2 V2 ] 我爱电脑技术社区--打造最好的电脑技术自学交流平台, z6 K3 r( g+ i' S& L" H0 l
, B4 x- { V4 Y0 J; z我爱电脑技术社区--打造最好的电脑技术自学交流平台 代码:(代码质量不高,从其他项目拷贝过来,简单修改的。)2 F+ U$ N: {% B: Q. f8 W% N
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站- g: y) S8 [ z6 ]# s1 z7 d6 e
查看代码(./pstzine_09_01.txt)
6 z0 d2 Q! j* g7 j( b Z# T我爱电脑技术论坛我爱电脑技术社区--打造最好的电脑技术自学交流平台 U) u4 v! m& B
注:在这里,我们可以看到,基本的部件(字母是分割开了,但可以造成统一字母的被切割成多个Component。 一种做法是:利用先验知识,做分割; 另外一种做法是,和第二部分的识别结合起来。 比如按照从左至右,尝试增加component来识别,如果不能识别而且component的总宽度,总面积还比较小,继续增加。 当然不排除拒识的可能性。)打造最好的电脑自学交流论坛4 V& J& q, p: t0 F, w9 w q
% k/ [) z" [6 v. D3 A0 b, i; O我爱电脑技术论坛 3)字符部件组合和识别。www.520diannao.com# c% w9 e) k) i5 P- ^1 J; b# f
我爱电脑技术社区--打造最好的电脑技术自学交流平台2 z+ B& V) p) x1 n! u9 d0 }
part2的代码展示了切割后的字母组合,和基于svm的字符识别的训练和识别过程。
, m9 ^ g5 y1 [9 G电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
3 C. F; C) T0 l, m我爱电脑技术论坛 Detection.cpp中展示了ImageSpam检测过程中的一些字符分割和组合,layout的分析和利用的简单技术。 而Google的验证码的识别,完全可以不用到,仅做参考。1 A: L. g* l. J7 T5 T
6 t v5 B* x. B. U& k% m3 ?- I- Awww.520diannao.com SVM及使用:打造最好的电脑自学交流论坛- ]- Y3 `! S( ^; N) Z l% y
* i3 g' w; c7 I2 K# s- `& }0 A" k# z我爱电脑技术论坛 本质上,SVM是一个分类器,原始的SVM是一个两类分类的分类器。可以通过1:1或者1:n的方式来组合成一个多类分类的分类器。 天生通过核函数的使用支持高维数据的分类。从几何意义上讲,就是找到最能表示类别特征的那些向量(支持向量SV),然后找到一条线,能最大化分类的Margin。
, F9 @6 `2 @' x' o; Q0 j8 nwww.520diannao.com
$ Z% z: }7 x% x5 F0 l+ `" B: N7 j libSVM是一个不错的实现。我爱电脑技术论坛* L# |4 ^* d9 i& Z3 q
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站/ W9 K& b& O- m" A# T3 H$ \, H' l! ]* |
训练间断和识别阶段的数据整理和归一化是一样的。这里的简单做法是:电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站) n `' C) \7 ?' ]# A8 J8 v1 b) k0 ]
. _& n h. B; |% s
首先:www.520diannao.com `$ ?; `0 k$ J( k, V9 ^2 {
0 x; ?; S# g( J电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 #define SVM_MAX +0.999
7 y; K5 p. V% _7 J+ E7 ^- b打造最好的电脑自学交流论坛 #define SVM_MIN +0.001 我爱电脑技术社区--打造最好的电脑技术自学交流平台# l8 M, B% S9 U
www.520diannao.com3 U# @2 O& \% ~7 G/ W
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站* q9 P( P) w6 g5 P( Y# j" Q, @
其次:www.520diannao.com/ h$ |9 P1 Q& Y& H0 x( l$ O
打造最好的电脑自学交流论坛. J% j$ X! Z1 F8 m- K: F
扫描黑白待识别字幕图片的每个像素,如果为0(黑色,是字母上的像素),那么svm中该位置就SVM_MAX,反之则反。
4 w2 \' c6 P$ z' d, q我爱电脑技术社区--打造最好的电脑技术自学交流平台
7 Q d% b" H; e/ C( a+ n4 U, B# x我爱电脑技术社区--打造最好的电脑技术自学交流平台 最后:
: V+ X) q7 v$ i* `/ h9 c电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站" f' A2 {& f# s/ S/ [; x2 L {9 k
训练阶段,在svm的input的前面,为该类打上标记,即是那一个字母。我爱电脑技术论坛. U; C; M- F9 S/ X$ A' ?& W
. `3 t- ~5 V. |2 d5 ~我爱电脑技术社区--打造最好的电脑技术自学交流平台 识别阶段,当然这个类别标记是SVM分类出来。
$ S! p4 D# Q; E8 V. z我爱电脑技术论坛我爱电脑技术论坛5 z; H5 [( J- v2 a
注意:电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站' ^2 l6 B; B& i( z
' i& k! q% E' ?/ L2 I我爱电脑技术论坛 如果是SVM菜鸟,最好找一个在SVM外边做了包装的工具,比如样本选择,交叉验证,核函数选择这些,让程序自动选择和分析。& C3 ^6 z! a. T4 C2 t
* K' [2 x) d' C K% @5 u打造最好的电脑自学交流论坛 代码:通过ReginGrowth来提取单个单个的字符,然后开始识别。电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 K! N- ?4 ?" R$ {
6 J, _/ W1 S( ^6 m3 a% D5 [我爱电脑技术论坛 查看代码(./pstzine_09_02.txt)