Tesseract-ocr、MinGW、およびファイルを使用してC ++アプリケーションを作成します

そのため、アプリケーションでテキストを認識する機能を実装する必要が生じたため、適切なライブラリの検索が開始されました。 最終的に、2つのオープンソースプロジェクトCuneiForm LinuxTesseract-ocrに決めました 。 CuneiFormプロジェクトの入念な調査により、これは単なるCognitive Technologies製品の移植版であり、2008年にソースが公開され、注目を集めた後(いずれにしても、そのような印象)にスコア付けされました。 実際、プロジェクト全体は移植で構成されており、新機能についての話すらありませんでした。 これらすべてが、プロジェクトページの悲しいニュースと相まって、Googleが現在所有しているTesseractを支持してCuneiFormを放棄し、プロジェクトの将来にある程度の自信を与えました。 猫の下で、MinGWを使用してWindowsでTesseract-ocrを構築し、最も簡単なC ++アプリケーションを作成することを体験してください。



準備する



私は平凡なことを掘り下げないようにしながら、最小限の頭痛でテセラクトを集めるために行う必要があるすべてを説明しようとします。



MinGWをインストールして構成する


プロジェクトの公式サイトから最新の利用可能なインストーラーをダウンロードしてインストールします。C++コンパイラーとMSYS Basicシステムを確認することを忘れないでください。 その後、MinGWシェルに移動し、次のコマンドを使用して、後で必要になる追加パッケージをインストールします。

mingw-get install mingw32-automake mingw32-autoconf mingw32-autotools mingw32-libz





MinGWが/ mingvにインストールされているディレクトリマウントされていることに注意してください。これは、ライブラリを構築するときにも役立ちます。



Leptonicaライブラリをインストールする


Tesseract-ocrは、 イメージの操作にLeptonicaライブラリを使用します。 公式サイトから取得できるソースコードからビルドおよびインストールする方法について説明しますが、その前にlibJpeglibPngおよびlibTiffライブラリをインストールする必要があります。また、ソースからのアセンブリです)。



LibJpegアセンブリ


公式サイトからソースコードアーカイブをダウンロードし、別のディレクトリに展開します(簡単にするために、これはD:\ lib \ jpegであると仮定します)。 MinGWシェルに戻り、手首を軽く振るだけで、デフォルトでgccが検索するディレクトリにライブラリをインストールします。 デバッグ文字の出力を無効にするためにフラグを再定義します。

cd /D/lib/jpeg

./configure CFLAGS='-O2' CXXFLAGS='-O2' --prefix=/mingw

make

make install








LibPngビルド


また、 プロジェクトページからソースコードアーカイブをダウンロードし、 D:\ lib \ pngディレクトリに展開します(もちろん、別のものを選択できます)。 MinGWシェルに戻り、libJpegの場合と同じことを繰り返します。



LibTiffビルド


推奨されるftpのソースコードを含むアーカイブを取得し、 D:\ lib \ tiffに解凍します。 そして、前の2つと同様に収集します。



レプトニカを構築


ソースコードのアーカイブはすでにあります。D:\ lib \ leptonicaに解凍してください。 そして、ファイルについて思い出す時が来ました。Zlibをサポートするアセンブリは小さなバグのため成功しませんが、それは自分で簡単に修正できます。 これを行うには、Leptonicaソースを解凍したディレクトリにあるsrc / pngio.cファイルを開きます。 そこで、 #include "png.h"行を見つけて、その後にディレクティブを挿入する必要があります。これにより、 次のようになります。

#include "png.h"



#ifdef HAVE_LIBZ

#include "zlib.h"

#endif



/* ----------------Set defaults for read/write options ----------------- */






その後、レプトニカと以前のライブラリを収集します。



Tesseract-ocrの組み立てとインストール



これで、必要な依存関係がすべて揃いました。 今回は、開発者のsvnトランクからソースをダウンロードします。

svn checkout ht tp://tesseract-ocr.googlecode.com/svn/trunk/ tesseract-ocr-read-only





* t間のスペースはHabraparser専用です。削除してください。



その後、再びファイルを取得し、ソースをD:\ lib \ tesseractにエクスポートしました。

tesseractのソースが置かれているディレクトリを基準としたファイルへのパスを記述します(私の場合はD:\ lib \ tesseractであることを思い出します)。



これらの操作の後、MinGW Shellに移動して、ライブラリの直接アセンブリを続行できます。

cd /D/lib/tesseract

./runautoconf

./configure CFLAGS='-D__MSW32__ -O2' CXXFLAGS='-D__MSW32__-O2' LIBS='-lws2_32' LIBLEPT_HEADERSDIR='/mingw/include' --prefix=/mingw

make

make install






彼が行く間、私はなんとかお茶を飲むことができ、 / mingw / include / tesseract大量のヘッダーファイルを発見した後、 Leptonicaヘッダーファイルは/ mingw / include / leptonicaにあり 、すべてのライブラリは/ mingw / libに自然に現れました。



シンプルなアプリケーション



非常に小さいため、コード全体を提供します。

#include <stdio.h>

#include <string.h>

#include <tesseract/baseapi.h>

#include <leptonica/allheaders.h>



int main(int argc, char* argv[]) {

tesseract::TessBaseAPI tessApi;

tessApi.Init("data", "rus");// data *.traineddata ,

// rus

if(argc > 1) {

PIX *pix = pixRead(argv[1]);// ,

// , Leptonica

tessApi.SetImage(pix);// tesseract,

char *text = tessApi.GetUTF8Text();//

//---

char *fileName = NULL;

long prefixLength;

const char* lastDotPosition = strrchr(argv[1], '.');

if(lastDotPosition != NULL) {

prefixLength = lastDotPosition - argv[1];

fileName = new char[prefixLength + 5];

strncpy(fileName, argv[1], prefixLength);

strcpy(fileName + prefixLength, ".txt\0");

} else {

exit(1);

}

//---

FILE *outF = fopen(fileName, "w");

fprintf(outF, "%s", text);

fclose(outF);

//---

pixDestroy(&pix);

delete [] fileName;

delete [] text;

}

return 0;

}






次のコマンドでアプリケーションをビルドできます。

g++ -O2 test.cpp -o test.exe -ltesseract_api -ltesseract_main -ltesseract_textord -ltesseract_wordrec -ltesseract_ccstruct -ltesseract_ccutil -ltesseract_classify -ltesseract_dict -ltesseract_image -ltesseract_viewer -ltesseract_cutil -ltesseract_cube -ltesseract_neural -llept -lws2_32





tesseractの現在のバージョンはDLLの作成をサポートしていないため、リンクは静的です。



おわりに



私自身の経験から、最も難しいことから始めることがわかっているので、特にTesseractのドキュメントが犯罪的に小さく、主なドキュメントはdoxygenを使用してソース自体から引き出すことができることを考えると、私の話が誰かに役立つことを願っています。

PS: この投稿で修正のためのいくつかのアイデアが収集されました。



All Articles