/** * このターゲットについて、非同期に認識依頼を出します。このプログラムはサンプルなので、別スレッドでIDマーカ判定をして、 * 三秒後に適当なサイズとDirectionを返却するだけです。 * @param i_target * @return * @throws NyARException */ public void requestAsyncMarkerDetect(NyARReality i_reality, NyARRealitySource i_source, NyARRealityTarget i_target) { //ターゲットから画像データなどを取得するときは、スレッドからではなく、ここで同期して取得してコピーしてからスレッドに引き渡します。 //100x100の領域を切りだして、Rasterを作る。 NyARRgbRaster raster = new NyARRgbRaster(100, 100, NyARBufferType.INT1D_X8R8G8B8_32); i_reality.getRgbPatt2d(i_source, i_target.refTargetVertex(), 1, raster); //コピーしたラスタとターゲットのIDをスレッドへ引き渡す。 Thread t = new Thread(new AsyncThread(this, i_target.getSerialId(), raster).run); t.Start(); return; }
public void Test() { try { NyARParam param=NyARParam.createFromARParamFile(new StreamReader(PARAM_FILE)); param.changeScreenSize(320,240); NyARReality reality=new NyARReality(param.getScreenSize(),10,1000,param.getPerspectiveProjectionMatrix(),null,10,10); NyARRealitySource reality_in=new NyARRealitySource_Reference(320,240,null,2,100,NyARBufferType.BYTE1D_B8G8R8X8_32); //試験イメージの読み出し(320x240 BGRAのRAWデータ) StreamReader sr = new StreamReader(DATA_FILE); BinaryReader bs = new BinaryReader(sr.BaseStream); byte[] raw = bs.ReadBytes(320 * 240 * 4); Array.Copy(raw, (byte[])reality_in.refRgbSource().getBuffer(), raw.Length); Stopwatch sw = new Stopwatch(); sw.Start(); for(int i=0;i<1000;i++){ reality.progress(reality_in); } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds + "[ms]"); Console.WriteLine(reality.getNumberOfKnown()); Console.WriteLine(reality.getNumberOfUnknown()); Console.WriteLine(reality.getNumberOfDead()); NyARRealityTarget[] rt = new NyARRealityTarget[10]; reality.selectUnKnownTargets(rt); reality.changeTargetToKnown(rt[0],2,80); Console.WriteLine(rt[0]._transform_matrix.m00+","+rt[0]._transform_matrix.m01+","+rt[0]._transform_matrix.m02+","+rt[0]._transform_matrix.m03); Console.WriteLine(rt[0]._transform_matrix.m10+","+rt[0]._transform_matrix.m11+","+rt[0]._transform_matrix.m12+","+rt[0]._transform_matrix.m13); Console.WriteLine(rt[0]._transform_matrix.m20+","+rt[0]._transform_matrix.m21+","+rt[0]._transform_matrix.m22+","+rt[0]._transform_matrix.m23); Console.WriteLine(rt[0]._transform_matrix.m30+","+rt[0]._transform_matrix.m31+","+rt[0]._transform_matrix.m32+","+rt[0]._transform_matrix.m33); } catch (Exception e) { Console.WriteLine(e.StackTrace); } return; }
/** * このターゲットについて、非同期に認識依頼を出します。このプログラムはサンプルなので、別スレッドでIDマーカ判定をして、 * 三秒後に適当なサイズとDirectionを返却するだけです。 * @param i_target * @return * @throws NyARException */ public void requestAsyncMarkerDetect(NyARReality i_reality,NyARRealitySource i_source,NyARRealityTarget i_target) { //ターゲットから画像データなどを取得するときは、スレッドからではなく、ここで同期して取得してコピーしてからスレッドに引き渡します。 //100x100の領域を切りだして、Rasterを作る。 NyARRgbRaster raster=new NyARRgbRaster(100,100,NyARBufferType.INT1D_X8R8G8B8_32); i_reality.getRgbPatt2d(i_source, i_target.refTargetVertex(),1, raster); //コピーしたラスタとターゲットのIDをスレッドへ引き渡す。 Thread t=new Thread(new AsyncThread(this,i_target.getSerialId(),raster).run); t.Start(); return; }