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

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

やりたい事

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

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

実行環境

  • 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を使ってインストールする)

環境変数の設定

変数
PathC:\Program Files(x86)\Tesseract-OCR
TESSDATA_PREFIXC:\Program Files(x86)\Tesseract-OCR\tessdata

スクリプト

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



		


解説(というかメモ)

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

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

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です