基本的な戦略はこうだ。
まず、ロボットが見ている画像320X240pxから、人を切り出す。人があるかどうかをチェックするためには、Histogram of Oriented Gradients (HOG法)とSupport Vector Machine (SVM)でやる。認識した人の姿から、HOGに似た手法で、特性値を取り出し、ロボットの関節(20数個ある)の角度ベクトルへの写像関数を推計する。二台のロボットのに方向から推計される姿勢のPointの高いものをロボットが認識した人の姿勢にする。ロボットの関節をその姿勢に向けて動かす。ただし、ロボットが倒れない工夫が難しい気がする。
HOGは、C++のプログラム化した。(SVMができていないので、アルゴリズムが正しいかどうかの検証はしていない、1個の学習画像を読み取り特性ベクトルを計算するまでしか作っていない。学習用の画像読み取りにOpenCVを使っているが、実際の認識の場合は、ロボットのビデオデバイスの画像データを直接読み取る。プログラムの中では、コメントアウトしている。g++のある環境で、makeコマンドをinvokeすればコンパイルできるはずです。)
<一旦公開したが、svmにかけたところデータ作成上に誤りがあるようで、公開を停止した。>
一方、SVMはアイデアはわかるが、プログラム化できていない。20数年前に、ニューラルネットワークやパーセプトロンの経済学への応用に没頭した時期があったが、SVMは、それに似ている。不思議な気がする。
SVMについては、時間をかけて、基本的な理論のところから理解し、プログラム化したいものだ。