TesseractをVS2013で動かす
仕事で、TesseractをVS2013で動かす必要があり、VS2013でビルドするなど少し手間がかかりましたので、その手順をメモとして残します。 TesseractはVS2008、VS2010用のLibは存在するのですが、VS2013のものはないようです。 手順に関しては、以下を参考にしました。 http://vorba.ch/2014/tesseract-3.03-vs2013.html
構築手順
- vs2013対応のtesseract関連ファイルの取得
- Cドライブ直下にTesseract-Buildディレクトを作成し、移動
- ファイルの取得
git clone https://github.com/tesseract4java/tesseract-vs2013
関連ファイルのbuild
- VS2013のコメンドラインを開く
- C:¥Tesseract-Build¥tesseract-vs2013へ移動
msbuild build.proj
を実行- ※ 私の場合は、ここで定義したtypedefが利用できないというエラーが発生
- 発生したファイルをutf-8で保存 or エラー箇所のテキストのインデントなどを修正したらエラーが直りました
- C:¥Tesseract-Build¥tesseract-vs2013¥releaseにincludeとlibディレクトリとファイルができていることを確認
Tesseractのbuild
- C:¥Tesseract-Buildに移動
- tesseractのソースコードをチェックアウト
git clone https://code.google.com/p/tesseract-ocr/
- C:¥Tesseract-Build¥tesseract-ocrへ移動
- C:¥Tesseract-Build¥tesseract-vs2013にあるパッチファイルを適用
git apply ..¥tesseract-vs2013¥vs2013+64bit_support.pach
- ※ vs2013+64bit_support-git.pathというファイルもあるが、これはsvn用のpatch(名前ミス?)
- C:¥Tesseract-Build¥tesseract-ocr¥vs2013ディレクトリとslnファイルができていることを確認
- C:¥Tesseract-Build¥tesseract-vs2013¥release以下のincludeとlibディレクトリをC:¥Tesseract-Build直下へコピー
- C:¥Tesseract-Build¥tesseract-ocr¥vs2013以下のslnファイルを開く
- DLL_DEBUG、DLL_Release、LIB_Debug、LIB_Releaseのそれぞれの構成でbuild
- C:¥Tesseract-Build¥tesseract-ocr¥vs2013¥bin¥Win32に各構成のlib、dllがあることを確認
VS2013用のlib、dll、includeファイルの配置
※ lib、dll、includeファイルの配置は任意のディレクトリとなります。- Cドライブ直下に、Tesseract_vc12ディレクトリを作成
- C:¥Tesseract_vc12に移動し、include、libディレクトリを作成
- C:¥Tesseract-Build¥tesseract-vs2013¥release¥include以下のファイルすべてをC:¥Tesseract_vc12¥includeディレクトリにコピー
- C:¥Tesseract-Build¥tesseract-vs2013¥release¥lib¥Win32以下のファイルすべてをC:¥Tesseract_vc12¥libディレクトリにコピー
- C:¥Tesseract_vc12¥include¥tesseractディレクトリを作成
- C:¥Tesseract-Build¥tesseract-ocr以下のディレクトのファイルをC:¥Tesseract_vc12¥include¥tesseractにコピー
VS2013へのinclude、libの設定
Tessearctを使ったサンプルの作成と実行
OcrSample.cppとして以下のソースコードを追加
#include <tesseract/baseapi.h> #include <leptonica/allheaders.h> int main(int argc, char* argv[]) { tesseract::TessBaseAPI *baseAPI = new tesseract::TessBaseAPI(); if (baseAPI->Init(NULL, "eng")) { printf("Could not initialize tesseract.\n"); exit(1); } Pix *pix = pixRead("sample.jpg"); baseAPI->SetImage(pix); char* outText = baseAPI->GetUTF8Text(); printf("recognized text: %s", outText); baseAPI->Clear(); baseAPI->End(); delete[] outText; pixDestroy(&pix); return 0; }
実行して、読み込んだ画像中の文字がコンソールに表示されれば成功です。