以前の記事で、TensorFlowの本を読んでいる話をしました。
TensorFlowはじめました 実践!最新Googleマシンラーニング (NextPublishing)
- 作者: 有山圭二
- 出版社/メーカー: インプレスR&D
- 発売日: 2016/11/11
- メディア: Kindle版
- この商品を含むブログを見る
本を読みながら、やりたいこと・こういうことが出来そうだなということをまとめたいと思います。
1. やりたいこと:エオルゼア文字の画像をTensorFlow学習データとして用いる
本書では、CIFAR-10の学習と評価について触れています。(20ページ目から)
CIFAR-10 and CIFAR-100 datasets
文字解析だとMNISTの手書き数字解析を先に思い浮かぶ人が多いと思いますが、エオルゼア翻訳ではゲーム内の画像から文字を認識することを目的にしているので、CIFAR-10の方が目的に近いかと考えてます。
2. こういうことができそう:任意の画像データを学習データと用いる
本書21ページ目から、CIFAR-10の画像データをPNGに書き出すサンプルコードが書いてあります。CIFAR-10形式の画像データをPNGに書き出すことが書いてありました。
このサンプルコードを例にして、PNG画像をTensorFlowの学習データにすることが出来そうです。
3. やらなきゃいけないこと1:エオルゼアフォントをPNG画像データに変換する
機械学習としては当たり前ですが、学習データと正解データを用意する必要があります。
最初は学習・正解データはエオルゼア文字フォントを用いたいと思います。こちらのブログで紹介されていますね。
ただ、当然ながらフォントはPNG画像じゃなく(もちろんフォントにする前は何かしらの画像データだったのでしょうけど)、ttf形式です。PNG画像にする必要があります。
こちらの記事が参考になるのではないかなと考えてます。
4. やらなきゃいけないこと2:入力データを判別しやすいようにする
正直、学習データが足りません!
当たり前です、有志の作成したフォントだけで学習しようとしているのですから。
ですので、判別する画像データをクライアント側で加工し、判別しやすい画像に変換してから認識させることを目標としています。
具体的には
- 判別画像を白黒にする
- 判別画像の白黒を反転させる(場合によって、黒画像の白抜き文字があるから)
- コントラストを調節し、文字だけを強調させる
- 送信する文字の領域を指定できるようにする
ということが必要です。この発想は次のサイトを参考にしています。というより、次のサイトが元々、エオルゼア翻訳を作ろうと思ったきっかけです。
ただこのdemoでは
- データを学習できない
- 対応ブラウザが限られている
という欠点があるので、対応する必要があります。
データの学習はTensorFlowを使うとして、対応ブラウザに関してはカメラが使えないことだけが問題なので、カメラをHTMLのinput typeを工夫することで対応しようかと考えています。
まず、画像加工に関してはこちらのサイトが参考になります。
カメラ起動はこちらが参考になるかなと
iphoneのブラウザからカメラを起動させる。WEBアプリに。 : 森のコーディング
文字部分の切り出しはこちらのサイトが参考になるかなと
切り出した部分を別canvasに書き出して
文字を一文字ずつに切り出したいと思います。
幸いエオルゼア文字はアルファベット対応なので、日本語の「い」などのように左右に分割されることはないので、縦位置列白で切れる場合は分割できるのじゃないかなと思っています。
これは参考記事がないので、ちょっと不安です。
切り出した1文字canvas画像をPNGに変換して、サーバに送信。
実はここも不安です。toDataURLはクロスドメインで動かすとエラーが生じます。おそらくセキュリティ対策です。ローカルファイルの場合は問題ない気がしますが、もしダメだった場合は、一度サーバに画像をアップロードするなどの対策を行う必要があるでしょう。
5. まとめ
今回は書くことがたくさんでした。脳内整理が大分できました。
さて、実際に手を動かさないとだなぁ。がんばろ。