1. Kinect + openframeworks でモーションキャプチャ、Flash(Away3D)で再生する (1)

     

    3ヶ月くらい前にやってたのを思い出しつつ書いていきます。

    http://clwkct.net/kinect/
    こんなかんじのです。左側のリストから選択すると開始。



    環境とか
    mac os10.8
    kinect( for xbox ) + openframeworks(0073) + ofxopenni
    ofxCsv、ofxCurl
    Away3d 4.1

     

    書くこと
    1) kinect + openframeworks でキャプチャ、csv で保存・サーバに送信
    2) flashでcsvをダウンロード、再生
    3) openframeworks でも再生してみる

     

    今回は 1)について。

    1) kinect + openframeworks でキャプチャ、csv で保存・サーバに送信

    ofxopenniについては前にちょっと書きました。

    で、細かいところは飛ばしてこんなかんじでキャプチャできます。

    ofxOpenNIJoint * joint = user.getJoint(JOINT_TORSO); //TORSOをとってきます

    ofPoint p = joint.getWorldPosition();//これでワールド座標を取得

    XnSkeletonJointOrientation jointOrientation = joint.xnJointOrientation;
    float * orientationMatrices = jointOrientation.orientation.elements;//これで回転成分を取得

    csvへの保存は、ofxCsvを使いました。
    void testApp::recordPositions(ofPoint & point){
    vector<string> _row(3);
    csv.data.push_back(_row);//csvはofxCsvのインスタンス。
    csv.setFloat(row, 0, point.x);
    csv.setFloat(row, 1, point.y);
    csv.setFloat(row, 2, point.z);
    row++;
    }

    void testApp::recordMatrices(float *matrices){
    vector<string> _row(9);
    csv.data.push_back(_row);
    for (int col = 0; col < 9; col++) {
    csv.setFloat(row, col, matrices[col]);
    }
    row++;
    }

    ↑のような関数を作って、キャプチャした値を渡します。ここの順番などはどんな形でもよいと思いますが、後でflashで使うときと合わせとく必要があります。
    recordPositions(p);
    recordMatrices(orientationMatrices);

    サーバーへの送信はofxCurlを使いました。サンプルコード通りにやっていきます。
    void testApp::upload(){
    ofxCurl curl;
    ofxCurlForm* form = curl.createForm("サーバへのパス");//受け取る側のサーバプログラムは割愛。

    // Add some form entries.
    form->addFile("file",ofToDataPath("savefile.csv",true));

    // Perform the post.
    try {
    form->post();
    }
    catch(...) {
    cout << "OOPS.. something went wrong while posting" << endl;
    }

    // Do something with the response from the post.
    vector<char> response_buf = form->getPostResponseAsBuffer();
    string response_str = form->getPostResponseAsString();
    cout << "Size of response buffer: " << response_buf.size() << endl << endl;
    cout << "Response string:" << endl;
    cout << "-----------------" << endl;
    cout << response_str <<endl;

    // Cleanup
    delete form;
    }

    というかんじでキャプチャしてサーバに保存までできました。

    続きは次回

     


     

    Posted by Takeya Hikage on 2013年03月25日
    Categories flash kinect openframeworks