手書き文字認識ソフト

NoKey

スクリーンショット

概要

マウスで文字を書く。その情報をもとに対応した文字列を返すソフト。自身で文字の登録が可能。

コピペツール。

技術

C# VisualStadioで開発

cos類似度による評価により手書き文字認識を行う。

機械学習を行う場合に比べ、学習が必要なく、教師データもいらない。

文字認識の流れ

文字をかく

一秒間に100回座標を記録

座標の差分をとり、ベクトル化

ダウンサンプリングし、30個の座標に圧縮

これをほかのデータとcos類似度にかけることでどれだけ二つが似ているかがわかる。

登録されているデータすべてに対して類似度を計算し、その中で一番類似度が高いものを表示する。

計算量

COS類似度はドット積なので、計算量は線形。

DNNの場合は、学習 + 計算なので計算量が多い。

工夫

COS類似度は突出したデータがあるとそれに大きく影響される特性がある。

そのため、多めに点を取り、それらを平均することで入力の品質を保つようにしている。

うまくいかなかったことの供養

COS類似度によって手書き文字認識ができるということを知るまでは、

ディープニューラルネットワークでの文字認識しかできないと思っていた。

DNNは学習データが大量にいるが、ユーザ自らジェスチャを登録するため、事前学習をさせることは無理である。

そのため、文字の類似度を評価するDNNを作成しようと考えた。

失敗に終わった

10種類のsin波を作成し、この違いを見分けるという学習を行った。

学習済みデータは100%の精度で判定できたが、学習していないデータに関してはひどい結果になった。

類似度を計算させるというアプローチ自体が間違っているのか、何かいい方法があるのか、それはわからない。

使ってみての感想

従来のコピペツールの場合、何をコピーするかのリストを表示する必要があった。

しかし、今回はジェスチャ認識なので表示する必要がない。

そのため小さな表示領域でその機能を果たせるのがメリット。

見た目がシンプルでとても良い。