手書き文字認識とか

 

一年ほど前、訳あって会社で簡単な手書き文字認識の応用アプリの作成を依頼されました。

 

ちょっと調べてみるとzinniaというOSSがあったので試しに使ってみることに。

http://zinnia.sourceforge.net/index-ja.html

 

手書き文字の筆跡、つまりストローク毎の座標変動をS式で取り込み、SVMで識別しやすい特徴空間へ変換しています。zinniaで扱っている特徴空間はこちらを参照。

 

既に紙に書かれた文字を読み取って識別するのではなく、タブレットなどで記入させてそのストロークの情報が完全に保たれている前提で識別。このような方式をオンライン手書き文字認識と呼ぶそうです(OCRなど、前者の方式は「オフライン」と呼称。また、「オンライン学習」とも全く違う概念です。)。

また、zinniaとは別にtomoeという手書き文字認識ソフトで使われている学習済み筆跡データのセットがあり、zinniaは初期状態でその学習モデルを利用することを前提としています。もちろん、ユーザ側で学習用筆跡データ(S式)を用意すれば学習モデルをカスタムすることも可能です。

 

かなり便利だなと思いきや、この学習セットは日本語で使われる大量の文字が登録されているのですが、書き順などを間違えるとなかなか認識してくれないという問題があるのです。

それもそのはず、ひとつの文字の学習に対して一つの筆跡しか登録されていません。

さらに、数字やカタカナひらがななどの文字カテゴリが全て混ざった状態なので「カ(カタカナ)」と「力(ちから)」の区別が付きにくいなどの問題もあります。

 

ということで、数字やアルファベットなどの文字カテゴリ毎に、さらに一つの文字に対して複数のS式フォーマット学習データを作るためのアプリを作成しました。

HW-Collector: https://github.com/adokoy001/HW-Collector

で、コレを使って試しに作成した学習データがこちら

データセットhttps://github.com/adokoy001/HWR-Learning-Data-Sets

 

ニッチな用途ですが、お遊び機能として手書き文字認識を使ってみてはいかがでしょうか。

(手書きの文字や記号で、ある機能へのショートカットを実行させたりなどなど・・・)