用Tesseract-OCR识别网站图形验证码
OCR是什么?OCR(Optical Character Recognition):光學字符識別,簡單來說就是識別圖片上的文字獲取,然后轉換成一些我們需要的編碼格式,當然當中的實現(xiàn)與ANN,deep learning有所關系,這是后話了,好用就行。
Tesseract是什么?Tesseract是一款開源的OCR識別引擎,一開始是由HP實驗室挖坑的,開源后就給Google進行繼續(xù)填坑了。最初Tesseract發(fā)布在SourceForge,googleCode,不過到今天(2016年12月30日),這個項目基本扎根在gayhub上了。
那么最后Tesseract有什么用?為什么使用Tesseract?顯然的驗證碼識別可以使用Tesseract,至于為什么,當然是因為使用起來非常非常的簡單,你不需要任何相關的知識就可以把Tesseract移植到自己的代碼中。
如何獲取Tesseract
獲取Tesseract的方法非常簡單,直接登錄gayhub就可以了。當然如果你希望下載快一點的話,你應該使用一些科學上網(wǎng)的手段。
一.你可以使用下面的鏈接來獲取tesseract
https://github.com/tesseract-ocr
?
然后點擊Clone or download,如果你沒用gayhub for windows的話,你可以直接點擊download Zip
?
編譯Tesseract的準備工作
當然光有Tesseract還不夠,Windows平臺你還需要下面三個工具。
1.Visual studio 2015(至少是2013以后版本),必須支持C++ 11。
你可以在這個連接中下載到Visual Studio 2015:
https://www.visualstudio.com/
2.你還需要cppan和CMake將Tesseract轉換為Visual Studio 2015可以編譯的項目。
CPPAN下載地址:
https://cppan.org/client/cppan-master-Windows-client.zip
CMAKE下載地址:
https://cmake.org/download/
當你全部搞定后,你應該有類似下面幾個文件?
? 現(xiàn)在你需要做以下事情
1. 安裝CMake,然后重啟你的電腦。
2.把tesseract解壓出來,解壓完成后大概是這個樣子
?
解壓cppan,然后把解壓出來的cppan.exe它分別放在tesseract的目錄和cmake的安裝目錄下,如圖1.1,1.2。
? ? ??
圖1.1
? ? ?? ?? ?? ??
圖1.2
編譯Tesseract
一、打開cmd,cd到tesseract的解壓目錄(為了方便我把tesseract-master重命名為tesseract了)
?
然后依次輸入下面的命令:
1. cppan
2. mkdir build
3. cd build
4. cmake ..
不出意外的話,你應該看到這個:
?
二、然后進入tesseract目錄下的build目錄,應該就可以看到visual studio 2015的項目文件了。
?
三、雙擊這個項目文件,啟動visual studio 2015,在項目中,找到tesseract,點擊鼠標右鍵,將發(fā)布版本切換為release,單擊build,然后去泡一杯咖啡,慢慢坐著等。
?
四、假如不出意外的話,你應該看得到這個錯誤
?
雙擊這個錯誤,找到那個報錯的源代碼文件,將那個文件用記事本打開,以UTF-8的編碼格式保存,沒錯,就是這個文件
?
然后重新編譯一次,這回不出意外的話,你應該看得到這個
?
編譯結束后,你應該可以在tesseract的文件下找到下面的目錄
Tesseract\build\bin\Release
里面的文件類似于這樣
?
使用tesseract編程識別驗證碼
1、打開Visual studio 2015,新建一個空項目,創(chuàng)建一個Main.cpp
2、將Tesseract\build\bin\Release目錄下的所有文件拷貝到這個項目目錄下。
3.將Tesseract這個目錄拷貝到這個項目的文件夾下
4.將C:\Users\你的名字\.cppan這個目錄拷貝到項目文件夾下。
5.從這里下載一個tesseract-ocr-3.02.eng英文包:http://download.csdn.net/detail/coverupsorrow/8336781;解壓后把解壓出來的文件放在Tesseract目錄下的tessdata
完成后,應該是這個樣子。
?
回到Visual Studio 2015,將額外的include的目錄寫入項目配置中。
?
?
打開__Main.cpp編寫DEMO代碼
#pragma comment(lib,"tesseract305.lib")
#pragma comment(lib,"pvt.cppan.demo.danbloomberg.leptonica-1.74.0.lib")
#pragma comment(lib,"pvt.cppan.demo.jpeg-9.2.0.lib")
#pragma comment(lib,"pvt.cppan.demo.openjpeg.openjp2-2.1.2.lib")
#pragma comment(lib,"pvt.cppan.demo.png-1.6.27.lib")
#pragma comment(lib,"pvt.cppan.demo.tiff-4.0.7.lib")
#pragma comment(lib,"pvt.cppan.demo.unicode.icu.common-58.2.0.lib")
#pragma comment(lib,"pvt.cppan.demo.unicode.icu.data-58.2.0.lib")
#pragma comment(lib,"pvt.cppan.demo.unicode.icu.i18n-58.2.0.lib")
#pragma comment(lib,"pvt.cppan.demo.xz_utils.lzma-5.2.2.lib")
#pragma comment(lib,"pvt.cppan.demo.zlib-1.2.8.lib")
?
#include <iostream>
#include <memory>
?
#include <allheaders.h> // leptonica main header for image io
#include <baseapi.h> // tesseract main header
?
int main()
{
?
? ? tesseract::TessBaseAPI tess;
?
? ? if (tess.Init("D:\\Validata\\Validata\\tesseract\\tessdata", "eng"))
? ? {
? ? ? ? std::cout << "OCRTesseract: Could not initialize tesseract." << std::endl;
? ? ? ? return 1;
? ? }
?
? ? // setup
? ? tess.SetPageSegMode(tesseract::PageSegMode::PSM_AUTO);
? ? tess.SetVariable("save_best_choices", "T");
?
? ? // read image
? ? auto pixs = pixRead("D:/validateCode.jpg");//這里自行修改為需要識別的圖片
? ? if (!pixs)
? ? {
? ? ? ? std::cout << "Cannot open input file" << std::endl;
? ? ? ? return 1;
? ? }
?
? ? // recognize
? ? tess.SetImage(pixs);
? ? tess.Recognize(0);
?
? ? // get result and delete[] returned char* string
? ? std::cout << tess.GetUTF8Text()<< std::endl;
?
? ? // cleanup
? ? tess.Clear();
? ? pixDestroy(&pixs);
? ? getchar();
? ? return 0;
}
載一個驗證碼圖片,鑒于我們使用的是默認的識別庫,找一些不大復雜的,例如這個
?
我將這個文件放在了D:/validateCode.jpg,也就是源代碼寫的那樣。
運行DEMO,結果如下,成功識別了驗證碼:
?
總結
以上是生活随笔為你收集整理的用Tesseract-OCR识别网站图形验证码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZooKeeper安装指南
- 下一篇: redis3集群部署