TesseractOCRアプリケーションの作成について <手順1.OCR.exeを作成>

1.VisualStudioでコンソールアプリケーション(.Net Core)を作成する



2.Nugetで「Tesseract」を検索して、インストールする


3.プロジェクトを右クリックして、「新しいフォルダ」を作成し、「tessdata」と名前を付ける




4.tessdataに学習済みデータをダウンロードする
    学習済みデータ(jpn.traineddataは横書き、jpn_vert.traineddataは縦書き)
       https://github.com/tesseract-ocr/tessdata_best
  
       もしくは、https://packages.ubuntu.com/focal/tesseract-ocr-jpnから
       「[tesseract-lang_4.00~git30-7274cfa.orig.tar.xz]」をダウンロードして
       解凍した中に含まれている「jpn.traineddata、jpn_vert.traineddata」を
       コピーする。
       こちらのほうが精度が高いが解凍ソフトを別途インストールする必要あり。
       解凍ソフト:7-Zip File Manager

      ダウンロード後のフォルダ





           それぞれのファイルのプロパティを変更しないとコンパイル時に
           ファイルがコピーされない。

5.関数を追加します。
        private static void DoOcr(string ImagePath)
        {
            //using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
            using (var engine = new TesseractEngine("tessdata", "jpn", EngineMode.Default))
            {
                using (var img = Pix.LoadFromFile(ImagePath))
                {
                    using (var page = engine.Process(img))
                    {
                        // 文末の改行を除く
                        var text = page.GetText().Replace(" ", "").TrimEnd('\r', '\n');
                        Console.WriteLine(string.Format("精度: {0}", page.GetMeanConfidence()));
                        Console.WriteLine(string.Format("読取結果: \r\n{0}", text));
                    }
                }
            }
        }


6.Main関数を修正します。
        static void Main(string[] args)
        {
            Console.WriteLine("読取を開始します");

            Console.WriteLine("");
            DoOcr("OcrSample_Jpn.png");
            Console.WriteLine("");

            Console.WriteLine("読取を終了します");
            
            Console.WriteLine("複数行の読取を開始します");
            
            Console.WriteLine("");
            DoOcr("OcrSample_Jpn_Multiline.png");
            Console.WriteLine("");

            Console.WriteLine("複数行の読取を終了します");


            Console.ReadKey(true);
        }

7.結果の確認をします。
    ・読み込ませる画像(OcrSample_Jpn.png)

    ・結果
       


    ・読み込ませる画像(OcrSample_Jpn_Multiline.png)


    ・結果

8.まとめ
 フリーのOSSでここまでの精度で読めるのであれば印字文字については十分なんじゃなかろうか。学習済みデータを自分で再学習することができればさらに精度を上げられそう。できれば手書き数字と手書きアルファベットまではやってみたいな・・・。ネットで探すと元データは結構あるみたいだし。まぁ手間を考えると必要に迫られたら市販ソフトを購入したほうがいいだろうけども。





0 件のコメント:

コメントを投稿

PowerShellでEdgeを自動化(インストール不要。参考:郵便追跡サービス自動操作)

1.経緯について  RPAのソフトをインストールできないので、これまでVBSでCreateObjectでブラウザの自動操作をすることがたまにあった。 ※いざというときの手札として持っているだけで安心感が段違い  見た目上IEがインストールされていなくても、CreateObject...