読者です 読者をやめる 読者になる 読者になる

"Diary" インターネットさんへの恩返し

いつもソースコードコピペばかりなので,みなさまへ少しばかりの恩返しを

【python】サポートベクターマシンで手書き文字認識をやってみた



スポンサーリンク

ブラウザでCanvasを使って手書き文字を書いて、それがなんの文字かをサポートベクターマシンを使って判別させるシステムです。

機械学習システムをソリューションとして全体を作るイメージはどんなのか、検討もつきませんでしたがそれなりに作ってみました。正答率は、、、微妙ですが。これを広げてけばなんかできるかも。

デモ

環境

・クライアント
 - ブラウザはChromeのみ対応。(firefoxだとCanvasの計算が遅くて使い物にならず)
 - HTML5のCanvasとか使ってます。

・アプリケーションサーバ
 - node.js
  - python

・データベース
 - mongodb

・インフラ
  - AWSのマイクロインスタンスを使いました

必要なライブラリなど

以下、参照。
azwoo.hatenablog.com

ソース

github.com

苦労した点

データの単純化&学習データの登録がめんどくさい

世に出ている手書き文字の学習データもあるのですが、希望するサイズが違ったりで、手で登録するしかなく、結局以下のように1回書くとランダム値を使って類似パターンを数十個複製する形にしました。これに一番時間がかかった。

手書文字は普通に書くと線がそこまで太くないので、より単純化して学習しやすいように、サイズを小さくしたり、線を太くしたりとDBに登録する前に自動で加工をしています。


もともと写真認識とか考えてこんなのもの作ったけど、結局使わなかった。使いたい人ぜひご利用ください。(アダルトサイトじゃありません 笑)

Image Generator "Get Text Image data with various fonts and multiple image file download from google search"

  • キーワードを入力し、google画像検索結果から画像ファイルを一括ダウンロードができます。
  • 文字を入力し、複数のフォントを適用した画像を一括ダウンロードができます。

多クラス分類というものの存在を知るまでに時間がかかった

普通サポートベクターマシンは、2値分類という感じで、正解 or 不正解しかなく、たとえば手書き入力した文字が「A」or「それ以外」としか使えなかった。
こりゃイカンとおもって、いろいろ調べると多クラス分類というものがあり、各アルファベット毎に学習データを持って、一番最適なものを結果として出すというもの。同じ理屈を当初手で作るしかないのかなぁと思っていたけどpythonのライブラリで済んだの助かりました。

課題

後輩にも突っ込まれましたが、「WindowsIMEパッドの手書文字認識のほうがすごい」と言われ撃沈しました。それは仕方ないとして、、、データを増やせば増やすこと反比例的にモデル作成に増えているような気がします。これは仕方ないのかなぁ。まぁいろいろと今後もこんなことして遊んでいこうかと。

f:id:azumami:20150619142853p:plain

実践 機械学習システム

実践 機械学習システム