Tesseract-OCR牛刀小试:模拟请求时的验证码识别
原文:http://yaohuiji.com/tag/tesseract%EF%BC%8Cocr%EF%BC%8C%E9%AA%8C%E8%AF%81%E7%A0%81/
有个邪恶的需求,需要识别验证码 ,手输几千遍得残了,所以有了这篇小文章,顺便向帅气的Tesseract-OCR致敬,它果然和传说中的一样牛x!
首先,到google code下载Tesseract-OCR的dll和相关语言包。
下载下来后,把dll导入到自己项目里,把语言包解压缩到debug目录下(哪儿都行,但是要有访问权限,然后记下这个目录,后面要用它配置tesseract-ocr)。
然后就可以开始写代码了!
首先,需要模拟一个验证码图片的http请求,这个请求可能也需要cookie,所以在你模拟验证码图片的请求前,很可能需要先请求一下生成相关Cookie的那些页面,把Cookie存到CookieContainer里供后续操作使用。
下面我们先准备2个用来模拟http请求的helper,里面的cookieContainers是个静态字段,这样每次请求就可以共用同一组cookie,这一点很重要。(如果你发现返回的验证码图片是对的,识别后发送过去的值也是对的,但是依然提示验证码错误,原因很可能就是验证码图片的http请求却少cookie。)
请求页面文本的方法:
public static string GetResponse(string url, string method, string data,string encode)
{
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.KeepAlive = true;
req.Method = method.ToUpper();
req.AllowAutoRedirect = true;
req.CookieContainer = CookieContainers;
req.ContentType = "application/x-www-form-urlencoded"; req.UserAgent = IE7;
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
req.Timeout = 50000; if (method.ToUpper() == "POST" && data != null)
{
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] postBytes = encoding.GetBytes(data); ;
req.ContentLength = postBytes.Length;
Stream st = req.GetRequestStream();
st.Write(postBytes, 0, postBytes.Length);
st.Close();
} System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) =>
{
return true;
}; Encoding myEncoding = Encoding.GetEncoding(encode); HttpWebResponse res = (HttpWebResponse)req.GetResponse();
Stream resst = res.GetResponseStream();
StreamReader sr = new StreamReader(resst, myEncoding);
string str = sr.ReadToEnd(); return str;
}
catch (Exception)
{
return string.Empty;
}
请求验证码图片的方法:
public static Stream GetResponseImage(string url)
{
Stream resst = null;
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.KeepAlive = true;
req.Method = "GET";
req.AllowAutoRedirect = true;
req.CookieContainer = cookieContainers;
req.ContentType = "application/x-www-form-urlencoded"; req.UserAgent = IE7;
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
req.Timeout = 50000; System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) =>
{
return true;
}; Encoding myEncoding = Encoding.GetEncoding("UTF-8"); HttpWebResponse res = (HttpWebResponse)req.GetResponse();
resst = res.GetResponseStream(); return resst;
}
catch
{
return null;
}
}
用fiddler抓一下浏览器请求,把相关的URL和POST数据记下来,然后就可以用GetResponse来请求页面的html文本,用GetResponseImage请求验证码图片的Stream。
下面,就该Tesseract-OCR出场了,虽然就这几行,但是最重要的就是这几句了!
private string Recognize(string url)
{
Bitmap bitmap = (Bitmap)Bitmap.FromStream(HttpHelper.GetResponseImage(url)); //如果你的验证码干扰性比较强,可以在这儿对图片进行一些预处理,比如二值化,去噪点什么的,我这个很幸福,没什么干扰,直接就能识别……:-) //初始化ORC
tessnet2.Tesseract ocr = new tessnet2.Tesseract();
//设置识别的内容,这设置的是0到9的数字
ocr.SetVariable("tessedit_char_whitelist", "0123456789");
//初始化语言包,第一个参数是语言包的路径,第二参数是语言包的名字
ocr.Init(Application.StartupPath + @"\tessdata", "eng", true);
//开始识别
List<tessnet2.Word> result = ocr.DoOCR(bitmap, Rectangle.Empty);
//返回识别结果
return result[0].Text;
}
现在调用Recognize方法就有验证码了,最后带着验证码和帐号信息发一个POST请求,分析下响应状态码或者响应内容里是否有登陆成功相关的字符串什么的就搞定了!
ps:参考了几篇文章,都在google里,搜tesseract就能找到。有空了再深入的看看tesseract-ocr,挺好玩的。
Tesseract-OCR牛刀小试:模拟请求时的验证码识别的更多相关文章
- 从session实现机制分析模拟请求验证码的可行性(转)
悲剧了,发现写完这篇blog没有配上这个格调超高的标题. 1.0问题背景 现在要实现一个带验证码网站的的自动登陆功能.验证码识别过程不再这篇文章的讨论之中.(之后有篇文章我会详细的总结验证码的识别 ...
- python利用requests库模拟post请求时json的使用
我们都见识过requests库在静态网页的爬取上展现的威力,我们日常见得最多的为get和post请求,他们最大的区别在于安全性上: 1.GET是通过URL方式请求,可以直接看到,明文传输. 2.POS ...
- Selenium&Pytesseract模拟登录+验证码识别
验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的. 验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的. 验证码识别涉及到的知识:人工智能,模式识别 ...
- Selenium&Pytesseract模拟登录+验证码识别
验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的. 验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的. 验证码识别涉及到的知识:人工智能,模式识别 ...
- 零OCR基础6行代码实现C#验证码识别
这两天因为工作需要,要到某个网站采集信息,一是要模拟登陆,二是要破解验证码,本想用第三方付费打码,但是想想网上免费的代码也挺多的,于是乎准备从网上撸点代码下来,谁知道,撸了好多个都不行,本人以前也没接 ...
- Tesseract Ocr引擎
Tesseract Ocr引擎 1.Tesseract介绍 tesseract 是一个google支持的开源ocr项目,其项目地址:https://github.com/tesseract-ocr/t ...
- Python下Tesseract Ocr引擎及安装介绍
1.Tesseract介绍 tesseract 是一个google支持的开源ocr项目,其项目地址:https://github.com/tesseract-ocr/tesseract,目前最新的源码 ...
- 第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别
第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别 第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://gith ...
- python爬虫模拟登录的图片验证码处理和会话维持
目标网站:古诗文网 登录界面显示: 打开控制台工具,输入账号密码,在ALL栏目中进行抓包 数据如下: 登录请求的url和请求方式 登录所需参数 参数分析: __VIEWSTATE和__VIEWSTAT ...
随机推荐
- Windows下安装GnuRadio最简单的方法(没有之一)
作者在Windows XP SP3 32位下亲测通过,理论上Win7也没问题. 1. 如果系统中安装有Python,请先把Python卸载. 2. 下载安装Python(x,y) 2.7.5.0, 下 ...
- Codevs 2833 奇怪的梦境
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Aiden陷入了一个奇怪的梦境:他被困在一个小房子中,墙上有很多按钮,还 ...
- DataGrid1
2013-09-2512:26:31 1.DataGrid页面 <asp:DataGrid ID="msgInfo1" PageSize="8" Auto ...
- bootstrap2.3.2 modal 用href时有缓存
$('body').on('hidden', '.modal', function () {$(this).removeData('modal');}); 直接在js里加入上面的代码就可以解决缓存问题 ...
- 《Apache服务之php/perl/cgi语言的支持》RHEL6——服务的优先级
安装php软件包: 安装文本浏览器 安装apache的帮助文档: 测试下是否ok 启动Apache服务关闭火墙: 编辑一个php测试页测试下: perl语言包默认系统已经安装了,直接测试下: Apac ...
- 安装WordPress详细教程指南
最近准备自己建一个个人博客,以便分享一些自己工作生活中的一些观点及经验,建博客当然选wordpress,毕竟wordpress是为博客而生的嘛.下边记录一下自己安装WordPress的详细过程指南,亦 ...
- [大牛翻译系列]Hadoop(17)MapReduce 文件处理:小文件
5.1 小文件 大数据这个概念似乎意味着处理GB级乃至更大的文件.实际上大数据可以是大量的小文件.比如说,日志文件通常增长到MB级时就会存档.这一节中将介绍在HDFS中有效地处理小文件的技术. 技术2 ...
- 机器学习实战——k-邻近算法:约会网站
1.kNN 算法 算法说明: set<X1,X2……Xn> 为已知类别数据集,预测 点Xt 的类别: (1)计算中的set中每一个点与Xt的距离 (2)按距离增序排列 (3)选择距离最小的 ...
- 非阻塞io与记录锁
非阻塞io 1.对比 阻塞io的例子:scanf从终端获取输入时,如果不输入程序就会一直停在那; 对一个已经有写锁的文件请求读时, 会一直空等直到前面的进程释放锁... 非阻塞的例子:读取文件内容, ...
- MySQL 多实例删库脚本
DB版本:5.5.14 OS:CentOS 6.3 在测试环境中,在一台服务器上创建多个实例,在每个实例中一个一个删库比较麻烦,因此用下面脚本,可以直接删除所有库,除了系统库以外: #!/bin/ba ...