今回のテーマは認識です。従来はコンピュータはデジタルデータを処理することが多かったですが、その範疇が徐々に広がっておりアナログデータ(リアルのデータ)を取り込みつつあります。とはいえ単にデータ化するだけでは意味がなく、そこから何らかの意味がある情報を読み取るのがおもしろさです。

そのための認識技術、そしてそれらを利用したソフトウェアを紹介します。

OCR

昔から行われているテキストをデジタル化する技術です。手書き文字を認識するのは未だに難しいですが、昔の書籍であったり、名刺の文字を認識するのは技術が向上しており、認識率が高まっています。スマートフォンのカメラで撮影してそこに書かれている文字を読み取るアプリも数多くあります。

音声

SiriやGoogleが有名ですが音声入力も活発に開発されています。音声から文字にできれば良いわけですが、実際にはその後自然言語からコンピュータに命令を行う必要がありますので音声認識以上に言語解析が難しい分野といえます。テキストにする所までであればオープンソース・ソフトウェアにも幾つかの選択肢があります。

もちろん多言語対応が必須なので、英語圏のみならず正しく認識するのは困難でしょう。

Webカム

Webカムは従来Webチャットくらいしか使われてこなかった訳ですが、HTML5のgetUserMediaに対応したことで利用範囲が広がっています。得られた映像をCanvasを使って解析し、オブジェクトを認識します。最も分かりやすいものは顔認識で、OpenCVなどと組み合わせるケースが多いようです。

さらに簡易的なジェスチャー認識も行われています。手や腕を振ったアクションや特定の色やマーカーを認識させることで、アクションを起こすことができます。

ジェスチャー

最近ではLeap Motionをはじめとして外部デバイスを使った認識技術が登場しています。Kinectはその走りともいえますが、今なおトップレベルではないでしょうか。最近筆者はTouch+というデバイスを購入しましたが(Mac OSX向けドライバはまだ出ていませんが…)、それは画面のタッチを認識するガジェットになります。

OculusでもDK2は物体の距離をはかるセンサーを別で提供しており、コンピュータ内だけで処理できないセンサーも出てきているようです。

AR

ARはカメラを使って実装できる点で手軽です。物体をそのまま認識するケースと、マーカーを通して認識するものがあります。マーカーを認識する方がシンプルですし、多少動かしたとしても認識し続けてくれます。逆に物体認識の場合、向きを変えただけでも認識できなくなる場合があります。