零OCR基础6行代码实现C#验证码识别

这两天由于工做须要,要到某个网站采集信息,一是要模拟登录,二是要破解验证码,本想用第三方付费打码,可是想一想网上免费的代码也挺多的,因而乎准备从网上撸点代码下来,谁知道,撸了好多个都不行,本人之前也没接触过这方面的,代码无从下手,最后不知道在哪一个兄台博客找到一个国外的第三方开源OCR,说是强大的谷歌公司作维护,C++开发的,有.NET封装的连接库,甚好!git


项目地址:https://github.com/tesseract-ocr/tesseract
语言库:https://github.com/tesseract-ocr/langdata
OCR语言训练:https://github.com/tesseract-ocr/tessdatagithub

下面开始撸示例:app

新建C#控制台,版本选择.NET 4.5 测试

Tesseract ocr = new Tesseract();
ocr.SetVariable("tessedit_char_whitelist", "0123456789");
ocr.Init(@"D:\测试\Ocr\tessdata", "eng", true);

第一句就不用说了,第二句是设置识别的字符,例如,若是你要识别的验证码是A-Z0-9你就都写进来就OK了
第三句就是初始化OCR的语言训练配置,里面不少文件,只要写文件名小数点前面的就OK了网站

List<Word> result = ocr.DoOCR(bmp, Rectangle.Empty);
if(result.Count<=0)return;
string code = result[0].Text;

最后的Code就是识别出来的验证码了,这里验证码图片必定要转换为Bitmap对象才行,记得用完了释放Bitmap对象!spa

下面是我测试截图:code

上面是验证码,下面文件名是识别出来的结果命名保存的文件!固然验证码是通过处理的,原始的验证码图片是酱紫的:xml

验证码图片过小,OCR识别不了,并且默认状况下,要是白底,黑子才能识别,因此网上的验证码必定要先本身二值化处理而且清除掉背景色,再进行识别!
我这里的处理方式是二值化以后,把图片放大三倍,不要担忧看着有锯齿,OCR能够识别的
当初我把图片放大两倍,发现有的时候8会被识别成3,因此我干脆又放大了一倍,发现不存在这个问题了,虽然看起来锯齿感很明显,可是OCR无论美丑对象

 

你是否是参照案例撸码了,运行了?而后你发现程序运行报错了?blog

这里要在程序的app.config的startup节点加上 useLegacyV2RuntimeActivationPolicy="true"节点,详细以下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

而后再运行,是否是能够识别出来了,就是这么简单!

相关文章
相关标签/搜索