画像中の数字を取得する
タイトル通り。
下記の投稿を参考に(というかほぼそのまんまですすみません)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"; }
画像データ
結果
画像小さいから?はやい(ベンチマークないし根拠ありません)かんじ(リリースビルドだと33msだった)。 間違った画像について正解情報与えて学習とかってできるのかな?調べよう。
それと、自分のやりたいこと的に、数字だけ扱えればいいんだけど、Accord.Netとか機械学習ライブラリつかって自分で作ったほうがいいのかな? まずは、Tesseractに再学習機能あるか調べよう。
あと、グレースケール?するともっとよくなったりするかもしれないし、使ったTesseractはバージョン3.0.2なので、最新の4.0.0にしたらもっとよくなるかもしれない(LSTMとかいう機械学習の手法使ってるらしい)。