OSDN Git Service

[リリース]NyARToolkit 0.8
[nyartoolkit-and/nyartoolkit-and.git] / sample / jmf / jp / nyatla / nyartoolkit / jmf / sample / NyarToolkitLinkTest.java
1 /**
2  * VFM+ARToolkitテストプログラム
3  * カメラから取り込んだデータからマーカーを検出して、一致度と変換行列を表示します。
4  * (c)2008 A虎@nyatla.jp
5  * airmail(at)ebony.plala.or.jp
6  * http://nyatla.jp/
7  */
8 package jp.nyatla.nyartoolkit.jmf.sample;
9
10 import javax.media.*;
11
12 import javax.media.util.BufferToImage;
13 import javax.media.format.*;
14
15 import jp.nyatla.nyartoolkit.NyARException;
16 import jp.nyatla.nyartoolkit.jmf.utils.*;
17
18 import java.awt.*;
19
20 import jp.nyatla.nyartoolkit.core.*;
21 import jp.nyatla.nyartoolkit.detector.*;
22
23
24
25
26
27
28 public class NyarToolkitLinkTest extends Frame implements JmfCaptureListener
29 {
30     private final String CARCODE_FILE ="../../Data/patt.hiro";
31     private final String PARAM_FILE   ="../../Data/camera_para.dat";
32     private JmfCameraCapture capture;
33     NyARSingleDetectMarker nya;
34     JmfNyARRaster_RGB raster;
35
36     public NyarToolkitLinkTest() throws NyARException,NyARException
37     {
38         setTitle("JmfCaptureTest");
39         setBounds(0,0,320+64,240+64);     
40         //キャプチャの準備
41         capture=new JmfCameraCapture(320,240,30f,JmfCameraCapture.PIXEL_FORMAT_RGB);
42         capture.setCaptureListener(this);
43         
44         //NyARToolkitの準備
45         NyARParam ar_param=new NyARParam();
46         NyARCode ar_code  =new NyARCode(16,16);
47         ar_param.loadFromARFile(PARAM_FILE);
48         ar_param.changeSize(320,240);
49         nya=new NyARSingleDetectMarker(ar_param,ar_code,80.0);
50         ar_code.loadFromARFile(CARCODE_FILE);
51         //キャプチャイメージ用のラスタを準備
52         raster=new JmfNyARRaster_RGB(320,240);
53     }
54
55
56
57     public void onUpdateBuffer(Buffer i_buffer)
58     {
59         try{
60             //キャプチャしたバッファをラスタにセット
61             raster.setBuffer(i_buffer);
62
63             //キャプチャしたイメージを表示用に加工
64             BufferToImage b2i=new BufferToImage((VideoFormat)i_buffer.getFormat());
65             Image img=b2i.createImage(i_buffer);
66
67             Graphics g = getGraphics();            
68             double[][] atm=null;
69
70             //マーカー検出
71             boolean is_marker_exist=nya.detectMarkerLite(raster,100);
72             if(is_marker_exist){
73                 //変換行列を取得
74                 atm=nya.getTransmationMatrix().getArray();
75             }
76             //情報を画面に書く       
77             g.drawImage(img, 32, 32,this);
78             if(is_marker_exist){
79                 g.drawString("マーカー検出:"+nya.getConfidence(),32,50);
80                 for(int i=0;i<3;i++){
81                     for(int i2=0;i2<4;i2++){
82                         g.drawString("["+i+"]["+i2+"]"+atm[i][i2],32,50+(1+i2*3+i)*16);
83                     }
84                     
85                 }
86             }else{
87                 g.drawString("マーカー未検出:",32,100);
88             }
89         }catch(Exception e){
90             e.printStackTrace();
91         }
92        
93         
94         
95         
96     }
97     private void startCapture()
98     {
99         try{
100             capture.start();
101         }catch(Exception e){
102             e.printStackTrace();
103         }
104     }
105     public static void main(String[] args) {
106         try{
107             NyarToolkitLinkTest mainwin = new NyarToolkitLinkTest();
108             mainwin.setVisible(true);
109             mainwin.startCapture();
110         }catch(Exception e){
111             e.printStackTrace();
112         }
113         
114     }
115
116 }