手書き文字認識のオープンソースZinnia

※かなり前に書いた技術系の記事です。統合のため別ブログからの転載となります。

 

手書き文字認識の案件があったので、javascriptCanvasと組み合わせたシステムをちょっと作ってみたのでメモ。

手書き文字認識

スマホなどにも搭載されている手書き文字認識機能は、ご察しの通り機械学習によって実現されている。 現在のところ、サポートベクターマシン(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を見るとよい)