2019年12月24日火曜日

棋譜OCRプログラムの軌跡(10)小さな画像では?

いままで、電子書店パピレスのNHK 囲碁講座 テキストの棋譜を、Webブラウザの拡大ボタンを3回クリックして大きな画像にして、Snipping Toolで切り取っていましたが、もっと小さな画像でも処理できないか、試してみました。
拡大ボタンを3回クリックすると エラーなしで解析できた(ここを参照)第2局の第1図をクリック回数を減らして取り込んだ結果は下表のとおりです。
(各画像は縮小されています。クリックすると原寸大で表示されます。)
拡大ボタン
クリック回数
取り込んだ画像マス目の
大きさ
解析結果 エラーの状態
なし(原寸)x = 11.777
y = 11.722
お話にならない状態
1x = 17.611
y = 17.555
殆どの白が
認識できていません
2x = 23.444
y = 23.388
(3,16)白4を1と誤認識
3x = 29.333
y = 29.277
全くエラーなし

前回実験したように、マス目の大きさが約40ピクセルが最も認識率が高かったことから、OpenCvのResizeメソッドを使って画像の拡大した結果を使って、Tesseractで解析してみました。
// clsDxDy:マス目の大きさを返すクラス
// src    :入力した画像
// src2   :拡大した画像

double ratio = Math.Floor(40.0 / clsDxDy.dx * 100) / 100.0;
Mat src2 = new Mat();
Cv2.Resize(src, src2, new OpenCvSharp.Size(src.Width * ratio, src.Height * ratio), 0, 0, InterpolationFlags.Cubic);

拡大処理の結果を下表に示します。

拡大ボタン
クリック回数
解析結果 エラーの状態
なし(原寸)全ての石が認識不可
1多少認識できる白石は
増えましたが
まだまだ
2,3全くエラーなし

「拡大なし」および「拡大1回」の場合、一挙に2倍以上の拡大率で図形を拡大したことにより画像が粗くなり、結果期待した結果に結びつかなかったと考え、1.25倍の拡大を繰り返し、目的の倍率まで拡大してみました。
                    double alpha = 1.25;
                    double r = 1.0;
                    ratio = 38.0 / 40.0 * ratio;
                    Mat matw = src.Clone();
                    while (r < ratio)
                    {
                        Cv2.Resize(matw, matw, new OpenCvSharp.Size(matw.Width * alpha, matw.Height * alpha), 0, 0, InterpolationFlags.Linear);
                        r = r * alpha;
                    };


その結果は?

拡大ボタン
クリック回数
解析結果 エラーの状態
なし(原寸)白石は、全て認識不可
黒石の位置は殆ど認識
しているが、手順場号は
取得できない。
1石の認識漏れはない

(6,17)白20認識不能
(11,3)白30認識不能
(13,3)白26を5と誤認識
(13,9)黒37を3と誤認識
(14,10)白36を3と誤認識
(17,11)白34認識不能
(18,15)黒35を5と誤認識

ブラウザの拡大ボタンで図形を全く拡大しない状態で取り込んだ画像は、黒石の位置は大方取得できるものの、白石の位置 および 白黒とも手順番号の取得は、全くできません。取得した図形そのものを見てみると、図形そのものの鮮明さに欠け多くを期待できないように思います。
拡大ボタンを一回クリックした場合には、石の広い漏れはなく、段階的に拡大した効果が見られます。

以上の結果から マス目の大きさにより段階的に拡大する方法を実装することにしました。ただし実用的な精度で手順番号を認識するには、マス目の大きさは20ピクセルを超える大きさが必要なようです。

ところで、図形拡大の際、補完手法として Cubic,Nearest,Linear,Area,Lanczos4が利用できるようですが、実験の結果では、Nearest以外 結果として大差ありません。なおNearestは石の認識が全く不能になるなど 今回の目的には使えませんでした。


開発環境
 OS:Windows10
 言語:C#(WPF使用)
 IDE:VisualStudio2019
 仕様Tool:OpenCvSharp v4.0.0.20181129
      Tesseract v3.3.0.0
 使用電子本:電子書店パピレスのNHK 囲碁講座 テキスト

0 件のコメント:

コメントを投稿