OCR(光学式文字認識)テクノロジーを使用すると、画像またはスキャンしたドキュメントのテキストを読み取って、機械で読み取り可能な形式に変換できます。 OCRには、バウチャーからのコードの読み取り、テキストの編集可能化、セルフサービスストア、印刷されたドキュメントのデジタル形式への変換など、さまざまなユースケースがあります。さまざまなOCRツールとライブラリが市場で入手可能ですが、OCR結果の信頼性が重要な要素です。この記事では、独自のOCRアプリケーションを作成し、C++を使用してプログラムで画像をテキストに変換する方法を紹介します。
画像をテキストに変換するC++OCRライブラリ
Asposeは、ディープラーニングを使用してより信頼性が高く正確に近いOCR結果を提供する強力なC++OCRライブラリを提供します。 GitHubからライブラリファイルとサンプルプロジェクトをダウンロードできます。
C++を使用して画像ページをテキストに変換する
まず、画像に複数行のテキストが含まれているシナリオを確認しましょう。これは、本の各ページに大量のテキスト行が含まれているスキャンされた本がある場合に当てはまります。この場合、画像をテキストに変換する手順は次のとおりです。
- 画像のパスを文字列変数に設定します。
- OCRの結果を保存するためのバッファを準備します。
- aspose::ocr::page(const char *image_path, wchart_t *buffer, size_t buffersize)関数を使用してOCRを実行します。
- 結果を印刷するか、ファイルに保存します。
次のコードサンプルは、C++を使用してOCRを実行し、画像をテキストに変換する方法を示しています。
std::string image_path = "sample.png";
// 結果のバッファを準備します(シンボルでは、len_byte = len * sizeof(wchar_t))
const size_t len = 4096;
wchar_t buffer[len] = { 0 };
// OCRを実行する
size_t size = aspose::ocr::page(image_path.c_str(), buffer, len);
//結果を印刷する
std::wcout << buffer << L"\n";
C++を使用して単一行の画像に対してOCRを実行する
前の例では、複数のテキスト行を持つ画像を変換しました。ただし、画像にキャプションやスローガンなどの1行のテキストしか含まれていない場合があります。このような場合にOCRを実行する手順は次のとおりです。
- 文字列変数を使用して、画像のパスを設定します。
- OCRの結果を保存するためのバッファを作成します。
- aspose::ocr::line(const char *image_path、wchar_t *buffer, size_t buffer_size)関数を使用してOCRを実行します。
- OCRの結果を保存または印刷します。
次のコードサンプルは、C++を使用して1行のテキストを含む画像に対してOCRを実行する方法を示しています。
std::string image_path = "sample_line.jpg";
// 結果のバッファを準備します(シンボルでは、len_byte = len * sizeof(wchar_t))
const size_t len = 4096;
wchar_t buffer[len] = { 0 };
// OCRを実行する
size_t size = aspose::ocr::line(image_path.c_str(), buffer, len);
//結果を印刷する
std::wcout << buffer << L"\n";
C++で画像の特定の領域をテキストに変換する
APIをカスタマイズして、OCRを実行する画像の領域を制限することもできます。この場合、画像上に長方形を作成して、目的の領域にアクセスできます。以下は、画像の特定の領域からテキストを抽出する手順です。
- 画像のパスを文字列変数に設定します。
- OCRの結果を保存するためのバッファを準備します。
- aspose::ocr::pagerect(const char *image_path, wchar_t *buffer, size_t buffer_size, int x, int y, int w, int h)関数を使用してOCRを実行します。
- OCRの結果を印刷します。
次のコードサンプルは、C++を使用して画像の特定の領域をテキストに変換する方法を示しています。
std::string image_path = "sample_line.jpg";
// 結果のバッファを準備します(シンボルでは、len_byte = len * sizeof(wchar_t))
const size_t len = 4096;
wchar_t buffer[len] = { 0 };
int x = 138, y = 352, w = 2033, h = 537;
// OCRまたは選択した領域を実行します
size_t size = aspose::ocr::page_rect(image_path.c_str(), buffer, len, x, y, w, h);
//結果を印刷する
std::wcout << buffer << L"\n";
結論
この記事では、AsposeのOCRライブラリを使用してC++で画像をテキストに変換する方法を学習しました。 1行または複数行のテキストを含む画像に対してOCRを実行する方法と、画像の特定の領域からテキストを読み取る方法を見てきました。 ドキュメントを使用して、C++用のAspose.OCRの詳細を学ぶことができます。