zoukankan      html  css  js  c++  java
  • 零OCR基础6行代码实现C#验证码识别

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


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

    下面开始撸示例:

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

    Tesseract ocr = new Tesseract();
    ocr.SetVariable("tessedit_char_whitelist", "0123456789");
    ocr.Init(@"D:测试Ocr	essdata", "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对象!

    下面是我测试截图:

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

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

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

    这里要在程序的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>

    然后再运行,是不是可以识别出来了,就是这么简单!

  • 相关阅读:
    Python datetime time 等时间 日期 之间的计算和相互转化
    微信浏览器的html5页面显示配置等问题汇集 1,禁止微信浏览器分享页面链接 (定点更新)
    《Monitoring and Tuning the Linux Networking Stack: Receiving Data》翻译
    kubernetes安全认证相关资料
    ovn-architecture 摘要
    apt-get tips
    CNI插件编写框架分析
    ovn-kubernetes安装指南
    ovn-kubernetes执行流程概述
    《OVN Logical Flows and ovn-trace》翻译
  • 原文地址:https://www.cnblogs.com/263613093/p/5076146.html
Copyright © 2011-2022 走看看