オンライン手書き数字識別システムを作りました。

オンラインで動作する手書き文字識別システムを実装・公開しました。
以下で試すことができます。(黒色のキャンバス部分に数字を1文字を書いて、識別ボタンを押してみてください。)

Flask Canvas

ソースコードは、

github.com

言語はPython 3.4.3を使用、Webアプリ周りはflask、識別器はchainerを使ってディープラーニングモデルを構築しました。
仕組みとしては、

  1. HTML上のCanvasに書かれたものを画像としてアプリにPost
  2. アプリ側で学習済みティープラーニングモデルを使って画像に書かれたものを識別
  3. 識別結果を返却、画面上に表示

という流れです。

ディープラーニングモデルについては、こちらのサイトを参考にさせていただいた。(いつも読ませていただいております。)
MNISTデータを学習後モデルを書き出して、ここで作成したモデルをアプリ側でpickleをつかって読み込んでいます。
おかげさまで、識別器の実装はかなり簡単でした。

問題だったのは、「Canvasに書かれた要素を画像としてアプリで受け取って学習器に渡す」というところ。
そもそもflaskの文献が少ない上に、今回は実行環境の関係で普段使っているOpenCVではなくPillowで画像処理を実装したので結構苦労しました。
最終的に、Postされた画像データはbyte形式で送られてきていることをがわかったので、それをPillowにうまく食わせて処理するようにしたらなんとか実装できました。。

とりあえず、今回は「こんなん実装したで(ドヤァ」という報告だけ。
細かい技術的なことはまた次回。