Processing + kinect v1で顔の位置をとりたく、
SimpleOpenNIとやらが必要となり、
メニューのツールからインストールしようとしたら無くなっていたので、
同じ悩みを抱えてる方いましたらと思ったメモです。
この記事のおかげです感謝
https://qiita.com/kikpond15/items/6c8f8b192c7c21c59b41
import Libraryから入れ直してみたり,.jarファイルを入れ替えてみたりしたけどだめだった.
けど,totovrさんがProcessing3.3.6ようにライブラリを作ってくれていました
SimpleOpenniからダウンロードしてライブラリに入れれば動きました.
↑このREADME.mdのとおりライブラリ設定やって
import SimpleOpenNI.*;
// SimpleOpenNI
SimpleOpenNI kinect;
void setup(){
size(640, 480);
kinect = new SimpleOpenNI(this);
kinect.enableDepth();
kinect.enableUser();
}
void draw(){
kinect.update();
// 深度画像取得して表示
PImage depth = kinect.depthImage();
image(depth, 0, 0);
// 検出した人たちをuserListにいれる
IntVector userList = new IntVector();
kinect.getUsers(userList);
// 一人以上検出してたら
if(userList.size() > 0){
// 一人目のID取得
int userId = userList.get(0);
// 一人目の骨格を見にいく
if(kinect.isTrackingSkeleton(userId)) {
// 頭の(x,y,z)座標取得
PVector headPos = new PVector();
kinect.getJointPositionSkeleton( userId,SimpleOpenNI.SKEL_HEAD,headPos );
顔の位置入れとくPVector用意
PVector convertedHeadPos = new PVector();
//丸書くために、現実世界の座標から、スクリーンの2次元のx,y座標に変換(多分)
kinect.convertRealWorldToProjective( headPos, convertedHeadPos );
// 青丸描画
fill(255, 0, 0);
ellipse(convertedHeadPos.x, convertedHeadPos.y,50,50 );
}
}
}
// 新しいuser検知した時
void onNewUser( SimpleOpenNI kinect, int userId ){
println("Detection Start");
kinect.startTrackingSkeleton(userId);
}
0 SKEL_HEAD 顔の中心
1 SKEL_NECK 首の下
2 SKEL_LEFT_SHOULDER
3 SKEL_RIGHT_SHOULDER
4 SKEL_LEFT_ELBOW
5 SKEL_RIGHT_ELBOW
6 SKEL_LEFT_HAND
7 SKEL_RIGHT_HAND
8 SKEL_TORSO へそのあたり
9 SKEL_LEFT_HIP
10 SKEL_RIGHT_HIP
11 SKEL_LEFT_KNEE ひざ
12 SKEL_RIGHT_KNEE
13 SKEL_LEFT_FOOT
14 SKEL_RIGHT_FOOT
多分コメントあってると思いますが...以上。
色々参考
http://denki.nara-edu.ac.jp/~yabu/soft/processing.html#17