目次
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 tessera...
<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の処理時間等も確認していきたい。
コメント