零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\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對象!

下面是我測試截圖:

上面是驗證碼,下面文件名是識別出來的結果命名保存的文件!當然驗證碼是經過處理的,原始的驗證碼圖片是醬紫的:

驗證碼圖片太小,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>

然后再運行,是不是可以識別出來了,就是這么簡單!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM