1 package jp.nyatla.nyartoolkit.dev;
\r
3 import java.awt.Color;
\r
4 import java.awt.Frame;
\r
5 import java.awt.Graphics;
\r
6 import java.awt.Image;
\r
7 import java.awt.Insets;
\r
9 import javax.media.Buffer;
\r
10 import javax.media.format.VideoFormat;
\r
11 import javax.media.util.BufferToImage;
\r
12 import java.awt.image.*;
\r
13 import jp.nyatla.nyartoolkit.NyARException;
\r
14 import jp.nyatla.nyartoolkit.jmf.utils.*;
\r
15 import jp.nyatla.nyartoolkit.nyidmarker.NyARIdMarkerPickup;
\r
16 import jp.nyatla.nyartoolkit.core.*;
\r
17 import jp.nyatla.nyartoolkit.core.param.*;
\r
18 import jp.nyatla.nyartoolkit.core.pickup.*;
\r
19 import jp.nyatla.nyartoolkit.core.raster.NyARBinRaster;
\r
20 import jp.nyatla.nyartoolkit.core.rasterfilter.rgb2bin.*;
\r
21 import jp.nyatla.utils.j2se.*;
\r
22 import jp.nyatla.nyartoolkit.nyidmarker.*;
\r
24 public class PattPickupTest extends Frame implements JmfCaptureListener
\r
26 private final String PARAM_FILE = "../Data/camera_para.dat";
\r
28 private static final long serialVersionUID = -2110888320986446576L;
\r
30 private JmfCaptureDevice _capture;
\r
32 private JmfNyARRaster_RGB _capraster;
\r
34 private NyARSquareDetector _detector;
\r
36 protected INyARRasterFilter_RgbToBin _tobin_filter;
\r
38 private NyARBinRaster _bin_raster;
\r
40 private NyARSquareStack _stack = new NyARSquareStack(100);
\r
42 public PattPickupTest() throws NyARException
\r
44 setTitle("JmfCaptureTest");
\r
45 Insets ins = this.getInsets();
\r
46 this.setSize(640 + ins.left + ins.right, 480 + ins.top + ins.bottom);
\r
47 JmfCaptureDeviceList dl = new JmfCaptureDeviceList();
\r
48 this._capture = dl.getDevice(0);
\r
49 if (!this._capture.setCaptureFormat(JmfCaptureDevice.PIXEL_FORMAT_RGB, 320, 240, 30.0f)) {
\r
50 if (!this._capture.setCaptureFormat(JmfCaptureDevice.PIXEL_FORMAT_YUV, 320, 240, 30.0f)) {
\r
51 throw new NyARException("キャプチャフォーマットが見つかりません。");
\r
54 NyARParam ar_param = new NyARParam();
\r
55 ar_param.loadARParamFromFile(PARAM_FILE);
\r
56 ar_param.changeScreenSize(320, 240);
\r
57 this._capraster = new JmfNyARRaster_RGB(320, 240, this._capture.getCaptureFormat());
\r
58 this._capture.setOnCapture(this);
\r
59 this._detector = new NyARSquareDetector(ar_param.getDistortionFactor(), ar_param.getScreenSize());
\r
60 this._bin_raster = new NyARBinRaster(320, 240);
\r
61 this._tobin_filter = new NyARRasterFilter_ARToolkitThreshold(110);
\r
71 private int getSQPoint(NyARSquare i_sq)
\r
73 int lx1 = i_sq.imvertex[0].x - i_sq.imvertex[2].x;
\r
74 int ly1 = i_sq.imvertex[0].y - i_sq.imvertex[2].y;
\r
75 int lx2 = i_sq.imvertex[1].x - i_sq.imvertex[3].x;
\r
76 int ly2 = i_sq.imvertex[1].y - i_sq.imvertex[3].y;
\r
77 return (int) Math.sqrt((lx1 * lx1) + (ly1 * ly1)) * (int) Math.sqrt(((lx2 * lx2) + (ly2 * ly2)));
\r
80 private INyARColorPatt _patt1 = new NyARColorPatt_O3(64, 64);
\r
82 private INyARColorPatt _patt2 = new NyARColorPatt_Perspective(100,100);
\r
84 private NyARIdMarkerPickup _patt3 = new NyARIdMarkerPickup();
\r
86 public void onUpdateBuffer(Buffer i_buffer)
\r
89 Insets ins = this.getInsets();
\r
90 Graphics g = getGraphics();
\r
94 this._capraster.setBuffer(i_buffer);
\r
95 this._tobin_filter.doFilter(this._capraster, this._bin_raster);
\r
96 this._detector.detectMarker(this._bin_raster, this._stack);
\r
99 NyARSquare t = null;
\r
100 // ど れ に し よ う か なー
\r
101 for (int i = this._stack.getLength() - 1; i >= 0; i--) {
\r
102 NyARSquare sq = (NyARSquare) this._stack.getItem(i);
\r
103 int wp = getSQPoint(sq);
\r
104 if (wp < max_point) {
\r
111 BufferedImageSink sink = new BufferedImageSink(this._patt1.getWidth(), this._patt1.getHeight());
\r
112 BufferedImageSink sink2 = new BufferedImageSink(this._patt2.getWidth(), this._patt2.getHeight());
\r
113 // BufferedImageSink sink3 = new BufferedImageSink(this._patt3.getWidth(), this._patt3.getHeight());
\r
117 this._patt1.pickFromRaster(this._capraster, t);
\r
119 sink.sinkFromRaster(this._patt1);
\r
120 g1=sink.getGraphics();
\r
121 g1.setColor(Color.red);
\r
122 g1.drawLine(this._patt1.getWidth()/2,0,this._patt1.getWidth()/2,this._patt1.getHeight());
\r
123 g1.drawLine(0,this._patt1.getHeight()/2,this._patt1.getWidth(),this._patt1.getHeight()/2);
\r
127 this._patt2.pickFromRaster(this._capraster, t);
\r
129 sink2.sinkFromRaster(this._patt2);
\r
130 g2=sink2.getGraphics();
\r
131 g2.setColor(Color.red);
\r
132 g2.drawLine(this._patt1.getWidth()/2,0,this._patt1.getWidth()/2,this._patt1.getHeight());
\r
133 g2.drawLine(0,this._patt1.getHeight()/2,this._patt1.getWidth(),this._patt1.getHeight()/2);
\r
136 NyARIdMarkerData data =new NyARIdMarkerData();
\r
137 NyARIdMarkerParam param =new NyARIdMarkerParam();
\r
140 this._patt3.pickFromRaster(this._capraster, t,data,param);
\r
141 System.out.println("model="+data.model);
\r
142 System.out.println("domain="+data.ctrl_domain);
\r
143 System.out.println("maskl="+data.ctrl_mask);
\r
144 System.out.println("data= "+data.data[0]+","+data.data[1]+","+data.data[2]);
\r
146 /* sink3.sinkFromRaster(this._patt3);
\r
147 g3=sink.getGraphics();
\r
148 g3.setColor(Color.red);
\r
149 g2.drawRect(10,10,10,10);
\r
150 g2.drawRect(80,10,10,10);
\r
151 g2.drawRect(10,80,10,10);
\r
152 g2.drawRect(80,80,10,10);*/
\r
153 // g2.drawLine(this._patt3.sv[0]-1,this._patt3.sv[1],this._patt3.sv[0]+1,this._patt3.sv[1]);
\r
154 // g2.drawLine(this._patt3.sv[0],this._patt3.sv[1]-1,this._patt3.sv[0],this._patt3.sv[1]+1);
\r
155 // g2.drawLine(this._patt3.sv[2]-1,this._patt3.sv[3],this._patt3.sv[2]+1,this._patt3.sv[3]);
\r
156 // g2.drawLine(this._patt3.sv[2],this._patt3.sv[3]-1,this._patt3.sv[2],this._patt3.sv[3]+1);
\r
158 BufferedImage img=new BufferedImage(45,256, BufferedImage.TYPE_INT_RGB);
\r
160 g.drawImage(img, ins.left, ins.top+240,45,256, null);
\r
162 g2.setColor(Color.blue);
\r
163 for (int i = 0; i < 225*4; i++) {
\r
164 g2.drawRect(this._patt3.vertex_x[i]-1,this._patt3.vertex_y[i]-1, 2, 2);
\r
166 */ g2.setColor(Color.red);
\r
167 for (int i = 0; i <4; i++) {
\r
168 g2.drawRect(this._patt3.vertex2_x[i]-1,this._patt3.vertex2_y[i]-1, 2, 2);
\r
171 g.drawImage(sink, ins.left + 320, ins.top, 128, 128, null);
\r
172 g.drawImage(sink2, ins.left + 320, ins.top + 128, 400, 400, null);
\r
173 // g.drawImage(sink3, ins.left + 100, ins.top + 240, this._patt3.getWidth() * 10, this._patt3.getHeight() * 10, null);
\r
177 BufferToImage b2i = new BufferToImage((VideoFormat) i_buffer.getFormat());
\r
178 Image img = b2i.createImage(i_buffer);
\r
179 g.drawImage(img, ins.left, ins.top, this);
\r
180 g.setColor(Color.blue);
\r
181 for (int i = 0; i < 225*4; i++) {
\r
182 g.drawRect(ins.left+this._patt3.vertex_x[i]-1,ins.top+this._patt3.vertex_y[i]-1, 2, 2);
\r
187 * { //輪郭パターン NyARSquare s=new NyARSquare(); for(int i=0;i<4;i++){ s.imvertex[i].x=(int)t.sqvertex[i].x; s.imvertex[i].y=(int)t.sqvertex[i].y; }
\r
188 * //一番それっぽいパターンを取得 this._patt1.pickFromRaster(this._capraster,s); //パターンを書く BufferedImageSink sink=new
\r
189 * BufferedImageSink(this._patt1.getWidth(),this._patt1.getHeight()); sink.sinkFromRaster(this._patt1);
\r
190 * g.drawImage(sink,ins.left+320,ins.top+128,128,128,null); }
\r
196 } catch (Exception e) {
\r
197 e.printStackTrace();
\r
201 public void startCapture()
\r
204 this._capture.start();
\r
205 } catch (Exception e) {
\r
206 e.printStackTrace();
\r
210 public static void main(String[] args)
\r
213 PattPickupTest mainwin = new PattPickupTest();
\r
214 mainwin.setVisible(true);
\r
215 mainwin.startCapture();
\r
216 } catch (Exception e) {
\r
217 e.printStackTrace();
\r