2019年12月14日土曜日

棋譜OCRプログラムの軌跡(9)高DPIのPCでは?

ここまで、Dell Inspiron5759を使って棋譜図読み取りを試みてきましたが、手元に HP ENVY 15 x360があったので、これを使って読み取ってみました。
Inspiron5759は、Windows標準の画面解像度(DPI=96)に対し、ENVYはDPI=120です。その結果は、信じられないほどの認識率!!


1
図1図2
エラーなしエラーなし
図3図4
(11,8)白△を1エラーなし
図5
エラーなし

2
図1図2
エラーなし (17,6)白△を1
(17,7)白△を1
図3図4
(13,7)白△を1
(13,8)白△を1
(17,12)黒▲を誤検出
エラーなし
図5図6
エラーなし エラーなし

3
図1図2
エラーなし (18,15)黒77認識不能
図3図4
エラーなし エラーなし
図5図6
(8,11)白△を1 エラーなし

4
図1図2
エラーなし エラーなし
図3図4
エラーなし (9,11)白△を1
(9,12)白△を1
図5
エラーなし


上図に示す通り、第3局図2の(18,15)の黒77を認識できなかったことを除き、白△・黒▲以外の石は全て正常に読み取ることができました。

高DPIで取り込んだ画像データに対応するために行った修正は、以下の通りです。

  • 白石処理 (ここを参照
    左右から、黒ピクセルの連続が3以下ならば、白ピクセルに置き換える。
    この部分を4以下に変更。
    くっつき対策で、縦方向に連続して2ピクセルが 黒ピクセルの場合、白に置き換える。
    この部分を3ピクセルに変更。
  • 黒石処理 (ここを参照
    周囲の白を黒で埋める際、左端・上端を無条件に黒に置き換えた部分に、右端・下端も加えた。(注1)
  • 輪郭を求める際、縦線・横線の座標を求めることに加え、念のために検出した輪郭上の石の中心座標で補正を加えていたが、この補正処理を除去。(注2)

(注1)標準DPI(96DPI)の場合、右端・下端も加えるとかえってエラーが増えた。そのため高DPIの場合のみ右端・下端も加えるようにした。

(注2)標準DPI(96DPI)の場合、補正を行わないとエラーが増える。そのため高DPIの場合のみ除去するようにした。

なお 標準DPIと高DPIの切り分けは碁盤のマス目の大きさで判断しました。マス目の大きさは

  • 標準DPIの場合 おおよそ30ピクセル
  • 高DPIの場合  おおよそ40ピクセル
残念ながら、標準DPIのPCではDisplayの制限から、試行した画像以上の大きさに拡大して取り込むことは出来ません。取り込んだ画像をぼやけることなく、内部的に拡大できれば高い認識率が期待できそうです。

なお白△・黒▲については、OpenCVのパターンマッチングでは、高い精度は期待できそうにありません。他の手段を考える必要がありそうです。(目をつぶるのも一つ??)



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

0 件のコメント:

コメントを投稿