hirakun-jpの日記

日記を書きます

画像中の数字を取得する

タイトル通り。

下記の投稿を参考に(というかほぼそのまんまですすみません)OCRがどんなものか試してみました。 C#で文字認識をする(導入)

時間の計測は下記の投稿を参考にさせていただきました。 C#メモ 処理時間計測

string langPath = @"C:\Users\dev\Excel_Service\tessdata\tesseract-ocr\tessdata";
            string langStr = "jpn";

            // 画像ファイル
            var img = new Bitmap(@"C:\Users\dev\Excel_Service\images\num_example_oanda_web_002.png");

            using (var tesseract = new Tesseract.TesseractEngine(langPath, langStr))
            {
                // OCR実行
                Tesseract.Page page = tesseract.Process(img);


                // 計測
                var sw = new System.Diagnostics.Stopwatch();
                sw.Start();

                // OCR表示
                textBlockOCR.Text = page.GetText();

                // 処理時間表示
                sw.Stop();
                textBlockTime.Text = sw.ElapsedMilliseconds.ToString() + "ms";


            }

画像データ

f:id:hirakun-jp:20180604165707p:plain

結果

f:id:hirakun-jp:20180604165839p:plain

画像小さいから?はやい(ベンチマークないし根拠ありません)かんじ(リリースビルドだと33msだった)。 間違った画像について正解情報与えて学習とかってできるのかな?調べよう。

それと、自分のやりたいこと的に、数字だけ扱えればいいんだけど、Accord.Netとか機械学習ライブラリつかって自分で作ったほうがいいのかな? まずは、Tesseractに再学習機能あるか調べよう。

あと、グレースケール?するともっとよくなったりするかもしれないし、使ったTesseractはバージョン3.0.2なので、最新の4.0.0にしたらもっとよくなるかもしれない(LSTMとかいう機械学習の手法使ってるらしい)。