Tips

ARToolKit

マーカーの作り方

デバッグウィンドウ

Bluetoothアドレスの調べ方

ShowDebugFrame.javaなどのようにしてデバッグウィンドウを開き、「Bluetooth」タブの「検索」をクリックすると、BluetoothデバイスのMACアドレスとその接続用文字列、デバイス名の一覧を取得できます。

カメラの使い方

64bit Mac OS Xでのキャプチャ

Mac OS Xでキャプチャに使っているQuickTime for Javaは公式にはサポートが終わっており、32bit版のJava VMしかサポートされていません。そのため、64bit版OS Xで普通にキャプチャを行おうとするとエラーが出てプログラムが強制終了されます。

この問題を回避するためには、javaコマンドに”-d32”オプションをつけて、Java VMを32bitモードで起動する必要があります。

Eclipseでは、左の画面のように「Eclipse」「環境設定」「Java」「インストール済みのJRE」を順に開いた後、JREを選択して「編集」をクリックし、「デフォルトのVM引数」に”-d32”と記入することで、オプションを常に有効にできます。

64bit Windowsでのキャプチャ解像度の設定

64bit Windows環境では、DirectShow for JavaでDirectShowフィルタに備わったピンの一覧が取得できない不具合があることが分かっています。(cf.Image Sizes - humatic.dsj | Google Groups

captureライブラリのDirectShow版実装は指定されたデバイス(DirectShowフィルタ)から適切なピンを取得してキャプチャ解像度とフレームレートを設定しようとするため、上記の環境ではsetSize(int, int)メソッドが正しく機能しません。したがって、現状プログラム側からの制御ではデフォルトの解像度しか使えません。ただし、ユーザに指示を求めるダイアログだけは正しく動作するようなので、captureライブラリではこの機能をVideoCaptureDS.showFormatDialog()で呼び出せるようにしています。

例えば必ず800×600ピクセルの解像度でキャプチャしたい場合は、次のようなコードを書くとよいでしょう。

VideoCaptureDS capture = new VideoCaptureDS();
capture.setSize(800, 600);
capture.start();
if (capture.getWidth() != 800 ||
		capture.getHeight() != 600) {
	JOptionPane.showMessageDialog(this, "Please select 800x600 pixels for capturing image resolution in the next dialog.");
	capture.showFormatDialog();
	if (capture.getWidth() != 800 ||
			capture.getHeight() != 600) {
		System.err.println("Failed to capture images in resolution of 800x600 pixels.");
		capture.stop();
		return;
	}
}
System.out.println("Capturing images with " + capture.getIdentifier()
		+ "\nat " + capture.getWidth() + "x" + capture.getHeight()
		+ ", " + capture.getFrameRate() + "fps.");

PhybotsからVideoCaptureDSを使う場合は、上のコードに続いて次のようにcaptureオブジェクトを引数にCameraサービスを初期化します。(通常、Cameraクラスはインスタンス化に際し引数が不要です。)

Camera camera = new Camera(capture);
camera.start();

Cameraサービスの使い方に関してはチュートリアルを読んでください。