早く流れる川で

雑に書き留めた何か

C#で文字認識(Windows.Media.Ocr.OcrEngine)を試す

GitHub

今回、作成したもの。

github.com

結果から

画像から文字を認識するのは想像以上にできませんでした。
今回は現実のものがサンプルだったので良い結果を得られなかったかもしれません。
もし、サンプルがPC画面上に表示している文字(画面キャプチャ)だったらしっかり文字認識をしていたかもしれません。
…画面キャプチャを試してみたらしっかり認識しました…おーい!!!
目的?はレシートの文字認識だから何とも言えないですな。

画面キャプチャの文字認識の結果

発端

  • 何となく興味があった
  • 以前、家計簿をつけていたがレシートから転記するのが面倒だった
    • 画像から文字認識できれば転記の負荷が減るのでは?!
  • C#WPFの勉強
  • 就職活動のアピールになれば…

参考

本当にありがとうございます!

開発環境など

文字認識対象

FF14プリペイドカード表面

  • カラー、グレースケール、白黒の3種類の画像を用意した
    • FF14プリペイドカード表面・カラー画像
    • FF14プリペイドカード表面・グレースケール画像
    • FF14プリペイドカード表面・白黒画像
  • カラーと白黒は語句単位で5枚の画像を用意した
    • FF14プリペイドカード表面・カラー個別画像1
    • FF14プリペイドカード表面・カラー個別画像2
    • FF14プリペイドカード表面・カラー個別画像3
    • FF14プリペイドカード表面・カラー個別画像4
    • FF14プリペイドカード表面・カラー個別画像5
    • FF14プリペイドカード表面・白黒個別画像1
    • FF14プリペイドカード表面・白黒個別画像2
    • FF14プリペイドカード表面・白黒個別画像3
    • FF14プリペイドカード表面・白黒個別画像4
    • FF14プリペイドカード表面・白黒個別画像5

文字要素

カードにある文字要素は次の5つ。

  1. SQUERE ENIX
  2. 30日利用券/¥1,628
  3. ファイナルファンタジーXIV
  4. FINAL FANTASY(R) XIV
  5. ONLINE

文字認識前予想など

  • 小さい文字の認識はできるのか?
    • 文字要素の1と2、4の一部が小さい
    • 2は30日利用券/が小さい
      • ¥1,628は読み込めそう
    • 4は(R)だけが特に小さい、認識は厳しそう
  • 認識文字の種類を日本語にしているから、英語でも試す必要はありそう
    • 試してみたが大きな変化は無かった

カラー画像の結果

FF14プリペイドカード表面・文字認識結果

SQUARE ENIXÉ*E
3 。 日 利 用 券 / ¥ 1.628

カラー個別画像の結果

1, 3, 4, 5枚目

認識できなかった。

2枚目

30 日 利 用 券 / \ 1 , 628 '

グレースケール画像の結果

認識できなかった。

白黒画像の結果

FF14プリペイドカード表面・白黒画像の文字認識結果

30 日 利 用 券
フ ァ イ ナ ル フ ァ ン タ ジ ー Ⅵ
、 Ⅲ 影 躡 IIV

白黒個別画像の結果

1, 3, 5枚目

認識できなかった。

2枚目

30 日 利 用 券

4枚目

Ⅱ 盟 、 F 贐 Ⅳ

プリペイドカード画像の文字認識の感想

  • 想像以上に文字認識ができていない
    • 黒印字されている文字が文字認識には最良か?
  • 大きい文字は文字として認識していない
    • 認識できる文字の大きさに上限があるのか?
  • 漢字やカタカナの間に半角スペースが入る
    • 半角スペースを削除する必要がある
  • 文字が淡い色使いだと文字として認識しない
    • 文字色と背景色に明確な違いがあれば認識する?

スーパーマーケットのレシート

  • 一部の要素を塗りつぶしたレシート画像を用意した

レシート画像

レシート画像の文字認識の結果

レシート画像の文字認識結果

・ カ ネ ス 工
受 付 時 関
9 : OO
20 : 00
お 問 合 セ ン タ ー 0120 一 922-640
く 領 収 害 >
2023 年 6 月 5 日 ( 月 )
お 会 計 券
0002 コ ク ナ イ サ ン タ ベ ル ! \ 99
員 分 類 一 括
3 %
! ¥ 110
員 分 類 一 括
3 %
! \ 137
員 分 類 一 括
3 %
! \ 77
員 分 類 一 括
3 %
! \ 97
員 分 類 一 括
3 %
! \ 97
員 分 類 一 括
3 %
! ¥ 97
員 分 類 一 括
3 %
員 分 類 ・ 一 括
3 %
0007 ノ ウ コ ウ ヰ ヌ
! \ 114
( 2 個 x @57)
会 員 分 類 一 括 3 %
! \ 107
会 員 頁 一 括 3 %
0013 プ ル ガ リ ア ヨ ー グ
! \ 147
会 員 分 類 一 括 3 %
小 計
¥ 1 , 123
\ 1 , 123 )
( 外 % 対 象 額
外 税 額
\ 90
買 上 点 数
12 点
言 十
¥ 1 , 213
お 予 頁 り
¥ 1 , 213
( 消 費 税
お 釣 り
\ 0
轆 兇 率 : 無 印
標 準 税 率 ・
会 会 会 会 会 会 会 会
\ 90 )

レシート画像の文字認識の感想

  • 「OO」「0」、なぜ異なる?
  • 「長音」「ハイフン」「漢数字の一」との見分けがつかない
  • 領収書は「害」だった?
  • 空白を何かしらの文字で埋めれば改行が発生しないのでは?
    • 文字間の空白が多いと改行している
  • 半角カタカタは文字認識しない?
  • 文字認識する行間が存在する?
    • 行頭にも問題があったりするのか??
  • 「会 会 会 会 会 会 会 会」あー誰かに会いたいな!
    • 「会員分類一括」で認識できなかった「会」か?
    • 8行分だから数は合っているが…

編集したスーパーマーケットのレシート

  • 少し粘る、少し編集したレシートを用意し、文字認識をさせてみた。
    • 「あ」「い」の書体はメイリオ、「う」「え」はMS明朝、「え」は太字にした

レシート画像2

レシート画像2の文字認識の結果

レシート画像2の文字認識結果

・ カ ネ ス 工
受 付 時 関
9 : OO
20 : 00
お 問 合 セ ン タ ー 0120 一 922-640
く 領 収 害 >
2023 年 6 月 5 日 ( 月 )
お 会 計 券
0002 コ ク ナ イ サ ン タ ベ ル ! \ 99
員 分 類 一 括 3 % あ あ あ あ あ ー 2
員 分 類 一 括 3 %
い い い い い
- ! \ 137
つ つ つ つ つ つ
員 分 類 一 括 3 %
ー \ 77
員 分 類 一 括 3 %
ー \ 97
員 分 類 一 括 3 %
ー \ 97
員 分 類 一 括 3 %
` ¥ 97
員 分 類 一 括 3 %
員 分 類 ・ 一 括 3 %
0007 ノ ウ コ ウ ヰ ヌ
! \ 114
( 2 個 x @57)
会 員 分 類 一 括 3 %
! \ 107
会 員 頁 一 括 3 %
0013 プ ル ガ リ ア ヨ ー グ
! \ 147
会 員 分 類 一 括 3 %
小 計
¥ 1 , 123
\ 1 , 123 )
( 外 % 対 象 額
外 税 額
\ 90
買 上 点 数
12 点
言 十
¥ 1 , 213
お 予 頁 り
¥ 1 , 213
( 消 費 税
お 釣 り
\ 0
轆 兇 率 : 無 印
標 準 税 率 ・
会 会 会 会 会 会 会 会
\ 90 )

レシート画像2の文字認識の感想

  • 空白を文字で埋めて1行と見なさせる効果はあるにはある
    • 何故、「キャベツ」を認識しないのか?
    • 初回から認識していなかったので行間の問題だろうか
  • 「う」が「つ」と認識している
    • 認識させる文字はしっかり表示・印字していないとダメっぽい
    • 認識しやすい文字がありそう?
      • 最初は「@」で試したがダメだった
      • 文字サイズを上げればいけるかも?

その他に得た何か

  • プリペイドカードやレシートはスキャナでスキャンしたものです
    • スキャン時の設定で解像度(DPI)は300が望ましいです
    • DPIが300未満ですと、文字のどこかに欠けが発生しているケースがありました
      • そもそも文字認識の結果が悪すぎてそれどころじゃない
  • 手書きの文字が載った画像を文字認識させてみましたが駄目でした
    • ボールペンで書いた文字は認識できませんでした
    • ネームペンで書いた文字は認識できましたが、誤認識でした
      • 綺麗な字を書けば正しく認識するかもしれません
      • ちなみに書いた文字は「数字の1~9」です
        • 数字の1~9、12478が「/ ユ イ ク ま」と認識されました
          • 少し斜めに描いたのが問題かもしれません
          • 何かの暗号に使えますね!!
  • 認識する文字を日本語から英語に変換したらOCRエンジンがNullになりました
    • 英語の言語パックをインストールしていなかったのが原因でした