OfficeでOCRできた!! with Teeseract

OCR
スポンサーリンク
スポンサーリンク

結果

過去の記事で、AndroidのOffice LensとかだとOCRできますという記事をかいたのですが、調査していくとTesseractというライブラリを使って出来そうということで、テスト+調査を繰り返し、最終的にWordでOCRをするアドイン仕立てにすることができました。無料でフリーのアドインです。

着想

過去の記事で、AndroidのOffice LensとかだとOCRできますという記事をかいたのですが、 Tesseractというライブラリが使いがってがよさそうでしたので、色々とやってみました。

途中経過

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

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

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

英語のエンジンはこちらの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)は優秀だよというお話とか。

追記 その2

「図として保存」で有用なのは、パワポ・ワードぐらいなのですが、画像ならまぁ扱えそうなので、サクッと作ってみても良いのかも。。

加工した図を保存できる機能。下の方にVSTOの関数を載せてます。

追記 その3

だいぶアドインの開発できてきました。まずはWordのアドインのみですが、英語のOCRはもちろん可能。

開発途中のイメージ1

 

学習済みのデータもUIからダウンロードして、韓国語もOCRできるようになりました。(「韓国語 画像」で検索して、ここよりWordに貼り付けて読み取り。)

元の画像には一部日本語が書かれているため、一部誤検知しています。
OCRの結果を一部削除。概ねOCRで認識可能でした。

追記 その4 Word用アドイン完成しました

上記のような経緯を経て、最終的にWord用OCRアドインできました。冒頭の結果の部分をご覧ください。

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