Freigeben über


もしもカフェ店長がソフトをつくったら Part 2

動くラテアートを作ってみよう!

「プログラムでラテアートを動かす!」そんなことが本当にできるんだろうか?

もちろん、コーヒーカップに描かれた実際のラテアートを動かすことはできない。しかし、拡張現実 (AR)の技術を使って、カップに「ラテアートを投影」したらどうだろう? そう、あとは投影するラテアートをアニメーションさせれば、あたかもラテアートが動いているように見せることができるよね。

ラテアートを動かすために必要な技術は、Kinect とプロジェクターのみ。Kinect は人間の動きを検出するデバイスという側面が強いが、人以外の物を検出することもできるようになっている。Kinectには高性能の深度センサー (有効範囲内の 3 次元的な形を距離として計測) が搭載されていて、そのセンサーを使えば、人だけではなくカップやテーブルといった人以外の物を検知してプログラムで利用できる。

それじゃ、カップの位置を検出する仕組みを説明しよう。

最初に、あらかじめ Kinect の深度センサーで何も置かれていないテーブルの深度情報を取得しておく。そうすれば、テーブルに物が置かれたときの深度情報と比較することで、「何か」が置かれているかどうかを知ることができるよね。

次に、テーブルの上で「一定時間動かない」「円形」の物体、つまりラテが注がれたカップだけを検出するんだ。あと、カップ以外の丸いものが置かれることも想定しておかないとね。高さや大きさからカップを判断して、それ以外の物が置かれても何も反応しないようにしておこう。さらに、2つ以上のカップが置かれても、それぞれのカップを検出できればカンペキだ。

このように Kinect を使って、カップの位置や高さ、内径が検出できたら、それに合わせてプロジェクターでアニメーションを投影するだけだ。投影機は手作りだから、カップの位置と投影位置の調整はちょっぴり試行錯誤の手作業になるけど、一度調整してしまえばあとは Kinect に任せてしまえば大丈夫。これで動くラテアートの完成だ。今回は、ラテアートだけではなく、テーブル上に吹き出しも表示してより楽しい演出を加えてみた。ちなみにアニメーションそのものは PowerPoint 2010 を使えば WMV (Windows Media Video) 形式の動画を簡単に作ることができる。

ところで、ラテアートと吹き出しといったように 2 つの動画を重ねて表示するには、上に重ねる動画の余白をマスクする必要がある。実際にプログラミングをした経験がある方ならわかるとは思うが、こうしたプログラムを一から作るのは非常に面倒な作業になる。

そこで利用したいのが、WPF (Windows Presentation Foundation) と呼ばれる技術。WPF はリッチなユーザーインターフェースを作成するための新しい技術だ。WPF を使えば、一般的なデスクトップアプリケーションが利用しているフォームによるユーザーインターフェースだけではなく、イメージや動画といったリッチコンテンツをプログラムで簡単に利用できるようになる。この WPF を使えば、動画を丸くマスクして表示するといったことが非常に簡単に実現できるんだ。

今回は Kinect とプロジェクターで動くラテアートを作ってみたけど、ちょっとしたアイディアと、簡単なプログラムを書けるスキルさえあれば、「いまそこにある技術」で日常をとても楽しくできるんだ。可能性は無限にあるといってもちっとも大げさなことなんかじゃない。考えるだけでもワクワクしてこないかい?

皆さんも日常を楽しく演出するアイディアを、いろいろと考えてみてはいかがだろうか?

■ 使用した機材

・Kinect for Windows

・小型プロジェクター TAXAN KG-PL031W (DLP方式 300ルーメン WXGA)

・Lenovo X200

■ 使用したソフトウェア

・Windows 7

・.Net Framework 4.0 / C# / WPF

・Kinect for Windows SDK

・Visual Studio 2010

  • Source Code
    準備中