ゲレの日曜工作プログラミング

ゲーム好きの中の人が、自分が作りたいアプリを作る記録です

言語を超える力 : 手動文字区切りとノイズ除去

切り取った画像から、手動で文字区切りとノイズ除去ができるようにしました。

使い方と、この機能が必要な理由について書いてみます。

 

 

1. 使い方

読み込んだ画像から文字を切り取ると、以下の場所に切り取った画像が表示されます。この画像をマウスドラッグもしくはタッチパネルすると、ペンで線を引くような加工を行うことができるようにしました。

(加工前の例)

f:id:gelehrtecrest:20170519064331p:plain

 Copyright (C) 2010 - 2017 SQUARE ENIX CO., LTD. All Rights Reserved.

(加工後の例)

f:id:gelehrtecrest:20170519064554p:plain

 Copyright (C) 2010 - 2017 SQUARE ENIX CO., LTD. All Rights Reserved.

 

「元の文字」のノイズ部分を白で塗りつぶすことで、「調整後の文字」のノイズが減ったことがわかるでしょうか。

この機能によって、色指定では除去しにくいノイズを除去したり、文字区切りを行うことができます。

 

2. この機能を追加した理由

実際には、文字区切りを行った後にサーバー内でノイズ除去を行っています。文字としては小さ過ぎる区切りがされてしまった場合、それを除去するという方法です。

ただし、あまりにも除去し過ぎると、文字の面積として小さくなる「i」や「l」などを認識できなくなります。

 

また、エオルゼアの地図上の文字を読み込む時、川や道の図形と文字を自動判別するのが難しく、手動で補助する機能を追加しました。

 

 

ここまで文字区切りの自動化について記述してなかったので補足と、機能追加理由について記述します。

エオルゼア文字はアルファベットと1対1で対応している為か、ひらがなの「い」のように1つの文字の輪郭が2つ以上に分かれることがないようです。(クォーテーションマークを除く) その為、輪郭を認識できれば、一つの文字を切り取ることができます。

 

しかし、逆に、複数の文字がくっついて表記されることがあります。

例えば

f:id:gelehrtecrest:20170519065057p:plain

これはゴールドソーサーの「Gold」ですね 。

ねこぐまげーむ様からの愛のムチを受けた単語なので、ご存知の方も多いかと

nekokuma.com

 

これをそのまま認識させるとこのようになります。

f:id:gelehrtecrest:20170519070404p:plain

Copyright (C) 2010 - 2017 SQUARE ENIX CO., LTD. All Rights Reserved. 

 

輪郭で文字区切りを行うと、くっついている文字は1文字と認識してしまいます。

修正報告をみると。lとdがくっついていることがわかります。

f:id:gelehrtecrest:20170519070523p:plain

Copyright (C) 2010 - 2017 SQUARE ENIX CO., LTD. All Rights Reserved.

このような表記は、イラストとしては美しくなるのですが、文字認識としては対応する必要があります。

今回は、画像を加工することで輪郭を分けることとしました。例えばこのように黒塗りで補正しました。

f:id:gelehrtecrest:20170519070617p:plain

Copyright (C) 2010 - 2017 SQUARE ENIX CO., LTD. All Rights Reserved. 

すると正しく「Gold」と翻訳されます。確認のために修正報告の欄をみると、

f:id:gelehrtecrest:20170519070746p:plain

Copyright (C) 2010 - 2017 SQUARE ENIX CO., LTD. All Rights Reserved.

「Gold」がそれぞれ文字区切りされていますね。(実際には「d」文字が「l」と認識されていますね。この翻訳ミスは単なる学習データ不足です)

 

あまり手間がかかると「font表を見ながら文字解読したほうが早いじゃないか」と言われてしまうので、 あまり機能の追加では対応したくないのです。機能が増えるだけ手間がかかるので。

でもこの機能だけはどうしても必要だと感じたので対応しました。

 

今後も開発を続けます!