hagino3000's blog

平成アーカイブス (更新停止)

Kinectプログラミングをより楽しむための、新分野入門の勧め

この記事はOpenNI Advent Calendarの15日目の記事です。

さて、この記事をチェックされる様な方であれば、ある程度はKinectセンサーとそのドライバについて知識はあると思います。さらに、それらを使って何かを作りたいと考えている人も多いでしょう。Kinectはとても魅力的なデバイスです、ある程度のプログラミング経験があればモーションキャプチャセンサーとして使えてしまう環境が整っており、デバイスを使った開発などした事もない人間でも簡単に扱えます。

しかし、実際にアプリケーションを作ってみようとすると、全く未経験の領域に足を突っこむ事に気がつきます。画像処理、音声処理、機械学習、コンピュータインタラクション etc…。それらについて既に習熟していれば問題は無いのですが、私の様な大学で生物を専攻してしまった*1人間には全くもって未知の分野。ここからは、私の経験を元にKinectプログラミングに関係するいくつかの分野に足を踏みいれるのに役に立ちそうな書籍や情報源を紹介します。

画像処理

なにはともあれ最初は画像処理でしょう。Kinect SDKやNITEのボーントラッキング、ユーザー認識は高度な画像処理技術によって実現されています。深度画像を表示したい、加工したい、といった場合。Kinect SDKで深度画像とビデオカメラの像を合せたい、という時に必要になる知識です。


最初の本はこちら。画像データってコンピュータ上でどう表現されているの、という所から教えてくれるのがこの本。簡単なフィルタ(ぼかし、シャープネス、グレースケール化)のロジックの解説からフーリエ変換まで載っています。やさしい入門書。


次の本。上の本よりも多くのフィルタ、変換ロジックが詳細に解説されています。デバイスの話から始まり、画像の性質、フィルタ、変換、動画処理、キャリブレーションパターン認識画像符号化、と一通り学べる感じ。内容盛りだくさんなので、気になった所だけ目を通した。図が多めで読み易い。

他の本は読んでいないのでわかりませんが、CV界隈の偉い人がオススメしていたので良い本なんだろうなと。本と並行してOpenCVを触ってみると、動作イメージが掴めるかと。

音声処理

画像処理よりもさらに経験した事のある人は少ないであろう音声処理について。Kinectといえばボーントラッキングみたいな印象があるけど、Kinect SDKは録音、音声認識、ビームフォーミングといったAudio APIもあります。


OpenNIユーザー = Macユーザー = iOS開発者という偏見を私は持っているので、ここではiPhone Core Audioの本を紹介します。音声のデジタル化の基礎の所(サンプリング周波数、量子化ビット数の意味)から説明があったので助かりました。コードを書いて実際にiPhoneで動かしながらオーディオプログラミングの要領が掴めます。Core AudioはMacOSXでも使えるので、OpenNIのAudio Generatorが実装されたらCore Audioを使ってあれこれする事が増えるのではと予想しています。

表現

openFrameworksやProcessingといったヴィジュアルプログラミングフレームワークの使い方は、プログラミング経験があるのであれば本よりもネットに公開されている動画とコードを読むのがてっとり速いです。最初はパーティクル飛ばしから。


メディアアートっぽい物が作れたけど、そもそも「メディアアート」って何?? みたいな疑問を持ったらこの本。メディアアートの歴史を解説してくれる。デュシャンの泉はこの本で知りました。

コンピュータインタラクション

NUIっぽい物を作りたいという人に。コンピュータインタラクションはどうあるべきか。これからどうなるのか、という内容がざっくりと。Kinect発売よりも後に出た本なのでKinectについても少し言及があります。


人間は世界をどう認識するのか、という所の話。UIデザインやインタラクション設計にも絡んでくる。

機械学習

Kinect SDKのボーントラッキングに使われているあれ。顔認識や手書き文字認識も機械学習で実装されます。
OpenCVだと学習データ作って何個かコマンドを打てば検出器ができてしまうのですが、それがどの様に実現されているのか知りたくもなります。

本は読んでいないのですが、スタンフォード大学のオンライン講義に機械学習のクラスがあったので受けています。3週目に手書き文字認識の実装という課題が出ました。来季も機械学習のコースはあります。

とにかく数式が出てくるので、数式アレルギーの荒治療としても効果的。

まとめ

これだけの分野を全て習得するのは難しいでしょうが、一つでも深くやりこめば相当面白い物が作れると思います。OpenNIの使い方を覚えたら、次は上のどれかの分野に足を突っ込んでみてはいかがでしょうか。

*1:今でも後悔している