【元の画像】
【解析結果】
一桁の数字は、全く検出できていません。
ググると、Pythonでの対策方法が載っていて、configパラメータで指定するとのこと。それを参考に、ConfigFileを作成してみましたが、 -psm なんてパラメータはないよ!! と 異常終了してしまいました。
あきらめかけたのですが、ようやく Stack overflow に1文字対応の方法を見つけました。
【一文字に対応した 文字検出処理】
以前投稿した、黒石の手順番号検出処理を以下のように変更しました。
//黒四角を判定 if (Cv2.CountNonZero(matw) < 5) return "--"; //縦横3倍のMatを準備する Mat mat = new Mat(matw.Width * 3, matw.Height * 3, MatType.CV_8UC1, Scalar.Black); //中央に貼り付け var rect = new OpenCvSharp.Rect(matw.Width, matw.Height, matw.Width, matw.Height); mat[rect] = matw; //tesseract用のbitmapを準備する Bitmap bitmap = mat.ToBitmap(); // 言語データの場所と言語名を引数で指定する var tesseract = new Tesseract.TesseractEngine(@"C:\temp\tessdata", "eng"); tesseract.SetVariable("tessedit_char_whitelist", "1234567890"); // OCRの実行 Tesseract.Page page = tesseract.Process(bitmap); string str = page.GetText(); // 1文字対応 if (str == "") { page.Dispose(); // Disposeしないとエラーになる // ページモードに1文字を設定する Tesseract.Page pg = tesseract.Process(bitmap, Tesseract.PageSegMode.SingleChar); str = pg.GetText(); } return str.Trim();
【一文字対応処理を施した結果】
一桁の数字も認識できるようになりました。
参考にしたサイト
・Python + pyocr で ocr したら高認識率で1桁数字も認識した
・Python - Pytesseractで画像内の数字を読む
・Tesseract.Net parameters
ここまで実装できなかったConfig関連 残念!!
実際に実装したのは
・How to set Tesseract 2 to read a SINGLE char in C#?
・Python + pyocr で ocr したら高認識率で1桁数字も認識した
・Python - Pytesseractで画像内の数字を読む
・Tesseract.Net parameters
ここまで実装できなかったConfig関連 残念!!
実際に実装したのは
・How to set Tesseract 2 to read a SINGLE char in C#?
開発環境
OS:Windows10
言語:C#(WPF使用)
IDE:VisualStudio2019
仕様Tool:OpenCvSharp v4.0.0.20181129
Tesseract v3.3.0.0
使用電子本:電子書店パピレスのNHK 囲碁講座 テキスト
OS:Windows10
言語:C#(WPF使用)
IDE:VisualStudio2019
仕様Tool:OpenCvSharp v4.0.0.20181129
Tesseract v3.3.0.0
使用電子本:電子書店パピレスのNHK 囲碁講座 テキスト
0 件のコメント:
コメントを投稿