C#およびVB.NETでOCRを始める
IronOCRは、.NETプラットフォームのソフトウェア開発者が画像やPDFドキュメントからテキストを認識して読み取ることを可能にするC#ソフトウェアライブラリです。 それは、最も高度なTesseractエンジンを使用した純粋な.NET OCRライブラリです。
インストール
NuGetパッケージマネージャーでインストール
Visual StudioやコマンドラインのNuGetパッケージマネージャーでIronOCRをインストールします。 Visual Studio で、コンソールに移動します:
- ツール ->
- NuGet パッケージ マネージャー
- パッケージ マネージャー コンソール
Install-Package IronOcr
また、バージョンの更新やインストールについての詳細は、NuGetのIronOcrをご覧ください。
他のプラットフォーム向けに利用できるIronOCR NuGet パッケージがあります。
- Windows: https://www.nuget.org/packages/IronOcr
- Linux: https://www.nuget.org/packages/IronOcr.Linux
- MacOs: https://www.nuget.org/packages/IronOcr.MacOs
- MacOs (ARM): https://www.nuget.org/packages/IronOcr.MacOs.ARM
IronOCRの.ZIPをダウンロード
また、IronOCRを .ZIPファイルとしてダウンロードすることもできます。 DLLを直接ダウンロードをクリックしてください。 .zipファイルをダウンロードしたら:
.NET Framework 4.0以降のインストール手順:
- net40フォルダのIronOcr.dllをプロジェクトに含めてください。
-
次に、アセンブリ参照を追加します:
-
System.Configuration
-
System.Drawing
- System.Web
-
.NET Standard & .NET Core 2.0+、および.NET 5のための指示
- netstandard2.0フォルダ内のIronOcr.dllをプロジェクトに含めてください。
-
次に、NuGetパッケージ参照を追加します:
* System.Drawing.Common 4.7以上
IronOCRインストーラーをダウンロードする(Windowsのみ)
もう一つの選択肢は、IronOCRのインストーラーをダウンロードすることです。これにより、IronOCRが即座に動作するために必要なすべてのリソースがインストールされます。 このオプションはWindowsシステム専用ですので、ご注意ください。 インストーラーをダウンロードするには、こちらをクリックしてください。 .zipファイルをダウンロードしたら:
.NET Framework 4.0以降のインストール手順:
- net40フォルダのIronOcr.dllをプロジェクトに含めてください。
-
次に、アセンブリ参照を追加します:
-
System.Configuration
-
System.Drawing
- System.Web
-
.NET Standard & .NET Core 2.0+、および.NET 5のための指示
- netstandard2.0フォルダ内のIronOcr.dllをプロジェクトに含めてください。
-
次に、NuGetパッケージ参照を追加します:
* System.Drawing.Common 4.7以上
なぜIronOCRを選ぶのか?
IronOCRは、インストールが簡単で、完全かつ詳細なドキュメントを備えた.NETソフトウェアライブラリです。
IronOCRを選択して、外部のWebサービスや継続的な料金を使用したり、機密文書をインターネット経由で送信したりすることなく、99.8%+のOCR精度を達成してください。
C# 開発者がIronOCRをVanilla Tesseractより選ぶ理由:
- 単一のDLLまたはNuGetとしてインストール
- Tesseract 5、4、および3エンジンをすぐに利用可能です。
- 精度 99.8% は通常のTesseractを大幅に上回ります。
- 驚異的な速度とマルチスレッド
- MVC、Webアプリ、デスクトップ、コンソール、サーバーアプリケーション対応
- 作業するための実行可能ファイルやC++コードはありません。
- 完全なPDF OCRサポート
- ほとんどすべての画像ファイルまたはPDFに対してOCRを実行します
- 完全な .NET Core、Standard、および FrameWork のサポート
- Windows、Mac、Linux、Azure、Docker、Lambda、AWS にデプロイ
- バーコードとQRコードを読み取る
- XHTMLにOCRをエクスポート
- 検索可能なPDFドキュメントにOCRをエクスポート
- マルチスレッドのサポート
- 125の国際言語はすべてNuGetまたはOcrDataファイルで管理されています。
- 画像、座標、統計情報、フォントを抽出する。 テキストだけではありません。
-
商用および専有アプリケーション内でTesseract OCRを再配布するために使用できます。
IronOCR は、写真やデジタルノイズや不完全な部分がある低解像度のスキャンのような実際の画像や不完全なドキュメントを扱う際に際立っています。
他の無料のOCRライブラリである他の.NET Tesseract APIやウェブサービスは、これらの実際の使用ケースではあまり効率的に動作しません。
Tesseract 5 を使用した OCR - C#でコードを始めよう
以下のコードサンプルは、C#またはVB .NETを使用して画像からテキストをどれほど簡単に読み取るかを示しています。
ワンライナー
:path=/static-assets/ocr/content-code-examples/get-started/get-started-1.cs
string Text = new IronTesseract().Read(@"img\Screenshot.png").Text;
Dim Text As String = (New IronTesseract()).Read("img\Screenshot.png").Text
設定可能なHello World
:path=/static-assets/ocr/content-code-examples/get-started/get-started-2.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
// Add multiple images
input.LoadImage("images/sample.jpeg");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
' Add multiple images
input.LoadImage("images/sample.jpeg")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
C# PDF OCR
同じアプローチを使って、任意のPDFドキュメントからテキストを抽出することもできます。
:path=/static-assets/ocr/content-code-examples/get-started/get-started-3.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
// We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password: "password");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
// 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages");
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
' We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password:= "password")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
' 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages")
マルチページTIFFのためのOCR
:path=/static-assets/ocr/content-code-examples/get-started/get-started-4.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("multi-frame.tiff", pageindices);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("multi-frame.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
バーコードとQR
IronOCRのユニークな機能の一つは、テキストをスキャンしている最中にドキュメントからバーコードやQRコードを読み取ることができる点です。 OcrResult.OcrBarcode
クラスのインスタンスは、開発者に各スキャンされたバーコードに関する詳細な情報を提供します。
:path=/static-assets/ocr/content-code-examples/get-started/get-started-5.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
input.LoadImage("img/Barcode.png");
OcrResult Result = ocr.Read(input);
foreach (var Barcode in Result.Barcodes)
{
// type and location properties also exposed
Console.WriteLine(Barcode.Value);
}
Imports IronOcr
Private ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
input.LoadImage("img/Barcode.png")
Dim Result As OcrResult = ocr.Read(input)
For Each Barcode In Result.Barcodes
' type and location properties also exposed
Console.WriteLine(Barcode.Value)
Next Barcode
End Using
画像上の特定の領域でのOCR
IronOCRのすべてのスキャンおよび読取りメソッドは、読み取りたいページの特定の部分を正確に指定する機能を提供します。 標準化されたフォームを確認するときに非常に役立ち、非常に多くの時間を節約し、効率を向上させることができます。
クロップ領域を使用するには、System.Drawing
へのシステム参照を追加して、System.Drawing.Rectangle
オブジェクトを使用できるようにする必要があります。
:path=/static-assets/ocr/content-code-examples/get-started/get-started-6.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
// Dimensions are in pixel
var contentArea = new System.Drawing.Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };
input.LoadImage("document.png", contentArea);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
' Dimensions are in pixel
Private contentArea = New System.Drawing.Rectangle() With {
.X = 215,
.Y = 1250,
.Height = 280,
.Width = 1335
}
input.LoadImage("document.png", contentArea)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
低品質スキャン用OCR
IronOCR のOcrInput
クラスは、通常のTesseractでは読み取れないスキャンを修正できます。
:path=/static-assets/ocr/content-code-examples/get-started/get-started-7.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);
// fixes digital noise and poor scanning
input.DeNoise();
// fixes rotation and perspective
input.Deskew();
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageindices)
' fixes digital noise and poor scanning
input.DeNoise()
' fixes rotation and perspective
input.Deskew()
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
検索可能なPDFとしてOCR結果をエクスポート
:path=/static-assets/ocr/content-code-examples/get-started/get-started-8.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Quarterly Report";
input.LoadImage("image1.jpeg");
input.LoadImage("image2.png");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("image3.gif", pageindices);
OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Quarterly Report"
input.LoadImage("image1.jpeg")
input.LoadImage("image2.png")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("image3.gif", pageindices)
Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable.pdf")
TIFFから検索可能なPDFへの変換
:path=/static-assets/ocr/content-code-examples/get-started/get-started-9.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageindices);
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("example.tiff", pageindices)
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf")
OCR結果をHTMLとしてエクスポート
:path=/static-assets/ocr/content-code-examples/get-started/get-started-10.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Html Title";
input.LoadImage("image1.jpeg");
OcrResult Result = ocr.Read(input);
Result.SaveAsHocrFile("results.html");
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Html Title"
input.LoadImage("image1.jpeg")
Dim Result As OcrResult = ocr.Read(input)
Result.SaveAsHocrFile("results.html")
OCR画像強調フィルター
IronOCRはOCRパフォーマンスを向上させるために、OcrInput
オブジェクトにユニークなフィルターを提供します。
画像強調のコード例
:path=/static-assets/ocr/content-code-examples/get-started/get-started-11.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.LoadImage("LowQuality.jpeg");
// fixes digital noise and poor scanning
input.DeNoise();
// fixes rotation and perspective
input.Deskew();
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
input.LoadImage("LowQuality.jpeg")
' fixes digital noise and poor scanning
input.DeNoise()
' fixes rotation and perspective
input.Deskew()
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
OCR画像フィルターのリスト
IronOCRに組み込まれているOCR性能を向上させる入力フィルターには以下が含まれます:
- OcrInput.Rotate( double degrees) - 画像を指定した度数だけ時計回りに回転させます。反時計回りにする場合は負の数を使用します。
- OcrInput.Binarize() - この画像フィルターは、すべてのピクセルを中間色なしで黒または白に変換します。 OCRのパフォーマンスをテキストと背景のコントラストが非常に低い場合に改善する可能性があります。
- OcrInput.ToGrayScale() - このイメージフィルターは、すべてのピクセルをグレースケールの階調に変換します。 OCRの精度を向上させる可能性は低いが、速度の向上は期待できる。
- OcrInput.Contrast() - コントラストを自動的に高めます。 このフィルターは、低コントラストのスキャンにおいて、OCRの速度と精度を向上させることがよくあります。
- OcrInput.DeNoise() - デジタルノイズを除去します。このフィルターは、ノイズが予想される場合にのみ使用してください。
- OcrInput.Invert() - すべての色を反転させます。 例えば、白が黒になります:黒が白になります。
- OcrInput.Dilate() - 高度な形態学。 膨張は、画像内のオブジェクトの境界にピクセルを追加します。 「Erode」の反対語
- OcrInput.Erode() - 高度な形態学。 エロージョンは、オブジェクトの境界にあるピクセルを除去します。拡張の反対
- OcrInput.Deskew() - 画像を正しい向きにし、直交させるように回転させます。 これは、OCRに非常に役立ちます。なぜなら、Tesseractの傾きの許容範囲は5度程度と低いためです。
- OcrInput.EnhanceResolution - 低品質な画像の解像度を向上させます。 このフィルターは、OcrInput.MinimumDPI および OcrInput.TargetDPI が低解像度の入力を自動的に検出して解決するため、あまり必要ではありません。
- EnhanceResolutionは、低解像度の画像(275 dpi未満)を自動的に検出し、画像をアップスケールしてテキストをすべて鮮明にし、OCRライブラリで完璧に読み取れるようにする設定です。 この操作自体は時間がかかりますが、一般的に画像に対するOCR操作の全体的な時間を短縮します。
- 言語 IronOCRは22の国際言語パックをサポートしており、言語設定を使用してOCR操作に適用する1つ以上の複数の言語を選択できます。
- 戦略 IronOCR は 2 つの戦略をサポートしています。 ドキュメントのスキャンにおいて、迅速かつあまり正確でない方法を選択するか、あるいは、文の中の単語間の統計的関係を考慮してOCRテキストの精度を自動的に向上させるためにいくつかの人工知能モデルを使用する高度な戦略を選択することができます。
- ColorSpaceは、グレースケールまたはカラーでOCRを行うように選択できる設定です。 一般的に、グレースケールが最適なオプションです。 しかし、似たような色相を持つテキストや背景がある場合でも、完全なカラースペースを使用するとより良い結果を得ることができます。
- DetectWhiteTextOnDarkBackgrounds. 一般的に、すべてのOCRライブラリは白い背景に黒い文字が表示されることを予期しています。 この設定により、IronOCRはネガティブ画像や白い文字がある暗いページを自動的に検出して読み取ることができます。
- InputImageType。 この設定により、開発者はOCRライブラリに対して、全体のドキュメントを見ているのか、スクリーンショットのようなスニペットを見ているのかを指示することができます。
- RotateAndStraighten は高度な設定で、IronOCRに、回転しているだけでなく、例えばテキストドキュメントの写真のように透視図法を含むドキュメントを読み取るユニークな能力を与えます。
- ReadBarcodes は、IronOCR がテキストを読み込む際に、ページ上のバーコードや QR コードも自動的に読み取ることを可能にする便利な機能であり、大きな時間的負担を追加することなく行われます。
- ColorDepth。 この設定は、OCRライブラリが色の深さを判定するために使用する1ピクセルあたりのビット数を決定します。 色深度を高くするとOCRの品質が向上する可能性がありますが、OCR操作の完了に必要な時間も増加します。
125 言語パック
IronOCRは、言語パックを介して125の国際言語をサポートしており、これらはDLLとして配布されています。それらはこのウェブサイトまたはNuGet パッケージ マネージャーからダウンロードできます。
ドイツ語、フランス語、英語、中国語、日本語を含む多くの言語があります。 パスポートMRZ、MICRチェック、金融データ、ナンバープレートなどのための専門的な言語パックが存在します。 また、自分で作成したものを含む任意のtesseractの「.traineddata」ファイルも使用できます。
言語例
:path=/static-assets/ocr/content-code-examples/get-started/get-started-12.cs
using IronOcr;
// PM> Install IronOcr.Languages.Arabic
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;
using OcrInput 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.
OcrResult result = ocr.Read(input);
// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
result.SaveAsTextFile("arabic.txt");
Imports IronOcr
' PM> Install IronOcr.Languages.Arabic
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.Arabic
Using input As 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 As OcrResult = ocr.Read(input)
' Console can't print Arabic on Windows easily.
' Let's save to disk instead.
result.SaveAsTextFile("arabic.txt")
End Using
複数言語の例
複数の言語を同時に使用してOCRを行うことも可能です。これにより、ユニコード文書内の英語のメタデータやURLを取得するのに非常に役立ちます。
:path=/static-assets/ocr/content-code-examples/get-started/get-started-13.cs
using IronOcr;
// PM> Install IronOcr.Languages.ChineseSimplified
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
// We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English);
using OcrInput input = new OcrInput();
input.LoadPdf("multi-language.pdf");
OcrResult result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
Imports IronOcr
' PM> Install IronOcr.Languages.ChineseSimplified
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
' We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English)
Using input As New OcrInput()
input.LoadPdf("multi-language.pdf")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsTextFile("results.txt")
End Using
詳細なOCR結果オブジェクト
IronOCRは各OCR処理のためにOCR結果オブジェクトを返します。 一般的に、開発者はこのオブジェクトのテキストプロパティのみを使用して、画像からスキャンされたテキストを取得します。 しかし、OCR結果のDOMはこれよりもはるかに高度です。
:path=/static-assets/ocr/content-code-examples/get-started/get-started-14.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
// Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\sample.tiff", pageindices);
OcrResult result = ocr.Read(input);
var pages = result.Pages;
var words = pages[0].Words;
var barcodes = result.Barcodes;
// Explore here to find a massive, detailed API:
// - Pages, Blocks, Paraphaphs, Lines, Words, Chars
// - Image Export, Fonts Coordinates, Statistical Data, Tables
Imports IronOcr
Private ocr As New IronTesseract()
' Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\sample.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
Dim pages = result.Pages
Dim words = pages(0).Words
Dim barcodes = result.Barcodes
' Explore here to find a massive, detailed API:
' - Pages, Blocks, Paraphaphs, Lines, Words, Chars
' - Image Export, Fonts Coordinates, Statistical Data, Tables
End Using
パフォーマンス
IronOCRは、パフォーマンス調整や入力画像の大幅な変更なしにそのまま動作します。
速度は驚異的: IronOCR.2020 + は以前のバージョンに比べて最大10倍速く、エラーが250%以上少なくなっています。
詳しくはこちら
C#、VB、F#またはその他の.NET言語におけるOCRについてもっと知りたい方は、弊社のコミュニティチュートリアルをお読みください。このチュートリアルでは、IronOCRの使用例を実際のシナリオで示し、このライブラリを最大限に活用するためのニュアンスが紹介されています。
.NET 開発者向けの API リファレンス も利用可能です。