【C#】tesseract-ocrを使ってOCRアプリを作ってみた

プログラミング

目次

1. 目的

Tesseract-ocrを利用してOCRアプリケーションを作成しましたので、紹介したいと思います。

2.やりたい事

数字が描かれた画像を読み込んでOCRで数字データを出力したい。今のところ、日本語や英語のOCRは必要ない。出力としては、最低限テキストデータが出力出来ればよいが、結果のわかりやすさを考慮するとOCR結果を画像に書きこんだ画像データも出力したい。

取りあえず、過去にC#とOpenCVSharpを使って作成したアプリケーションを流用して、OCRを組み込んでみた。

3. 実行環境

  • OS : Windows7 (64bit)
  • tesseract-ocr : 3.3.0(C#のプロジェクト側で必要な
    tesseract-ocrの本体 。こちらは、NuGetを使ってインストールする)
  • traindata : tesseract-ocr で使用する traineddataをダウンロードする。今回は、Windows環境にtesseract-ocr 3.05.01をインストールした際に自動的にインストールされるeng.traineddataを使用した。
    tesseract-ocr 本体は要らないってこともあるので、 traineddata だけのダウンロードできるはず(たぶん)。
    また、Windows環境の tesseract-ocr インストーラーはここからダウンロードできる(たぶん)。https://github.com/UB-Mannheim/tesseract/wiki
  • Image Processing : OpenCVSharp v4.0.30319
    (NuGetを使ってインストールする)

4. 環境変数の設定

変数
Path C:\Program Files(x86)\Tesseract-OCR
TESSDATA_PREFIX C:\Program Files(x86)\Tesseract-OCR\tessdata

5. スクリプト

C#のスクリプトはここを参考にさせていただきました。

C#で文字認識(tesseract-ocrのラッパを使う方法) - whoopsidaisies's diary
tesseract-ocr tesseract-ocrはオープンソースのOCR(光学文字認識)エンジン.60以上の言語に対応しており,日本語の文字認識も可能. A .Net wrapper for tesseract-ocr tesseract-ocrはapiが用意されているが,そのC#ラッパー「A .Net wrap...
<pre>[Csharp]
//traineddataの読み込み
var tesseract = new Tesseract.TesseractEngine(@"C:\Program Files (x86)\Tesseract-OCR\tessdata", "eng");

// 画像ファイルの読み込み(FileNameが画像ファイルのフルパス)
var src_ocr = new System.Drawing.Bitmap(FileName); 

// OCRの実行
var page = tesseract.Process(src_ocr);

//結果の表示
//コンソールへ出力する場合
System.Console.Write(page.GetText());

//csvへ出力する場合
string result_ocr = page.GetText();
sw.WriteLine(result_ocr);
[/Csharp]</pre>
<pre class="wp-block-syntaxhighlighter-code">

5. 解説(というかメモ)


まず、traineddataの読み込む必要がある。アプリケーションを配布することを考えると、必要最低限の traineddataは実行ファイル一式に 同梱する方が便利だと思うので、このあたりも検討の余地あり。ただし、eng.traineddataは21MBくらいあるので、毎回配布するには少し容量が大きすぎるのが難点。数字だけのtraineddataとかあればもう少し容量が削減されそうな気がする。


tesseractでOCRを実行する際は、Bitmapで渡す。入力された画像に対して、処理範囲を事前に指定するなど、画像処理との連携が必要なので、今後は、OpenCVのMat型で渡すことが可能かどうか検討したい。


今後はOCRの処理時間等も確認していきたい。

      

コメント

タイトルとURLをコピーしました