【HSP】とっさの思い付きで、文字認識するプログラムを書いてみた(失敗例)

今回は、ユーザーが描いた文字をPCが自動で解読し、文字認識してくれるプログラムを考えてみました。

思い付きでやったことなので、文字認識のアルゴリズムなどの知識は全く無の状態ですので、ご了承ください。

もちろんながら失敗作なので、あくまでも参考までにお願いします。

文字認識するための大まかな手法

基本的な考えとしては、学習→比較→結果という流れです。

ブロックはツリー構造のような感じになっていて、粗い画像から奇麗な画像の順に比較していき、際も画像データーの似ているものを選定するといった単純な構造です。

学習させる手順

スポンサーリンク
  1. 粗い画像文字からきれいな画像文字をいくつか用意します。例えば8個程の画像を用意する場合、2px,4px,8px,16px,32px,64px,128px,256pxと二倍毎の倍数となるように画像を用意します。
  2. 画像データーを比較するときは、小さい解像度から順に比較していきます。
  3. まず一ブロック用意して、文字コード(文字の種類)、画像データー、子ブロックの作れる領域を一ブロック内に保存できるようにします。
  4. 更に解像度の細かい画像データーを子ブロックを作成し、その中に文字コード(文字の種類)、画像データー、子ブロックの作れる領域を親のブロックと同じように作成します。更に細かい解像度も同じように処理をし、8個の画像が用意されていた場合は8回同じことをします。一つ目の画像の追加はこれで完了です。
  5. 次に、別の画像を追加するため、ほかの画像をはじめの画像と同じように画像をいくつか用意します。
  6. 2で作成したブロックを比較対象にして、解像度の一番粗い画像(子ブロック内にある画像データー)と比較します。
  7. 完全にマッチした場合、次にその子ブロックを比較します。マッチしなかった場合、子ブロックを新たに作成します。
  8. 子ブロックも親ブロックと同じように画像データーを比較し、完全にマッチした場合はその子ブロックを比較対象にして、マッチしなかったり子ブロックが存在しなかった場合は新たに子ブロックを作成します。また、文字コードもブロックごとに登録しておきます。
  9. この動作を用意した画像の分だけ繰り返します。
  10. 更に他の画像を追加したい場合は、(5)から同じことをすれば良いです。

比較させる手順

  1. 基本的には学習と同じ手順です。
  2. 粗い画像文字からきれいな画像文字をいくつか用意します。ここは学習させる手法の手順と同じです。
  3. 始めのブロックにある画像の荒いデーターから比較していきます。
  4. 完全にマッチした場合、次にその子ブロックを比較し、再度同じことを繰り返します。(最大で用意した画像の分だけ比較します。)マッチしなかった場合、そのブロックにある文字コードを取得して、そのままループを抜けます。
  5. 取得した文字コードが結果となります。

補正

そのほかに、左右上下にある空白を撤去し、補正を加えた知りました。

実際にやってみた

今回は、テストで0~9の手書きの数字の画像を60万文字程学習させてみました。

今回はこちらのページにある手書き文字の画像を比較して実験を行いました。

文字の大きさは28×28ですが、十分な大きさです。

実際には6万文字ですが、さらにノイズを加えて10倍の60万文字にしました。

スポンサーリンク

データー量は1と0の白黒だけに変換してしまうので、恐らく何千万以上の文字にも耐えられるかと思います。

結果

元々の画像を比較すれば、瞬時に正確な結果を割り出す事ができました。

しかし、私が実際に書いた文字はどれも認証してくれませんでした・・・

何十回と試しているので、いくら私の汚い文字でも一つくらい正解してもいいはず・・・

 

やはり考えが甘かった・・・(´・ω・`)

スポンサーリンク

返信を残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください