【python】サポートベクターマシンで手書き文字認識をやってみた
スポンサーリンク
ブラウザでCanvasを使って手書き文字を書いて、それがなんの文字かをサポートベクターマシンを使って判別させるシステムです。
機械学習システムをソリューションとして全体を作るイメージはどんなのか、検討もつきませんでしたがそれなりに作ってみました。正答率は、、、微妙ですが。これを広げてけばなんかできるかも。
デモ
環境
・クライアント - ブラウザはChromeのみ対応。(firefoxだとCanvasの計算が遅くて使い物にならず) - HTML5のCanvasとか使ってます。 ・アプリケーションサーバ - node.js - python ・データベース - mongodb ・インフラ - AWSのマイクロインスタンスを使いました
必要なライブラリなど
以下、参照。
azwoo.hatenablog.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のライブラリで済んだの助かりました。
課題
後輩にも突っ込まれましたが、「WindowsのIMEパッドの手書文字認識のほうがすごい」と言われ撃沈しました。それは仕方ないとして、、、データを増やせば増やすこと反比例的にモデル作成に増えているような気がします。これは仕方ないのかなぁ。まぁいろいろと今後もこんなことして遊んでいこうかと。
- 作者: Willi Richert,Luis Pedro Coelho,斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/10/25
- メディア: 大型本
- この商品を含むブログ (5件) を見る