あんまり見ないでください

プログラミング・技術関連,アイディア,気づいたことなどを低レベルで垂れ流す場所.

LeapMotionのサンプルプログラムで遊んだ

<サンプルプログラムを動かしてみる>
手やモノの動きを検知するデバイスLeapMotionを研究室の先生が購入してきたので,とりあえず,javaのサンプルプログラムを動かしてみる.

参考サイト http://blogkamiuma.blogspot.jp/2013/08/leapmotion-eclipsejava.html

SDKの入手
https://developer.leapmotion.com/
から,SDKをダウンロード.適当なフォルダで解凍.

②プロジェクト作成
Eclipseに適当なプロジェクトを作成する.

③サンプルプログラムのコピー
/LeapSDK/samples/Sample.java をプロジェクトのsrcにコピー

④ビルド・パスの設定1
ビルド・パスの構成 -> 外部jar追加
から,/LeapSDK/lib/LeapJava.jar をライブラリに追加

⑤ビルド・パスの設定2
追加した LeapJava.jar について
ネイティブ・ライブラリーのロケーション -> 編集
から,LeapJava.dll のあるフォルダを指定
僕の場合は /LeapSDK/lib/x64(32ビットの場合はx86

f:id:artak:20140217214435p:plain

⑥実行!
サンプルプログラムを実行すると,認識している手や指,ジェスチャに関する情報がコンソールに出力される.なるほど,この情報を使って何かをするわけですか.


<じゃんけんの手を表示する>
指の数に応じて,じゃんけんの手を表示するプログラムを作ってみた.
~やったこと~
・適当にじゃんけんの手の画像を拾い,gu.jpg,tyoki.jpg,pa.jpgと名付ける.
・AppFrameクラスを追加.
・SampleListenerクラスのonInitメソッドとonFrameメソッドをいじる.

いじった&追加したコードは以下.

class SampleListener extends Listener {
    AppFrame f;
    
    public void onInit(Controller controller) {
        System.out.println("Initialized");
        f = new AppFrame();
        f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }
        });   
        f.setVisible(true);
    }
    
    
    public void onFrame(Controller controller) {
        Frame frame = controller.frame();
        System.out.println(frame.fingers().count());
        f.setFingerNum(frame.fingers().count());
        f.repaint();
    }
}


import java.awt.*;

public class AppFrame extends Frame {
	private Image gu;
	private Image tyoki;
	private Image pa;
	private int fingerNum;
	
	public void paint(Graphics g){
		switch(fingerNum){
		case 0:
		    g.drawImage(gu, 20, 40, 320, 320, this);
		    break;
		case 2:
		    g.drawImage(tyoki, 20, 40, 320, 320, this);
		    break;
		case 5:
		    g.drawImage(pa, 20, 40, 320, 320, this);
		    break;
		default:
		    g.clearRect(0, 0, 360, 380);
		    break;
		}
	}
	
	AppFrame(){
		setSize(360, 380);
		setLayout(null);

		gu = getToolkit().getImage("gu.jpg");
		tyoki = getToolkit().getImage("tyoki.jpg");
		pa = getToolkit().getImage("pa.jpg");
	}
	
	public void setFingerNum(int fingerNum){
	    this.fingerNum = fingerNum;
	}
}

結果,ちゃんと表示してくれた.ただし,指の数だけで判定しているので,指が2本と認識されればチョキが表示される.ちなみに,先輩が人形の足をLeapMotionにかざしたときもチョキの画像が表示された.