WindowsのOfficeでOCRできんじゃないか?? with Teeseract

本文上広告1



過去の記事で、AndroidのOffice LensとかだとOCRできますという記事をかいたのですが、今回はTesseractというライブラリを使って、WordでOCRをできないか?をアドイン仕立てにして、実験してみました。

ほしい機能・やりたいこと Office系ソフトで画像から文字を読み込みたいOffice系ソフトで画像から文字を抽出したい モバイルアプリ 早...

実験結果

意外に簡単?にできそう?まぁ、ソースコードではごく簡単で、理想的な画像では簡単に実装できましたし、読み取った文字列を表示できました。他の画像での使い勝手が分からないところです。。精度や使い勝手がよかったら、エクセルのアドインにも仕立てあげられるなぁ。。

上が読み取り元の画像、下が読み取ったテキスト

参考にしたソースはコードはこのリンクを参照しました。ありがとうございます。

http://whoopsidaisies.hatenablog.com/entry/2013/12/16/174819

英語のエンジンはこちらのGitHubからダウンロード。

テスト中のコードを晒してみます。殆ど工夫もへったくれもありませんが。。

 // OCRを行うオブジェクトの生成
 //  言語データの場所と言語名を引数で指定する
 var tesseract = new Tesseract.TesseractEngine(
     @"C:\tessdata", // 言語ファイルを「C:\tessdata」に置いた場合
     "eng");         // 英語なら"eng" 「○○.traineddata」の○○の部分

 // 画像ファイルの読み込み
 var img = new System.Drawing.Bitmap(ofd.FileName);
 // OCRの実行と表示
 var page = tesseract.Process(img);
 System.Console.Write(page.GetText());

 //https://docs.microsoft.com/ja-jp/visualstudio/vsto/how-to-programmatically-insert-text-into-word-documents?view=vs-2019

// Wordにアクセスします。
 Microsoft.Office.Interop.Word.Application word = Globals.ThisAddIn.Application;

 object start = 0;
 object end = 0;

//テキストの挿入
 Microsoft.Office.Interop.Word.Range rng = word.ActiveDocument.Range(ref start, ref end);
 rng.Text = page.GetText();

//画像の挿入
 word.Selection.InlineShapes.AddPicture(ofd.FileName);


またいろいろテストしてみて、使いがって等を確認してみます。

追記

新しく学習データを作る際は、オフィシャルの方の学習ツールを使用する必要あり。C#ではラッパだけ。

こんな感じでCentOS上で.shで学習させている方がおられた。もうお一方

現時点ではTesseract 4 での.shで学習させるのがベストっぽい。

後は、 Microsoft OCR(Windows.Media.Ocr)をWPF/WinFormsで使うかな。Microsoft OCR(Windows.Media.Ocr)は優秀だよというお話とか。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする