RealTime Motion Recognizing - リアルタイム動作認識

滑らか感のあるリアルタイム画像処理、画像認識処理は画像の全ピクセルに対する処理を1秒間に数十回行う必要があります。
少し画像関係のプログラミングをなさったことのある方であれば画像ピクセルをすべて処理する処理を普通に行うと大変処理時間がかかることをご存知かもしれません。

そのため画像処理を高速に行うにはCPUで処理をするのでなくGPUで超並列計算を行う必要があります。

CPUとGPUの処理の違いですが、CPUはピクセルを一つ一つ順次処理をしてゆきます。
対するGPUはたくさんの小さな計算機が一斉に串刺しにするように並列処理を行います。
これがグラフィックス処理に役立ちますし、最近では機械学習などの大量データを処理する処理にも利用されています。

このGPUのプログラミングを行う言語・ツールは様々ありますが、今回はDirectXのCompute Shaderを利用しています。
このCompute ShaderによりKINECTやその他のカメラの映像をUnityでリアルタイム処理し、映像の中の動きがあった部分をいくつでも認識できるものを開発しました。
動きの認識は背景差分という方式で、あらかじめ環境に存在したもの以外の物体が現れるとそこを領域として認識します。
基本的にこの処理は60FPS、1秒間に60回以上の処理を行えるようチューニングを行っています。

この処理はどのようなところで利用されるのでしょうか?
例えばエンターテイメント分野。
最近よくあるテクノロジー系のアトラクションでは人が通路を歩くと人の位置に映像エフェクトがついてきたりしますが、その基礎処理はこの背景差分映像処理となります。
その他医療やリハビリ分野でも動きを捉えるというのは重要な処理となります。

この処理を基礎に様々なコンテンツ、システムを開発することができます。