kcpjunky

about programming

ofxKinect サンプルコードをいじる setup()編

ofxKinectについて、サンプルコードをいじりつつ、使い方を学んでいく。

 

ofxKinect内の/exampleファイルにサンプルコードがある。

サンプルをビルドすると以下のようになる。

f:id:ketchupjunky:20121217034221p:plain

左上、左下が白黒映像だが、描画の具合が違う。

左下は距離センサーの決められた範囲で、単純に白黒で表示するのに対して、

上は色の濃度にあわせて白黒のグラデーション表示している。

右上はkinectからとった普通のカラー映像。

 

 

 

ofxKinectをアドオンに追加する際、ofxOpenCvも同時にアドオンに追加する。

testapp.hに

ofxKinect kinect(オブジェクト名 )  を追加

 

ofxCvColorImage colorImg;

 

ofxCvGrayscaleImage grayImage; // grayscale depth image

ofxCvGrayscaleImage grayThreshNear; // the near thresholded image

ofxCvGrayscaleImage grayThreshFar; // the far thresholded image

 

も同時に追加。

ofxCVColorImageと、ofxCvGrayscaleImageクラスについては、ofxCvImageクラスを継承している。 ofxCVアドオンの中にコードがあるので、詳しくはそこをみる。

 

testapp.cppの testapp::setup()内に以下を追加

 

 

 ofSetLogLevel(OF_LOG_VERBOSE);

 

 // enable depth->video image calibration

 kinect.setRegistration(true);

     

 kinect.init();   

 / /kinect.init(true); // shows infrared instead of RGB video image 

 / /kinect.init(false, false); // disable video image (faster fps)

 

 

 kinect.open();// opens first available kinect

 //kinect.open(1);// open a kinect by id, starting with 0 (sorted by serial #        

 lexicographically))

 //kinect.open("A00362A08602047A");// open a kinect using it's unique serial #

 

ここでは、要はofxKinectクラスのオブジェクトであるkinectオブジェクトを、キャリブレーションし、kinectからとった映像を使えるようにしている。

ここで、kinect.setRegistration(true)をとってみても、起動できたので、ここではおそらくsetRegistrationの値を明示的にtrueにしていると思われる。

 

そしてkinect.init()で起動して、kinect.open()で使えるようにする。

 

続いて

colorImg.allocate(kinect.width, kinect.height); //colorImg = ofxCvColorImage class

grayImage.allocate(kinect.width, kinect.height); //ofxCvgrayimagescale class

grayThreshNear.allocate(kinect.width, kinect.height);

grayThreshFar.allocate(kinect.width, kinect.height);

 

kinectで取得した情報を、colorImg,grayImage・・に投げている。詳しい挙動は現在のところ理解していない。kinect.width.kinect.heightは、kinectで取得した映像の縦横のピクセルだと思う。

allocateメソッドは、ofxCvImageクラス内に処理が記述してある。

引数に(int w,int h)を用いる。

 

 

 

続いてtestapp::setup()内

 

 

nearThreshold = 230;//?

 

farThreshold = 90;//?

 

bThreshWithOpenCV = true;

 

 

 

ofSetFrameRate(60);

 

 

 

// zero the tilt on startup

 

angle = 0;

 

kinect.setCameraTiltAngle(angle);// angle change

 

 

 

// start from the front

 

bDrawPointCloud = false; 

 

ここで、

near Threshold = 230

farThreshold = 90

は、左下の、黒しろ2値の映像に対応する。

nearの方は、値が高いほど近くの物が認識される。

farは、低いほど、遠くの物が認識される。

 

kinect.setCameraTiltAngle(angle)は、kinect自体の縦のアングルを指定された角度に変更する。ここでは-30<=angle<=30 の間をいじれる。

bDrawPointCloud は、起動した後にpをおすと、カラー映像で、ピクセルを距離に応じて丸で表現するモードをオンにする。初期状態はオフ

。 

setup()内に書かれているコードはこれまで。

 

 ここまで

  • kinectを使えるようにして、
  • kinectから取得した情報を、カラー、グレーにするオブジェクトになげる。
  • フレームレート、アングル角度などの初期設定を行う。

以上が、setup()内の内容である。

update()

draw()

内の記述については、また次のエントリで書こうと思う。

このサンプルのコードは、kinectを使うにあたって、基本的なものとなると思うので、しっかり理解していきたい。

 

ちなみに、このofxKinectのサンプルで、pを押すとdrawpointcloudモードになるが、これがめちゃくちゃいじってて楽しい。

 

映像のところでマウスドラッグすると、仮想カメラの位置が動いて、kinectでとった映像と、距離の情報にあわせて疑似3D映像になる。

openframeworks 文字表示について

文字表示について、参考文献などであまり情報がないので、ここで簡単にメモ

まず、基本的な使い方は、examples/graphics/fontsexampleをうごかしつつ。コードをチェックすべし

 

1:fontsexample/bin/data内に フォントのファイルが入ってるので、自分で使うファイルの/bin/dataにコピー。

 

2: testapp.h

 

ofTrueTypeFont verdana ←(インスタンス名);を追加。 ここではverdanaという名前でオブジェクトを作る

 

3 :  testapp.cpp

 

setup()内に

{

ofTrueTypeFont::setGlobalDpi(72);

    

verdana.loadFont("verdana.ttf", 14, true, true);

verdana.setLineHeight(18.0f);

verdana.setLetterSpacing(1.037);

}を追加

メソッドの説明については省く

 

4 testapp.cpp

draw()内に

 

 

{

ofSetColor(225);

verdana.drawString("Font Example - use keyboard to type", 30, 35);

}

で、色をしていして、クオーテーション内に文字列を入力して、表示できる。

 

openframeworksは、図形インスタンスの作り方はめちゃくちゃネット上にのってるけど、文字表示については、あんま載ってないので、WEBベースで調べるよりかは、

examplesの中のサンプルをいじってみて、使いたいとこのコードを読むのが大事だと思う。

Openframeworks 描画図形の色設定 乱数について

クリックや、キー入力によって、新たな図形のインスタンスを作成して表示させ、そのインスタンスによって色をかえたい時、注意すべきこと

 

 

3色 赤青緑について、配列を作る。

int red[255];

int blue[255];

int green[255];

 

for(i=0;i<255;i++){

red[i] = i;

blue[i] = i;

green[i] = i;

 

}

で255個分の色の数値を作った上で

for文でofsetcolorに数値を投げる

 

ofsetcolor内の引数に直接

ofsetColor(ofRandom(0,255),ofRandom(0,255),ofRandom(0,255));

と乱数を投げると、

フレームごとに色が変わって、かなりアブない感じになる。ちらつきが半端ないので、

乱数の0-255の値をある程度しぼってけば、それなりに優しい色使いになるかと

 

openframeworks Box2dについて

Openframeworks Box2dについてのメモ

 

box2d.init()  //BOX2d初期化

 

.setgravity(x,y)  // 重力設定 左上が原点

.createBounds(x1,y1,x2,y2)   画面のサイズ設定

.setFPS(x)    // フレーム数x に設定

.update();  //Box2d 更新

.draw();     //描画

 

 

アドオンについて コンパイルがうまく行かないとき

アドオンファイルの直下にexampleが入ってる場合があるので、参照を外す

/etc ファイルについて

 

 

/etc/fstab

ファイルシステムの記述ファイル

ファイルシステムを追加したときにいじる

 

ブート時に自動的にマウントさせたいシステムファイルはここにいれる

ブート後にmountコマンドでも可能

 

/etc/rc.d

システム起動時、自動実行ファイル

 

/etc/init.d と、/etc/rc.d/init.dの違いはあるようだが、よくわからない。

mysqlとか起動させるときは、どっちかを叩く。

基本は/etc/init.dで大丈夫そう。

 

 

VPSはぶっ壊してまた設定して、ぶっ壊して、そんな感じで覚えてけ

とは冗談ですが、centosいじってて、また調子わるくなったので、

OSの再インストールを実行した。

 

 複数ドメインに対して、 /etc/httpd/conf/httpd.config で設定をし、

それぞれのドメインに対して別のルートフォルダにあるものを表示できるようになった。

 

以下は自分へのメモ

 

  1. rootパス変更
  2. ユーザ新規作成
  3. SSH設定 ポート変更など
  4. OSアップデート
  5. iptables設定

 

 

 

SSH設定

ターミナルから、サーバログインのために、sshの設定をする必要がある。

設定ファイルは

/etc/ssh/sshd_config

 

内容を変更するのだが、

  • ポート番号変更

         #Port 22

       部分のコメントアウトを外して、任意の番号にする

  • PermitRootLoginの変更

  ルートでのログインを禁止するため

  #PermitRootLogin yes


  ノコメントアウトをはずし、 noに変更

 

が必要。

 

変更後、/etc/rc.d/init/d/sshd restart 

で再起動する。

centos LAMP環境

前回のRSA鍵設定からだいぶたったが、とりあえずmac上で鍵設定完了した。

 

それから現在までは、file操作等のコマンドをいじってみたりした。

 

サイトを立ち上げたいので、LAMP環境を整えようと考えた。

apacheでなくて、nginxが最近流行らしいが、とりあえずは後においといて、

apache mysql php をyum でインストール

 

そんでまだ途中だが、httpd.conf等をいじってHTMLファイルを表示できるようになった。

とりあえずはこんなもんで。あとは細かい設定、そんで実際にサイトつくってみる。

 

自分の写真をのせたくて、javascriptとかでうまいこと表示できるか試してみよう。