株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。新規開発案件のご依頼をお待ちしております。

*

Tesseract-OCRの導入(その2)Visual Studio2013でのAPIの利用

      2014/12/19

Tesseract-OCRの導入の2回目です。前回はインストールからコマンドプロンプトでの英数字と日本語文字での認識の動作確認を行いました。今回はVC++からAPIを使ってみます。開発環境は、Microsoft Vidual Studio Express 2013 for Windows Desktopです。あと、前回書きましたが、Tesseract-OCRがインストール出来ていて使えるようになっていることが前提です。

ここでは以下のライブラリを使います。APIを使う一つの方法ということでご理解頂ければと思います。(※OpenCVと同様に出来ればと思って NuGetを検索したところ、Tesseract-OCR Ver1.0.4 というのが出てきました。これは古いのかなと思ったのでやめました。)

Tesseract-OCRのwin32ライブラリ
以下のリストのページで現時点では、tesseract-3.02.02-win32-lib-include-dirs.zipです。このファイル名を選択するとこのファイルのダウンロードページに移行します。ここからダウンロードします。
Tesseract-OCRのダウンロードファイルリスト

Leptonicaのwin32ライブラリ
以下のソースダウンロードページで現時点では、leptonica-1.68-win32-lib-include-dirs.zipです。このソースダウンロードページからダウンロード出来ます。
Leptonicaソースダウンロードページ

Leptonicaとはオープンソースの画像処理系ライブラリですが、Tesseract-OCRで使用されているようでこれも必要です。参考までにですが、Tesseract-OCRをコマンドラインで利用すると以下のようなメッセージが出ます。
Tesseract Open Source OCR Engine v3.02 with Leptonica

各ライブラリの配置
ライブラリをそれぞれ分かりやすいように配置します。ここでは、以下のようにc:\ocrフォルダに配置しました。
0001

0005

0003

あと実行時に上記ライブラリのlibフォルダに含まれるDLLファイルが必要になります。これらのDLLファイルが環境変数の実行ファイルパスの登録されている場所にあるか、作成したプログラムと同一のディレクトリにある必要があります。

ここではTesseract-OCRの実行ファイルのディレクトリにコピーしました。
0008

以上でライブラリのインストールは完了とします。

コンソールアプリからのAPIの利用
ここから実際にAPIを使ってみます。ここではVC++でコンソールアプリをペースにします。まずコンソールアプリのプロジェクトを作成します。その方法が必要な場合は以下のコンソールアプリのプロジェクトの作成方法等を参照して下さい。(※NuGetは今回は使いません。)
NuGetでOpenCVを導入する

ライブラリの場所の設定
作成したプロジェクトでTesseract-OCRとLeptonicaのインクルードファイルの場所、追加ライブラリのファイルを設定します。

まずインクルードファイルのディレクトリです。
プロジェクトのプロパティページ → 構成プロパティ → C/C++ → 全般 → 追加のインクルードディレクトリで指定します。ここではライブラリの配置で配置したディレクトリを指定します。必要な場合は読み換えて指定して下さい。
0002

0003

次にライブラリファイルです。
プロジェクトのプロパティページ → 構成プロパティ → リンカー → 入力 → 追加の依存ファイルで指定します。ここでもライブラリの配置で配置したディレクトリ内のファイルを指定します。必要な場合は読み換えて指定して下さい。
0005

0006

プログラムの作成
ここでは以下のようなプログラムを書いてみました。シンプルに入力ファイルを指定して画面とファイルに出力するプログラムです。

#include "stdafx.h"

#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>

#include <iostream>
#include <fstream>

int _tmain(int argc, _TCHAR* argv[])
{
	tesseract::TessBaseAPI api;

	api.Init("", "eng", tesseract::OEM_DEFAULT);
	//api.Init("", "jpn", tesseract::OEM_DEFAULT); //日本語の場合

	char imagePath[256];

	strcpy(imagePath, "c:\\tmp\\test1.jpg");
	//strcpy(imagePath, "c:\\tmp\\ocr\\jpn1.png");

	STRING text_out;
	api.ProcessPages(imagePath, NULL, 0, &text_out);

	//画面
	std::cout << text_out.string();

	//ファイル出力
	std::ofstream ofs("c:\\tmp\\ocr\\out1.txt");
	ofs << text_out.string() << std::endl;

	//念のため
	api.Clear();
	api.End();
}

これで前回の画像の結果は確認出来ました。日本語の場合ですが解析結果のコードがUTF8なので画面では確認出来ないです。ファイルで確認しました。APIのより詳細の利用方法は以下の参考サイトのマニュアル等を参照して下さい。今回はここまでです。次回はOpenCVでの領域の認識結果をTesseract-OCRのAPIで文字を認識するというプログラムを作ってみます。

関連サイト
Tesseract-OCR Advanced API
Tesseract-OCRの学習

関連書籍


 - Tesseract-OCR

AdSense

AdSense

  関連記事

Tesseract-OCRの導入(その1)インストールから動作確認まで

Tesseract-OCRは元々の開発がHPで現在はGoogleで公開されている …

Tesseract-OCRの導入(その3)OpenCVの出力を認識する

Tesseract-OCRの導入の3回目です。前回はvc++のコンソールアプリか …