Keras KMNIST「くずし文字」練習器を作ってみる

今回は、KMNIST日本語くずし文字データセットを使って、「くずし文字」を書く練習をするための練習器を作ってみます。

皆さん、あけましておめでとうございます。今年もよろしくお願い致します。

お正月をどうお過ごしですか、cedro です。

過日、人文学オープンデータ共同利用センターが発表した、KMNISTという日本語くずし文字データセットを使って、KerasのVAEで遊んでみました

その後、思ったのは、日本人であれば、日本語のくずし文字が読めるだけではなく、くずし文字を書くことも教養として必要ではないかということです。

であれは、そのための練習器があっても良いのではないかと考えたわけです(笑)。

ということで、今回は、KMNIST日本語くずし文字データセットを使って、「くずし文字」を書く練習をするための練習器を作ってみます。

 

くずし文字をCNNに学習させます

これが、KMNISTくずし文字データセットです。ひらがなのうち「お、き、す、つ、な、は、ま、や、れ、を」10文字を採用しています。データセットの仕様は、MNIST互換です。

早速ダウンロードしてみましょう。GithubからフォルダーをCloneするかDownloadZIPします。フォルダーの中のdownload_data.py を動かすとデータセットを簡単にダウンロード出来ます。

 

download_data.py を動かした時の画面です。こんな風に、数字を選択するだけで好みのデータセットをダウンロードできます。

1) Kuzushuji-MNIST を 2)NumPy data format (.npz) でダウンロードし k フォルダーを作って保管します。

 

CNNでKMNISTを学習するコードです。基本的には、keras_example にある mnist_cnn.py です。

追加したのは以下2つ。# load dataset は kフォルダー内のKMNISTデータセットを読み込む部分、最後にある # save model and weights は学習したモデルと重みファイルを保存する部分です。

 

k_mnist_cnn.py(先程、修正追加したコード) と kフォルダー(KMNISTデータが入っている) を、適当なフォルダーに保存し、実行します。

 

畳み込みが2段+全結合2段のシンプルなCNNです。私のMacbookAir では 12epoch を 32分くらいで完了し、Test accuracy は97.42%でした。これで、学習モデル(k_mnist_cnn_model.json)と重みファイル(k_mnist_cnn_weights.h5)が mnist_cnn.py と同じフォルダーに保存されました。

 

練習器を作成します

くずし文字の入力判定結果の表示にはブラウザを使うので、bottle ライブラリーpip install bottle で事前にインストールします

 

ブラウザを通じて手書き文字を読み込み、判定結果をブラウザに返すコードです。

まず、index.html を表示させて、手書き文字画像を読み込み、28×28のグレースケールに変換します。その後、学習モデルと重みファイルを読み込んで、モデルをコンパイルします。

画像をデータに変換して、「お、き、す、つ、な、は、ま、や、れ、を」のうちどれに一番近いのかmodel.predict でCNNに判定させます。

判定結果は「0〜9」の数字なので、リストから文字を選んでブラウザに返します。このコードを k_mnist_app.py で先程のフォルダーに保管します。

 

手書き文字を画像読み取って、判定結果を表示するHTMLコードです。以下に、表示画面を元にコードの動きを説明します。

index.html の起動画面です。黒字のキャンバスは文字を書き込むためのもので、キャンバスのエリアでマウスが押されたら、マウスの動きを読み取って白い線で描画します。

「Delete」ボタンでキャンバスをクリア「predict character」ボタンで描画した画像をサーバーへ送信し、サーバーから返って来た判定結果をボタンの下に表示します。index.html という名前で先程のフォルダーに保管します。

 

さて、フォルダーの中は、こんな感じになったと思います。では、動かしてみましょう。

 

「くずし文字」練習器を動かしてみる

 

python k_mnist_app.py でコードを実行すると、こんな表示が出ます。そうしたら、ブラウザで http://localhost:8080/ に接続すると練習器が動きます。

 

くずし文字には、色々なバリエーションがあるわけですが、今回は上記の例を練習してみます。

 

まず、「お」のくずし文字を書いてみました。判定が「お、です」と返って来ていますので、合格です。

 

次に、「き」のくずし文字を書いています。これは2回目で判定が「き、です」と返って来て、合格!

 

これは、「す」のくずし文字です。「す」は結構難しくて、「つ」と良く間違えられてしまいます。4回目でやっと合格が貰えました。

 

これは、「な」のくずし文字です。これは一発合格でした!

 

いやー、面白いです。もし、日本語のくずし文字を書くことを習得したいというニーズがあるなら、ディープラーニングで結構実用的なものが作れそうな気がします。

人間は学習する時に、正解率が70%くらいだと一番やる気になると言われているので、習熟度に応じて、最初は簡単なものから、徐々に難しいくずし文字にトライさせると、ボケ防止にもなって良いかも。

習得後は、古文書がスラスラ読める様になったりしたら、嬉しいですよね。

なお、今回の練習器のコード作成に当たっては、12/27 にgoofmint さんが行ったセミナーの内容を参考にさせて頂きました。感謝です!

では、また。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUTこの記事をかいた人

2017年8月に、SONY Neural Network Console に一目惚れして、ディープラーニングを始めました。初心者の試行錯誤をブログにしています。