IronOCRを使用したC#代替でのTesseract OCRの使用方法
によってジム・ベイカー
Tesseractは優れたアカデミックOCRである。(光学文字認識)ライブラリーは、開発者のほとんどすべてのユースケースで無料で利用できる。
C#(シーシャープ)は、最も正確で高速なテッセラクトライブラリの1つを利用できる幸運に恵まれている。
IronOCRはGoogle TesseractをIronTesseract
で拡張しています。これは安定性が向上し、フリーのTesseractライブラリよりも精度が高いネイティブC# OCRライブラリです。
この記事では、.NET開発者がバニラTesseractよりもIronOCR IronTesseract
の使用を強く推奨する理由を比較し、説明する。
C# for .NETでTesseract OCRを使用するには?
- Google TesseractおよびIronOCR for .NETをVisual Studioにインストールする
- C#の最新ビルドを確認する
- 精度と画像の互換性を確認する
- パフォーマンスとAPI機能をテストする
- 多言語サポートを検討する
.NET OCRのコード例 - C#(シーシャープ)で画像からテキストを抽出します;
NuGetパッケージマネージャーを使用して、IronOCR NuGetパッケージをVisual Studioソリューションにインストールします。
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-1.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
// Hundreds of languages available
ocr.Language = OcrLanguage.English;
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\example.tiff", pageindices);
// input.DeNoise(); optional filter
// input.Deskew(); optional filter
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
// Explore the OcrResult using IntelliSense
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
' Hundreds of languages available
ocr.Language = OcrLanguage.English
Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\example.tiff", pageindices)
' input.DeNoise(); optional filter
' input.Deskew(); optional filter
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
' Explore the OcrResult using IntelliSense
設置オプション
.NETでOCRのためのTesseractエンジンを使う
テッセラクト・エンジンを使用する際、ほとんどの人はC#(シーシャープ)ライブラリを使用している。
.NETではInteropはあまり楽しくないし、クロスプラットフォームやAzureとの互換性も低い。 つまり、32ビットまたは64ビットのターゲットにしかデプロイできないということだ。
Visual C#(シーシャープラットフォーム)のランタイムがインストールされていることを確認し、Tesseractをコンパイルして最新バージョンを入手する必要があるかもしれない。 これらのフリーのC#(シーシャープ)ラッパーは、エッジから何年も遅れているかもしれない。
また、よくわからないC#(シーシャープ)のDLLやEXEを探し、ダウンロードし、管理し、パーミッションによって実行できないかもしれない環境に配置しなければならない。
NuGet Package Managerを使って簡単にインストールでき、光学式文字認識を使って画像やPDFファイルからテキストを抽出します。
IronOCR Tesseract for C
IronOCRでは、TesseractのインストールはすべてNuGetパッケージマネージャーを使用して行われます。
Install-Package IronOcr
ネイティブのDLLやexeをインストールする必要はない。 すべては.NETコンポーネント・ライブラリひとつで処理される。
APIはすべて.NETネイティブで、Tesseractを使用したシンプルなC#(シーシャープ)APIを使用しています。
C#(シーシャープ)で光学式文字認識を追加するために、これらの種類のVisual Studioプロジェクトをサポートしています:
- .NET フレームワーク 4.6.2 以上
- .NET スタンダード 2.0 以上(3.x、.NET 5、6、7、8を含む)
- .NET コア 2.0 以上(3.x、.NET 5、6、7、8を含む)
最新情報&メンテナンス
C#(シーシャープ)でテッセラクトをググる;
テッセラクト5の最新ビルドは、Windows上でコンパイルするようには設計されていない。
C# (シーシャープ)用のTesseract 5を無償でインストールするには、Windows用のLeptonicaとTesseractを手動で修正し、コンパイルする必要があります。 MinGWクロスコンパイルチェーンは、現在のところ、Windowsインターオプ・バイナリーの生成に成功していない。
さらに、GitHubにあるフリーのC# APIラッパーは、何年も遅れていたり互換性がなかったりする。
IronOCR for .NETテッセラクト
IronOCRは、アプリケーションへのシームレスな統合のためのユーザーフレンドリーなAPIを含む多くの利点を提供します。 JPEG、PNG、TIFF、PDFなど様々な画像形式をサポートし、画像の自動前処理などの高度な機能を提供します。 さらに、商業サポートとアップデートを提供する専門チームに支えられている。
Tesseract 5は、Windows、macOS、Linux、Azure、AWS、Lambda、Mono、Xamarin Macで、ほとんど、あるいは全く設定することなく、すぐに実行できます。 管理するネイティブ・バイナリがない。 フレームワークとコアの互換性。
それ以外に言うことはほとんどない。
グーグルOCR
グーグル・クラウドOCR (光学文字認識)はGoogle Cloud Platformが提供するサービスです。(事業継続計画)開発者は、機械学習アルゴリズムを使って画像やスキャンした文書からテキストを抽出することができる。
正確性
.NETプロジェクトにおけるGoogle Tesseract
ライブラリとしてのテッセラクトは、機械が高解像度のテキストをスクリーンに印刷し、それを読むという完璧なドキュメントのために設計された。 だからテッセラクトは完璧な文書を読むのが得意なのだ。
問題は、現実の世界にはそれがないことだ。 Tesseractが回転している、傾いている、低DPIの画像やスキャンされた画像、または背景ノイズがある画像に遭遇すると、その画像からデータを取得することはほぼ不可能になります。 さらにテッセラクトは、無意味な情報を返す前にその文書を処理するのに非常に長い時間を要する。
目にはとても読みやすい簡単な文書も、テッセラクトではうまく読み取れない。
Tesseractは、標準的な書体のまっすぐで完璧なテキストを読むのに最適な無料のライブラリである。
スクリーンショットのように画像がデジタル的に完全でないスキャンや写真撮影されたドキュメントを使用する場合、Tesseractを使用するには、画像の前処理を行う必要がある。 これは通常、Photoshopのバッチスクリプトや高度なImageMagickの使い方で行われる。
一般的に、これは扱おうとしている文書の種類ごとにケースバイケースで開発する必要があり、開発に数週間かかることもある。
.NET プロジェクトにおけるIronOCR
IronOCRはこの悩みを取り除きます。 ユーザーは最小限の設定で、しばしば99.8-100%の精度を達成する。
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-2.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\example.tiff", pageindices);
input.DeNoise(); //fixes digital noise
input.Deskew(); //fixes rotation and perspective
// there are dozens more filters, but most users wont need them
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
Private input = New OcrInput()
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\example.tiff", pageindices)
input.DeNoise() 'fixes digital noise
input.Deskew() 'fixes rotation and perspective
' there are dozens more filters, but most users wont need them
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
画像の互換性
.NETのGoogle Tesseract
C# (シーシャープ) の IntPtr
C++ オブジェクトである Leptonica PIX イメージフォーマットのみを受け付ける。 PIXオブジェクトは管理されたメモリではないので、C#(シーシャープ)で注意深く扱わないとメモリリークを起こす。
Leptonica_は一般的な画像互換性は良いが、多くのコンソール警告やエラーを投げる。 TIFFファイルには既知の問題があり、PDF OCRのサポートは限られています。
IronOCR for .NETテッセラクト
画像はメモリ管理されています。 PDFとTiffに対応。 システム。 すべてのファイル形式に対して、Drawing、Stream、およびByte Arrayが含まれています。
幅広い画像をサポート:
- PDFドキュメント
- Pdfページ
- マルチフレームTIFFファイル
- JPEG & JPEG2000
- GIF
- PNG
- 基本多言語面
- WBMP
System.Drawing.Image
System.Drawing.Bitmap
- 画像の
System.IO.Streams
。 - バイナリ画像データ(バイト[])
- その他にも様々な機能があります...
OCR画像互換コード例
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-3.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("example.pdf", Password: "password");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("multi-frame.tiff", pageindices);
input.LoadImage("image1.png");
input.LoadImage("image2.jpeg");
//... many more
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadPdf("example.pdf", Password:= "password")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("multi-frame.tiff", pageindices)
input.LoadImage("image1.png")
input.LoadImage("image2.jpeg")
'... many more
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
パフォーマンス
無料のグーグル・テッセラクト
Google Tesseractは、適切にチューニングされ、入力画像がPhotoshopやImageMagickを使って前処理されていれば、高速で正確な結果を出すことができる。
ネット上にあるTesseractの例のほとんどは、Tesseractがうまく機能するようにデザインされたフォントを使った、デジタルノイズのない高解像度のスクリーンショットによるものであることにお気づきだろう。
Tesseractsのドキュメントによると、OCRを有効にするには、入力画像を300DPI以上でサンプリングする必要がある。
IronOCR テッセラクト・ライブラリ
IronOCR .NET Tesseract DLLは、ほとんどの画像に対して、特に設定を行わなくても精度高く、かつ高速に動作します。 私たちは、現在ほとんどのマシンで使用されているマルチコアプロセッサを活用するためにマルチスレッドを実装しました。
低解像度の画像でも、あなたのプログラムで高精度に動作することが一般的です。 PhotoShopは不要です。
開発者は、わずかな設定で99%以上の精度を達成することが多く、継続的なコスト、セキュリティリスク、帯域幅の問題を抱えることなく、現在の機械学習ウェブAPIに匹敵します。
スピードは速いが、ちょっとしたコーディングで改善できる。
パフォーマンス・チューニングの例
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-4.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
// Configure for speed. 35% faster and only 0.2% loss of accuracy
ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\@¢©«»°±·×‑–—‘’“”•…′″€™←↑→↓↔⇄⇒∅∼≅≈≠≤≥≪≫⌁⌘○◔◑◕●☐☑☒☕☮☯☺♡⚓✓✰";
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
ocr.Configuration.ReadBarCodes = false;
ocr.Language = OcrLanguage.EnglishFast;
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
' Configure for speed. 35% faster and only 0.2% loss of accuracy
ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\@¢©«»°±·×‑–—‘’“”•…′″€™←↑→↓↔⇄⇒∅∼≅≈≠≤≥≪≫⌁⌘○◔◑◕●☐☑☒☕☮☯☺♡⚓✓✰"
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
ocr.Configuration.ReadBarCodes = False
ocr.Language = OcrLanguage.EnglishFast
Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageindices)
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
API
.NETのGoogle Tesseract OCR
私たちには2つの自由な選択肢がある:
- **GitHubにある多くのレイヤーは古く、未解決のチケットがあり、メモリリークやコンソールの警告があります。 .NET CoreまたはStandardをサポートしていない可能性があります。
-
コマンドラインで動作するEXE - 配備が難しく、ウイルススキャナやセキュリティポリシーによって常に中断される。
上記のいずれも、ウェブアプリケーション、Azure、Mono、Xamarin、Linux、Docker、Macではうまく機能しないかもしれない。
IronOCR Tesseract OCR ライブラリ for .NET (.NET用)
IronTesseract`と呼ばれるTesseract用の.NETライブラリ。
IntelliSenseサポートが付いた完全なドキュメント。
.NETで最もシンプルなTesseractのHello World
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-5.cs
using IronOcr;
var text = new IronTesseract().Read("img.png").Text;
Imports IronOcr
Private text = (New IronTesseract()).Read("img.png").Text
活発な開発が行われており、20年以上の経験を持つプロのソフトウェア・エンジニアがサポートしている。
互換性
Google Tesseract + Interop for .NET
依存関係を見つけたり、ソースからビルドしたり、フリーのC#インターオプ・ラッパーを更新したりする気になれば、ほとんどのプラットフォームで動作させることができるだろう。 これらのリソースは、.NETコアまたは.NETスタンダードのプロジェクトと完全に互換性がない場合があります。
現在のところ、IronTessseract
を使わずにLibTesseract5 for Windowsを安全にインストールする論理的で簡単な方法は見つかっていません。
IronOCR .NET OCRライブラリ
CIでユニットテストされ、実行に必要なものはすべて揃っている:
- デスクトップアプリケーション、
- コンソールアプリ
- サーバー・プロセス
- ウェブアプリケーションとMVC
- ジェットブレインズ・ライダー
-
Xamarinマック
オン:
- ウィンドウズ
- Azure (アジュール)
- Linux (リナックス)
- Docker (ドッカー)
- マック
-
BSDとFreeBSD
.NET対応:
- .NET フレームワーク 4.6.2 以上
- .NET コア - 2.0 以上のすべてのアクティブバージョン
- .NET スタンダード - 2.0 以上のすべてのアクティブバージョン
- モノ
- Xamarinマック
言語サポート
グーグル テッセラクト
Tesseract辞書はファイルとして管理されており、https://github.com/tesseract-ocr/tessdataからクローンする必要があります。 これは約4GBだ。
いくつかのLinuxディストロでは、apt-get
を使ってTesseract辞書を管理することができる。
正確なフォルダ構造を維持しなければ、Tesseractは失敗する。
IronOCR テッセラクト
https://github.com/tesseract-ocr/tessdataより多くの言語をサポートし、それぞれNuGetパッケージとしてNuGet Package Managerまたは簡単にインストールできるダウンロードで管理されます。
ユニコード言語の例
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-6.cs
using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("img/arabic.gif", pageindices);
// Add image filters if needed
// In this case, even thought input is very low quality
// IronTesseract can read what conventional Tesseract cannot.
var result = ocr.Read(input);
// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
result.SaveAsTextFile("arabic.txt");
Imports IronOcr
Private ocr = New IronTesseract()
ocr.Language = OcrLanguage.Arabic
Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img/arabic.gif", pageindices)
' Add image filters if needed
' In this case, even thought input is very low quality
' IronTesseract can read what conventional Tesseract cannot.
Dim result = ocr.Read(input)
' Console can't print Arabic on Windows easily.
' Let's save to disk instead.
result.SaveAsTextFile("arabic.txt")
複数言語の例
OCRで複数の言語を同時に使用することも可能だ。これは、Unicode文書で英語のメタデータやURLを取得するのにとても役立ちます。
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-7.cs
using IronOcr;
// For the Chinese Language Pack:
// PM> Install IronOcr.Languages.ChineseSimplified
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English);
// We can add any number of languages
using var input = new OcrInput();
input.LoadPdf("multi-language.pdf");
var result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
Imports IronOcr
' For the Chinese Language Pack:
' PM> Install IronOcr.Languages.ChineseSimplified
Private ocr = New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.English)
' We can add any number of languages
Dim input = New OcrInput()
input.LoadPdf("multi-language.pdf")
Dim result = ocr.Read(input)
result.SaveAsTextFile("results.txt")
その他
IronOCR Tesseractは、.NETソフトウェア開発者のための追加機能を備えています。
- Tesseractを設定するための自動画像解析で、一般的なエラーに対応
- 画像から検索可能なPDFへの変換
- PDF OCR
- あらゆるPDFを検索可能にし、検索エンジンにインデックスさせることができる。
- OCRからHTML出力
- TIFFからPDFへの変換
- バーコード読み取り
- QRコード読み取り
- マルチスレッド
- ブロック、段落、行、単語、文字、フォント、OCR統計の検査を可能にする高度な
OcrResult
クラス。
結論
Google Tesseract for C# (シーシャープ)(シーシャープ)
C#(シーシャープ)のフリー&アカデミックなプロジェクトに最適なライブラリです。
TesseractはC++開発者にとって優れたリソースですが、.NETにとって完全なOCRライブラリではありません。
スキャン画像や写真画像を扱う場合、Tesseractで正確に処理する前に、これらの画像を直交、標準化、高解像度、デジタルノイズのない状態に処理する必要があるからだ。
IronOCR .NET フレームワーク&コア用OCRライブラリ
対照的に、IronOCR は1行のコードでこれ以上のことができる。
確かに、IronOCR を使用しています。テッセラクト その内部OCRエンジンのために。
C#(シーシャープ)用のTesseractビルドを最終的にチューニングし、多くのパフォーマンス改善と標準機能を追加。
開発者の時間が貴重なプロジェクトには最適です。 何週間も時間を持て余している.NETソフトウェア・エンジニアを最後に見つけたのはいつですか?
C#(シーシャープ)テッセラクトプロジェクトの開始
どのVisual StudioプロジェクトでもNuGet Package Managerを使用します:
Install-Package IronOcr
あるいは、次のこともできる。IronOCR Tesseract .NET DLLをダウンロードする(.NET用IronOCR)を手動でインストールする。
.NETコーダーであれば、このページのサンプルを使って5分でIronOCRを使い始めることができます。
以下の比較記事をご覧いただきたい:AWS vs Google Vision(OCR機能比較). OCR技術を提供するその他のサービスについては、こちらをご覧ください。