【元の画像】
【解析結果】
一桁の数字は、全く検出できていません。
ググると、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 件のコメント:
コメントを投稿