2012-02-20 1 views
0

저는 하루 종일 Kinect에서 (raw) 데이터를 얻지 않으려 고 골치 썩 댔습니다.Kinect에서 깊이 데이터를 얻는 데 문제가 발생했습니다.

나는 단위 테스트를 일종의 프로그램으로 해킹하려고 시도해 왔고 Google-fu는 나를 실망 시켰습니다. Java/JNA/osX를 사용하여 웹에서 다른 Java 예제를 찾을 수 없었습니다.

이것은 해킹 해 본 테스트이지만 프레임 데이터를 추출하는 방법을 얻지 못하는 것 같습니다.

@Test 
public void testDepth() throws InterruptedException { 
    assumeThat(dev, is(not(nullValue()))); 

    final Object lock = new Object(); 
    final long start = System.nanoTime(); 
    System.out.println(dev.getDepthMode()); 
    //dev.startDepth(new DepthHandler(){}); 
    dev.startDepth(new DepthHandler() { 
     int frameCount = 0; 

     @Override 
     public void onFrameReceived(FrameMode mode, ByteBuffer frame, int timestamp) { 

      //ByteBuffer frame1 = frame; 
      frameCount++; 
      byte[] b = new byte[frame.remaining()]; 
      System.out.println(frameCount); 
      System.out.println(frame.capacity()); 
      //System.out.println(frame.); 
      if (frameCount >= 300) { 
       synchronized (lock) { 
        lock.notify(); 
        System.out.format("Got %d depth frames in %4.2fs%n", frameCount, 
          (((double) System.nanoTime() - start)/1000000000)); 
       } 
      } 
     } 
    }); 
    synchronized (lock) { 
     lock.wait(20000); 
    } 
} 

어떤 도움을 많이 주셨습니다.

+0

관심이 있거나 비슷한 문제에 직면 한 모든 사람에게; 그것은 byte 버퍼와 어떻게 관련이 있으며 int 값을 추출하는 방법입니다. 데이터는 위의 예에서 bytebuffer에 있지만 올바른 형식으로 추출해야합니다. – LewisMc

+0

데이터가 C 구조체 형식 인 경우 JNA가 추출 할 수 있도록 도와줍니다. 데이터가 임의적으로 압축 된 경우 크기 및 오프셋을 기반으로 직접 추출해야합니다 (JNA는 포인터 기반 방법으로도 여전히 도움이됩니다). – technomage

답변

0

이 프로젝트를 살펴 보자 : https://github.com/murphydactyl/JavaKinectFingerTracker

getDepthFrame 기능이 가능한 형태로 당신에게 깊이 데이터를 제공합니다 https://github.com/murphydactyl/JavaKinectFingerTracker/blob/9ed9fcb7836276f7ac9c2bf25569c68417158df5/kinectdigitizer/KinectFrameGrabber.java

당신이 '원 JNA의 최신 버전으로 실행하려고하면 일하지 마라. onFrameReceived 기능이 약간 변경되었습니다.