手書き文字認識のオープンソースZinnia
※かなり前に書いた技術系の記事です。統合のため別ブログからの転載となります。
手書き文字認識の案件があったので、javascriptのCanvasと組み合わせたシステムをちょっと作ってみたのでメモ。
手書き文字認識
スマホなどにも搭載されている手書き文字認識機能は、ご察しの通り機械学習によって実現されている。 現在のところ、サポートベクターマシン(SVM)を用いた学習モデルが最も性能が高いとされており、このSVMを実装したZinniaというオープンソースソフトも公開されている。 ということで、技術的な検証のためにZinniaを早速インストールして使ってみた。
Zinnia
Zinnia本体はあくまでもオンライン手書き認識(筆順、ペンストローク情報ありの認識)のためのものであり、以下の機能を提供することに特化したソフトウェアである。
- 手書き文字のストローク情報の読み取り
- ストローク情報に対応する尤もらしい文字をスコア順に出力
- 文字にかぎらず、あらゆる記号の学習が可能
- S式で表現された学習用ペンストロークデータを受け取り、学習する(バッチ学習のみ)
よって、OCRのようにペンストローク情報の無いものを扱うことはできず、さらに複数文字を同時に認識することもできない。(別途、文字の境界を認識するモデルが必要となる。)
zinniaのダウンロードはこちらから。 zinniaダウンロードページ
Zinnia本体とはまた別に、手書き文字認識エンジンのTomoeというソフトで用いられている学習用データをダウンロードする必要がある。(zinnia-tomoe)
SWIGによるPerlからの利用
ZinniaはSWIG対応であるため、Perl/Ruby/Pythonなどの軽量言語から呼び出すことも可能である。 ここで、Zinniaコンパイル後にPerlモジュールをインストールする方法を記載しておく。
(Zinniaをコンパイルしたディレクトリから) $cd perl $perl Makefile.PL $make #make install
これでzinnia.pmがインストールされ、Perlから利用することが可能となる。 (使い方についてはtest.plを見るとよい)