零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>

而後再運行,是否是能夠識別出來了,就是這麼簡單!

相關文章
相關標籤/搜索