OSDN Git Service

[更新]NyARToolkit/nyatlaブランチ
[nyartoolkit-and/nyartoolkit-and.git] / sample / jmf / jp / nyatla / nyartoolkit / jmf / sample / NyarToolkitLinkTest.java
1 /* 
2  * PROJECT: NyARToolkit JMF sample program.
3  * --------------------------------------------------------------------------------
4  * The MIT License
5  * Copyright (c) 2008 nyatla
6  * airmail(at)ebony.plala.or.jp
7  * http://nyatla.jp/nyartoolkit/
8  * 
9  * Permission is hereby granted, free of charge, to any person obtaining a copy
10  * of this software and associated documentation files (the "Software"), to deal
11  * in the Software without restriction, including without limitation the rights
12  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13  * copies of the Software, and to permit persons to whom the Software is
14  * furnished to do so, subject to the following conditions:
15  * The above copyright notice and this permission notice shall be included in
16  * all copies or substantial portions of the Software.
17  * 
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24  * THE SOFTWARE.
25  * 
26  */
27 package jp.nyatla.nyartoolkit.jmf.sample;
28
29 import javax.media.*;
30
31 import javax.media.util.BufferToImage;
32 import javax.media.format.*;
33
34 import jp.nyatla.nyartoolkit.NyARException;
35 import jp.nyatla.nyartoolkit.jmf.utils.*;
36
37 import java.awt.*;
38
39 import jp.nyatla.nyartoolkit.core.*;
40 import jp.nyatla.nyartoolkit.core.param.NyARParam;
41 import jp.nyatla.nyartoolkit.core.transmat.*;
42 import jp.nyatla.nyartoolkit.detector.NyARSingleDetectMarker;
43
44 /**
45  * VFM+ARToolkitテストプログラム
46  * カメラから取り込んだデータからマーカーを検出して、一致度と変換行列を表示します。
47  */
48 public class NyarToolkitLinkTest extends Frame implements JmfCaptureListener
49 {
50         private final String CARCODE_FILE = "../../Data/patt.hiro";
51
52         private final String PARAM_FILE = "../../Data/camera_para.dat";
53
54         private JmfCameraCapture capture;
55
56         private NyARSingleDetectMarker nya;
57
58         private JmfNyARRaster_RGB raster;
59
60         private NyARTransMatResult trans_mat_result = new NyARTransMatResult();
61
62         public NyarToolkitLinkTest() throws NyARException, NyARException
63         {
64                 setTitle("JmfCaptureTest");
65                 setBounds(0, 0, 320 + 64, 240 + 64);
66                 //キャプチャの準備
67                 capture = new JmfCameraCapture(320, 240, 30f, JmfCameraCapture.PIXEL_FORMAT_RGB);
68                 capture.setCaptureListener(this);
69
70                 //NyARToolkitの準備
71                 NyARParam ar_param = new NyARParam();
72                 NyARCode ar_code = new NyARCode(16, 16);
73                 ar_param.loadARParamFromFile(PARAM_FILE);
74                 ar_param.changeScreenSize(320, 240);
75                 nya = new NyARSingleDetectMarker(ar_param, ar_code, 80.0);
76                 ar_code.loadFromARFile(CARCODE_FILE);
77                 //キャプチャイメージ用のラスタを準備
78                 raster = new JmfNyARRaster_RGB(320, 240);
79         }
80
81         public void onUpdateBuffer(Buffer i_buffer)
82         {
83                 try {
84                         //キャプチャしたバッファをラスタにセット
85                         raster.setBuffer(i_buffer);
86
87                         //キャプチャしたイメージを表示用に加工
88                         BufferToImage b2i = new BufferToImage((VideoFormat) i_buffer.getFormat());
89                         Image img = b2i.createImage(i_buffer);
90
91                         Graphics g = getGraphics();
92
93                         //マーカー検出
94                         boolean is_marker_exist = nya.detectMarkerLite(raster, 100);
95                         if (is_marker_exist) {
96                                 //変換行列を取得
97                                 nya.getTransmationMatrix(this.trans_mat_result);
98                         }
99                         //情報を画面に書く       
100                         g.drawImage(img, 32, 32, this);
101                         if (is_marker_exist) {
102                                 g.drawString("マーカー検出:" + nya.getConfidence(), 32, 50);
103                                 g.drawString("[m00]" +this.trans_mat_result.m00, 32, 50 + 16*1);
104                                 g.drawString("[m01]" +this.trans_mat_result.m01, 32, 50 + 16*2);
105                                 g.drawString("[m02]" +this.trans_mat_result.m02, 32, 50 + 16*3);
106                                 g.drawString("[m03]" +this.trans_mat_result.m03, 32, 50 + 16*4);
107                                 g.drawString("[m10]" +this.trans_mat_result.m10, 32, 50 + 16*5);
108                                 g.drawString("[m11]" +this.trans_mat_result.m11, 32, 50 + 16*6);
109                                 g.drawString("[m12]" +this.trans_mat_result.m12, 32, 50 + 16*7);
110                                 g.drawString("[m13]" +this.trans_mat_result.m13, 32, 50 + 16*8);
111                                 g.drawString("[m20]" +this.trans_mat_result.m20, 32, 50 + 16*9);
112                                 g.drawString("[m21]" +this.trans_mat_result.m21, 32, 50 + 16*10);
113                                 g.drawString("[m22]" +this.trans_mat_result.m22, 32, 50 + 16*11);
114                                 g.drawString("[m23]" +this.trans_mat_result.m23, 32, 50 + 16*12);
115                         } else {
116                                 g.drawString("マーカー未検出:", 32, 100);
117                         }
118                 } catch (Exception e) {
119                         e.printStackTrace();
120                 }
121
122         }
123
124         private void startCapture()
125         {
126                 try {
127                         capture.start();
128                 } catch (Exception e) {
129                         e.printStackTrace();
130                 }
131         }
132
133         public static void main(String[] args)
134         {
135                 try {
136                         NyarToolkitLinkTest mainwin = new NyarToolkitLinkTest();
137                         mainwin.setVisible(true);
138                         mainwin.startCapture();
139                 } catch (Exception e) {
140                         e.printStackTrace();
141                 }
142
143         }
144
145 }