惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
L
LangChain Blog
H
Help Net Security
博客园_首页
T
Tailwind CSS Blog
Microsoft Security Blog
Microsoft Security Blog
T
The Blog of Author Tim Ferriss
雷峰网
雷峰网
Recent Announcements
Recent Announcements
D
DataBreaches.Net
U
Unit 42
Vercel News
Vercel News
I
InfoQ
Martin Fowler
Martin Fowler
Microsoft Azure Blog
Microsoft Azure Blog
Apple Machine Learning Research
Apple Machine Learning Research
S
SegmentFault 最新的问题
Jina AI
Jina AI
博客园 - 叶小钗
博客园 - 【当耐特】
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
Last Week in AI
Last Week in AI

博客园 - mecn

好久没来了。。。。。。。。。。 2007最全网页设计实用代码(史上最全) zt javascript 客户端验证上传文件是否合法 c# 汉语拼音排序函数 vs2005 ActiveX c# 注意几点! 关于IE非安全更新带来flash和ActivX不能激活的解决办法(zt) NHibernate 学习 (转园子里子两篇关于NHibernate的文章) 将后台数据读取到前台的EXCEL文件中去,用javascript实现,asp.net,javacript(发一个原创) 用ajax打造和gmail一样的加载进度条显示!(原创) asp.net大页面载入时以进度条显示zt ajax中 同一页面中 UpdatePanel 区别 更新多个区域的关键 timer使用方法 在asp.net Sql server (可以是存储过程)中使用事务回滚 网页一屏到底有多大 1024*768 800*600 网页设计大小 网页设计尺寸 在vs2005中用push方式来用水晶报表,比pull方式好用多了! 去掉VS2005中水晶报表的登录界面(ZT) Visual Studio 2005 IDE 技巧和窍门 得到页面所有的form内对象数值——————为一个控件加一个客户端属性 从webservice读取string[]至downlist,增加onchange事件,更改相关显示。 动态生成表格内容,支持多个textbox,自动生成textboxID,比较好用
浅谈图形验证码的识别
mecn · 2007-05-17 · via 博客园 - mecn

初级技术,只能识别字体工整、位置固定、颜色统一、没有干扰点、背静单纯的数字验证码,高手没有必要看了,这里只是空谈原理,完整实现请到我的csdn小助手里面去看!

●●●CSDN小助手(完全脱离浏览器使用CSDN社区)●●● 
http://blog.csdn.net/Qqwwee_Com/archive/2005/08/14/454148.aspx   

●●●百度贴吧图形验证码完美识别●●●
http://blog.csdn.net/Qqwwee_Com/archive/2005/08/15/455376.aspx 

●●●csdn Blog发表评论验证码识别●●● 
http://blog.csdn.net/Qqwwee_Com/archive/2005/08/15/455376.aspx

         本问所讲的技术只是验证码识别的初级技术,只能识别一些简单的验证码,比如符合下列条件的:字体工整、位置固定、颜色统一、没有干扰点、背静单纯,初步体现了OCR原理(非常弱智:)

        本文讲的是通过抓特征点来达到识别目的。图片由一个一个的点(像素)组成,点的颜色变化就组成了我们看见的图片,呈现一个图象就是那几个点按照一定的顺序排列而已。
       比如csdn使用的验证码(下图),去掉上下左右的白边,每个数字使用8*12=96个像素,兰色的点就是我们看到的数字了,0-9这10个数字兰色点都是固定的,比如"4"就是是(0, 6)(0, 7)(1, 5)(1, 7)(2, 4)(2, 7)(3, 3)(3, 7)(4, 2)(4, 7)(5, 1)(5, 7)(6, 0)(6, 1)(6, 2)(6, 3)(6, 4)(6, 5)(6, 6)(6, 7)(6, 8)(6, 9)(6, 10)(6, 11)(7, 7)这些点组成如何得到,继续后面。

看起来复杂,实际上是很简单的,先简单处理下,你也许看的很明白,比如csdn登陆的验证码,

单击在新窗口中打开图片,Ctrl+滚轮缩放图片

用mspaint.exe(画图)打开,放大到800%(查看--自定义--800%),
单击在新窗口中打开图片,Ctrl+滚轮缩放图片

,这里显示图片是一块一块组成了,现在我们需要把验证码的每个字符独立处理,就要确定字符范围了,如何确定?还是在mspaint.exe中,使用"选定"工具,保证每次划的框刚好把数字完整“框”起来,并且没有多余的空白……稍微花点工夫,就可以确定范围:四个字符的范围范围分别是以(3,4)、(12,4)、(21,4)、(30,4)作为左上角宽度是8高度是12的矩形。这些就是我的源代码里面

Dim Rc1 As New Rectangle(3, 4, 8, 12)
Dim Rc2 As New Rectangle(12, 4, 8, 12)
Dim Rc3 As New Rectangle(21, 4, 8, 12)
Dim Rc4 As New Rectangle(30, 4, 8, 12)
 

所定义的4个范围的由来了。

    选定中的界面
单击在新窗口中打开图片,Ctrl+滚轮缩放图片

选定后的界面,如果达到上面界面

单击在新窗口中打开图片,Ctrl+滚轮缩放图片

4个范围(图片处理过,实际上大不到图片的效果)
单击在新窗口中打开图片,Ctrl+滚轮缩放图片

分解出来以后,就要抓特征点了,比如把上图第一个字符所在的范围单独出来,然后"画图"中鼠标移动到每个兰色点上,记下右下提示的坐标就可以了,下图:
单击在新窗口中打开图片,Ctrl+滚轮缩放图片

分别把0-10个数字每个特征点记录下来就可以了:)--巨大的工作量???也有简单的办法,用程序自己读兰色点的坐标,我csdn小助手里面的坐标就是另外的一个程序读的。

   记录下这些点以后在程序中就抓取这些点判断是不是蓝色,如果全部符合,就可以判断识别这个图片的数字了。

   在  .net中如何实现这些过程?

    从地址加载验证码图片    

Dim Rqq As HttpWebRequest
Dim RPP As HttpWebResponse
Rqq = HttpWebRequest.Create("验证码地址")
Rqq.CookieContainer = New CookieContainer
RPP = Rqq.GetResponse
Dim Img As New System.Drawing.Bitmap(RPP.GetResponseStream)
          

   确定一个矩形范围:  Dim 范围 As New Rectangle(3, 4, 8, 12) 
   复制某个范围的图片: 这个范围的图片 = 大图片.Clone(大图片的矩形范围, 大图片PixelFormat)
   得到某个点的颜色    :Img.GetPixel(坐标.X, 坐标.Y)
   
   具体的去看我的”csdn小助手“里面如何实现的吧。

   ==============
  识别率100%,速度极快识别一个的过程一般在几十毫秒级别内,如果要追求更快的速度,使用API直接操作图形,速度更快。

  总结 流程:确定范围,记录特征点,然后在程序中比较这些特征点颜色是不是设想的颜色。

         初级技术,只能识别字体工整、位置固定、颜色统一、没有干扰点、背静单纯的数字验证码,高手没有必要看了,这里只是空谈原理,完整实现请到我的csdn小助手里面去看!