CellWriter:オープンソースのLinux向け手書き文字認識

 手書き文字認識の分野は、パターン認識という共通項を持つ音声認識や光学文字認識と同じく、依然としてプロプライエタリ製品に支配されている。Nokiaのインターネット端末Maemoに搭載されているようなLinux向けソリューションも存在するが、それらは多くの場合、特許クレームに保護されたクローズドソースのプラグインである。そういうわけで、コンパクトで無駄がなく、最新のLinuxデスクトップとの統合が容易な手書き認識ツールCellWriterの存在は嬉しい驚きだった。

 CellWriterはグリッド線の入った小さなウィンドウを持ち、そこには普通にペンで書くように文字を入力できる。そのため、Wacom端末のようなペン入力インタフェースと併用することで最も効果を発揮するが、そうしたインタフェースが厳密に必要とされるわけではない。

 グリッドウィンドウは常にほかのアプリケーションよりも前面に表示されるが、作業中のアプリケーションにはフォーカスが維持される。CellWriterに走り書きしたテキストに問題がなければ、グリッド領域の横にある「Enter」ボタンをクリックする。するとキーボードで入力するのと同じように、アクティブになっているアプリケーションにそのテキストが入力される。単純明快な機能だ。

基本的な手書き入力

 CellWriterの.DEBパッケージまたはソースコードのダウンロードは、同プロジェクトのWebサイトから行える。このアプリケーションにはGTK+、libgnome、libxtstが必要だが、いずれも最近のLinuxディストリビューションでは標準仕様になっているものだ。

 CellWriterは個々のユーザによる文字の書き方を学習することで機能するため、学習の実行が欠かせない。実行時に~/.cellwriterというファイルが見つからない場合、CellWriterはユーザの書く文字を学習できるように学習モードで起動される。また、特定の文字の認識に何度も失敗するようなら、いつでも「Train」ボタンをクリックして追加の文字サンプルを与えることができる。このように繰り返し使うなかでCellWriterは継続して学習を行う。

 学習モードでは、1文字ずつセルに分かれたマトリクス状の文字群が表示される。単純にそれぞれのセルに該当する文字を書き入れると、そのデータがCellWriterに記憶される。学習済みのセルとそうでないセルは違う色で表示されるので、学習の経過がわかるようになっている。

writing_thumb.png
CellWriterによる手書き入力:CellWriterへの入力中もEmacsウィンドウにフォーカスが残っている。赤い文字は認識精度を高めるために再学習が必要であることを示している

 文字を書き損じた場合は、そのデータをリセットすることができる。通常のテキスト入力モードでは、手書き結果の文字への変換は、ペン先が次のグリッドセルに移った時点で行われる。正しく認識されなかった場合は、そのセルを右クリックすると認識候補のドロップダウンリストから正しい文字を選択できる。CellWriterは確実には認識できなかった文字が現われるたびに、違う色でセルを表示して注意を促してくれるが、それによって入力が妨げられることはない。

各種のオプション

 CellWriterのセットアップダイアログでは、セルのサイズと色を設定できるほか、ペンの進む向きに対する感度など、文字認識アルゴリズムの設定の一部を調整することもできる。

 さらに優れているのは、使用するアルファベットをUnicodeによって指定できる点だ。さまざまなUnicodeブロックの有効/無効を個別に切り替えることが可能で、その言語の書き進める方向が左から右なのか右から左なのかを設定することもできる。基本的なラテン言語であれば、設定は不要だ。キリル文字やタイ文字、あるいはIPA(International Phonetic Alphabet:国際音標文字)拡張が必要な場合も、対応するチェックボックスをクリックするだけでよい。

 選択したブロックは学習モードに追加されるが、CellWriterは学習した文字の認識だけを行う。そのため、ギリシア文字は数式用に特定のいくつかしか使わないというなら、必要なギリシア文字だけを学習させればよい。そうしておけば、“E”と書いたつもりが誤って“ε”(イプシロン)と認識される心配をしなくても済む。

プロジェクトの過去、現在、未来

 CellWriterを開発したのは、ミネソタ大学(University of Minnesota)でコンピュータサイエンスを専攻する学部生、Michael Levin氏である。以前、Levin氏はもう少し単純な文字認識ユーティリティOneStrokeを手がけていたが、古いコードベースを発展させるのではなく、基本的には最初からCellWriterのコードを書き上げた。

 ホビープロジェクトだったOneStrokeに比べてずっと多くの時間をLevin氏がCellWriterの開発にかけられたのは、ミネソタ大学の学部生研究促進制度(UROP:Undergraduate Research Opportunity Program)のおかげである。UROPの下、同大学の学生は夏期特別研究として個人で企画した研究課題に取り組むことができるのだ。

training_thumb.png
CellWriterの学習モード

 手書き文字認識に対するLevin氏の関心を呼び覚ましたのは、東芝製のPortegeというタブレットPCへの個人的な“羨望”だった。「値段はほかのノートPCの倍近くしたが、どうしてもタブレットインターフェイスが欲しかった。とにかく人工知能の研究がしたいと思っていた僕には、手書き認識が一番とっつきやすい問題に思えたからだ。結局、手書き認識に携わりたいという理由だけでPortegeを購入してしまった」

 だが、人工知能の分野では手書き認識は“解決済みの問題”と見なされており、新たな手法を生み出すような研究はほとんど行われていない、とLevin氏は言う。「タブレット入力パネルを数年ほど使い続けると、僕の“o”(オー、下から時計回りに書く)がほとんど認識されないことに絶えず苛立ちを感じるようになった。それで、まだ改善の余地があることがわかったんだ」

 Levin氏は、CellWriterのアルゴリズムを試行錯誤によって自力で開発したと語る。それは、ユーザ単位のデータ学習に基づいた文字のマッチングにより、ある重要な問題を回避するものだった。その問題とは、筆跡はユーザごとに異なるので汎用の認識手法だとすべての人に共通する最小公約数的な書法しか扱えない、というものだった。

 グリッドの利用と1文字ずつの認識というアプローチにこだわることで、認識処理が単純化される(つまり、一度に1文字しか考えなくてよい)だけでなく、洗練された技法の利用も可能になっている。一部の手書き認識システムとは異なり、CellWriterでは、書き表し方が複数ある文字の理解や、筆順とは無関係な文字の認識ができるのだ。

 全日制の学生であるLevin氏は、夏期休暇期間以外は多くの時間をCellWriterに割くことができない。それでも彼はCellWriterの活動を継続するつもりである。「まだまだ多くのローカライゼーションサポートが必要だ。今のところ、CellWriterはアジア諸言語のユーザにとっては非常に使いづらいものになっている。漢字の学習を単純化するか、その生成をどうにか自動化できる方法を見つけたかったのだが、うまくいっていない」

その他のプロジェクトの状況

 手書き認識に決定的な解決策は存在しない。人間でさえ困ることがある作業なのだ。私も学部で数学を専攻していたので、この問題には常々関心を持っていた。論文の校正作業では、似たようなラテン文字、ギリシア文字、特殊記号を区別するために、違いがわかるような文字表記の使用を強制された。自分で書いた文字でも、“w”と“ω”(オメガ)、“∃”(存在記号)と“∋”(所属)の区別が困難になることがある。

 入力デバイスとしてのキーボードの地位が揺らぐことはないだろうだが、Nokia製端末からOpenMoko携帯電話に至るまでLinuxの動作するタッチスクリーンデバイスは急増しつつある。やがて一般的に手書き認識が必要とされるようになるだろうが、現在この領域は非フリーのソフトウェアに支配されている。

 CellWriterは誕生後間もないプロジェクトだが、その文字認識の機能だけでなく、より重要な使いやすさの点でも大いに期待できそうだ。

Linux.com 原文