フッターコンテンツにスキップ
OCRツール
オープンソースライブラリを使用してC#でOCRを実装する方法

C#オープンソースのOCR(開発者向けリスト)

OCR(光学文字認識)は、今日のデジタル世界においてスキャンされたドキュメントの利用方法を完全に変革する画期的な技術です。 これにより、コンピューターはスキャンされたPDFドキュメントを含むさまざまなソースからテキストを認識し抽出でき、PDFドキュメントを効果的に編集し、やり取りすることが可能になります。 光学文字認識(OCR)プログラムの1つはAdobe Acrobatであり、これによりスキャンされたドキュメントから迅速にテキストを抽出し、編集可能なPDFや検索可能な画像PDFに変換することができます。

開発者は、TesseractやIronOCRのようなOCRライブラリを利用することで、最先端のアルゴリズムと機械学習アプローチを活用する強力なツールとAPIにアクセスできます。 これらのライブラリは正確なテキスト認識を可能にし、従来のスキャンされたドキュメントや新しいドキュメントから有用な情報を管理し取得することを容易にします。 OCRはシームレスなコンテンツ分析を可能にし、スキャンされたドキュメントやページ画像を最大限に活用することで、企業や個人の生産性を最大化するのに役立ちます。 紙をベースにした記録をデジタル化する、請求書からデータを抽出する、または単にドキュメントのアクセシビリティを向上させるために使用される、現在の技術において重要なツールです。

Tesseract

最も有名なオープンソースのOCRエンジンはTesseractと呼ばれ、元々はヒューレット・パッカードによって作成されました。 2006年以来、Googleがこのフリーソフトウェアプロジェクトを支援しており、Apacheライセンスの下でリリースされています。

最も正確なオープンソースで無料のシステムの1つがTesseract OCRエンジンです。Tesseractの最新の安定バージョン4.1.1は、LSTMに基づいており、116の言語をサポートしています。

Tesseractは独自の組み込みインターフェースを持たないため、コマンドラインインターフェースから実行する際には別途GUI(グラフィカルユーザーインターフェース)のサポートが必要です。 ニューラルネットワークを利用して新しい情報を学習でき、高度な画像前処理パイプラインを備えています。Tesseract .NET SDKは、OCR機能を.NETアプリケーションに追加するための最も効果的な方法の1つで、テキスト認識機能を提供するための最良のソリューションの1つです。 Tesseractは間違いなく市場で最良のOCRライブラリです。

GOCR

GNU Public Licenseを用いて作成されたOCR(光学文字認識)プログラムとしてGOCRが知られています。 テキストファイルをスキャンされたドキュメントの画像に戻します。 プログラムを開始し、SF上の開発チームを管理した後、Joerg Schulenburgは今日(非常に)低い時間ベースでパッケージを扱い続けています。

GOCRは、いくつかのフロントエンドと一緒に使用できるため、他のオペレーティングシステム、ネットワークアプリケーション、アーキテクチャへの移植が比較的簡単です。 さまざまな画像ファイルタイプを読み取り、2010年までその品質は一貫して向上しました。

GOCRによれば、単一のコラムサンセリフフォントで高さ20〜60ピクセルのものを扱うことができます。 ラテン文字以外のアルファベットで書かれたテキスト、セリフフォント、重なり合う文字、さまざまな書体、ノイズのある写真、過度の歪み角度に問題があると報告しています。 GOCRはバーコードの翻訳も可能です。

CuneiForm

CuneiFormは、現在では"Cognitive OpenOCR"としても知られる、無料かつオープンソースの技術であり、組み込みの出力とデータベースを備えています。 23の異なる言語をカバーし、テキスト形式のスキャン、ドキュメントレイアウトの分析、および識別といったタスクも実行します。

Cognitive TechnologiesがOpenOCRのライセンスを開発し、それはフリーウェアおよびBSDです。 クロスプラットフォームでの利用をサポートしますが、Linuxユーザーにはグラフィカルインターフェースが提供されていません。

任意のDot NET Framework 2.0以降のアプリケーションにおいて、文字認識作業を簡素化するためにラッパーライブラリPuma Dot NETが使用されます。 認識の質を向上させるためにデータ処理中に辞書チェックを行います。

CuneiFormは、電子コピーの紙文書や画像ファイルを、その構造や元のドキュメントフォントを損なうことなく編集可能な形式に自動または半自動で変換するように設計された技術です。 システムはバッチ処理と一度に1つのドキュメントを処理する2つの部分から成り立っており、さらにシステムはロシア語と英語の組み合わせをサポートしています。 2009年にAndrei Borovskyが作成したブランチのみが他のハイブリッド言語の認識をサポートしています。 各言語がdatファイルと関連付けられているため、システムに他の言語を認識させることは難しいです。その構造および作成プロセスは開発者によって公開されていません。

Kraken

Krakenは、Ocropusの問題に他の機能へ影響を与えず対処するために開発されました。 CLSTMニューラルネットワークライブラリを利用し、以前のプロジェクトから得た貴重な経験と新しいデータを活用しています。 異なるプラットフォームで効果的に機能するには、特定の外部ライブラリの使用が必要です。 保存された情報を活用して、潜在的なデータ検証問題に関するより正確な予測ができるようになります。 さらに、その作業方法は、新しいモデルの容易な展開とトレーニングを可能にします。

A9T9

A9T9は、画像ファイルからテキストを抽出し、画像およびPDFドキュメントを変換するために使用できる無料のOCRソフトウェアです。 Tesseract OCRエンジン用のグラフィカルユーザーインターフェース(GUI)を提供します。

プログラムはセットアップが簡単です。そして最も重要なのは、完全に無料でオープンソースです。 スパイウェアやアドウェアは含まれていません。

PDFファイルまたは画像を開くことができ、ソースファイルの内容が左のウィンドウに表示されます。 ドキュメントに複数のページがある場合や、マルチページドキュメントである場合、ページ下部の矢印を使用してページ間を移動できます。

OCRプロセスを開始するには、緑色のOCRボタンをクリックするだけで、出力が右側の第2ペインに表示されます。 出力テキストをテキストファイルとWordドキュメントの両方として保存するオプションがあります。

IronOCR

標準的なTesseractライブラリとは対照的に、IronOCRはTesseractを拡張し、より高い精度、向上したパフォーマンス、強化された安定性を持つネイティブC# OCRライブラリを提供します。 IronOCRは.NETプログラムおよびウェブサイトで使用してPDFや画像からテキストを抽出できます。 多くの外国語をサポートし、プレーンテキストまたは構造化データ出力を生成できます。 埋め込まれたテキストのあるバーコードや画像のスキャンが可能です。 ライブラリはコンソール、ウェブ、MVC、およびデスクトップで開発された.NETアプリケーションで利用できます。商業展開用のライセンスプロセスに関して開発チームは直接サポートを提供します。 IronOCRは最新バージョンのVisual Studioと互換性があります。

IronOCRの利点

  • 最新のTesseract 5エンジンを使用しているため、IronOCRはさまざまな画像またはPDFファイルから紙のドキュメント、バーコード、QRコードを読み取ることができます。 このパッケージは、デスクトップ、コンソール、およびウェブアプリケーションにOCRを組み込むことを簡素化します。
  • IronOCRは、OCRを実行し、スキャンされたPDFを検索可能なPDFに変換することを可能にします。
  • 単語リストやカスタム言語に加えて、IronOCRは世界中で125の異なる言語をサポートしています。
  • IronOCRは20種類以上の異なるバーコードとQRコードをスキャンすることができます。
  • IronOCRはプレーンテキストとバーコードデータの出力を提供できます。 開発者は、代替の構造化データオブジェクトパラダイムを使用して、システムへの直接入力用のすべてのコンテンツを取得できます。 これには、ウェブアプリケーションでの構造化見出し、段落、行、単語、文字が含まれます。

指定された画像からテキストコンテンツを認識し、テキストに変換するために使用するサンプルコードを以下に示します。

using IronOcr;

// Instantiate an IronTesseract object to utilize its OCR capabilities
var Ocr = new IronTesseract();

// Set the language to English for better accuracy
Ocr.Language = OcrLanguage.EnglishBest;

// Optionally specify the Tesseract version to ensure compatibility
Ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;

// Create an OcrInput object to add images for OCR processing
using (var Input = new OcrInput())
{
    // Add the image to be processed; specify the image's path
    Input.AddImage(@"Demo.png");

    // Perform the OCR and store the result
    var Result = Ocr.Read(Input);

    // Output the extracted text to the console
    Console.WriteLine(Result.Text);

    // Pause the console to keep it open
    Console.ReadKey();
}
using IronOcr;

// Instantiate an IronTesseract object to utilize its OCR capabilities
var Ocr = new IronTesseract();

// Set the language to English for better accuracy
Ocr.Language = OcrLanguage.EnglishBest;

// Optionally specify the Tesseract version to ensure compatibility
Ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;

// Create an OcrInput object to add images for OCR processing
using (var Input = new OcrInput())
{
    // Add the image to be processed; specify the image's path
    Input.AddImage(@"Demo.png");

    // Perform the OCR and store the result
    var Result = Ocr.Read(Input);

    // Output the extracted text to the console
    Console.WriteLine(Result.Text);

    // Pause the console to keep it open
    Console.ReadKey();
}
Imports IronOcr

' Instantiate an IronTesseract object to utilize its OCR capabilities
Private Ocr = New IronTesseract()

' Set the language to English for better accuracy
Ocr.Language = OcrLanguage.EnglishBest

' Optionally specify the Tesseract version to ensure compatibility
Ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5

' Create an OcrInput object to add images for OCR processing
Using Input = New OcrInput()
	' Add the image to be processed; specify the image's path
	Input.AddImage("Demo.png")

	' Perform the OCR and store the result
	Dim Result = Ocr.Read(Input)

	' Output the extracted text to the console
	Console.WriteLine(Result.Text)

	' Pause the console to keep it open
	Console.ReadKey()
End Using
$vbLabelText   $csharpLabel

上記のコードスニペットでは、私たちはIronTesseractを使用して機能を開発しています。 まず、1つ以上の画像ファイルを追加するために新しいOcrInputオブジェクトをインスタンス化します。 AddImageメソッドを使用して各画像のパスを指定することで、多くの画像を希望の数だけ追加できます。 画像を追加した後、提供された入力でOCRを実行するためにIronTesseractオブジェクトでReadメソッドが呼び出されます。 その結果、コンソールを介してテキストが抽出され表示されます。

以下の出力は、以前に提供された画像から抽出されたテキストを表示しており、画像からテキストが正常に抽出されたことを示しています。

OCR C# Open Source (List For Developers) Figure 1 - Output

詳しいIronOCRの説明については、この投稿を参照してください。

結論

OCRオープンソースツールは、それらのソースコードを使用して独自のプログラムを構築することを可能にします。 しかし、いくつかのツールには、コーディングの問題が発生した場合のサポートを提供する公式ライブラリや専属チームがありません。 Tesseractのドキュメントには一般的な使用シナリオのためのサンプルコードやチュートリアルが不足しており、初心者がコードやライブラリを理解するのが難しいです。

IronOCRは、.NET Framework Standard 2、.NET Framework 4.5、.NET Core 2、3、5などのさまざまな.NETプロジェクトをサポートしており、Mono、Xamarin、Azureのような新しい技術とも互換性があります。 IronOCR技術を活用することで、Tesseractの結果を向上させ、誤ってスキャンされたドキュメントや画像を修正することが可能です。 複雑なTesseract辞書システムは、NuGetパッケージを通じて管理されています。 Iron OCRライブラリを活用してOCRツールを開発します。

IronOCRを使用すれば、追加の設定なしでプログラムを利用でき、PDFファイル、マルチフレームTIFF、一般的な画像フォーマットをすべてサポートします。 また、バーコード認識機能を提供しており、画像からバーコードデータを抽出し、バーコードの値を読み取ることができます。 IronOCRは費用対効果の高い開発版を無料トライアルで提供し、ライフタイムライセンスがIronOCRバンドルに追加費用なしで含まれています。IronOCRバンドルは一度の支払いで複数のプラットフォームをカバーします。 IronOCRの価格について詳しくは、このページを参照してください。

Kannaopat Udonpant
ソフトウェアエンジニア
ソフトウェアエンジニアになる前に、Kannapatは北海道大学で環境資源の博士号を修了しました。博士号を追求する間に、彼はバイオプロダクションエンジニアリング学科の一部である車両ロボティクスラボラトリーのメンバーになりました。2022年には、C#のスキルを活用してIron Softwareのエンジニアリングチームに参加し、IronPDFに注力しています。Kannapatは、IronPDFの多くのコードを執筆している開発者から直接学んでいるため、この仕事を大切にしています。同僚から学びながら、Iron Softwareでの働く社会的側面も楽しんでいます。コードやドキュメントを書いていない時は、KannapatはPS5でゲームをしたり、『The Last of Us』を再視聴したりしていることが多いです。