2014-11-06 36 views
1

我剛拿到我的平板電腦,我以前有過電話。正如大多數人所知道的,手機的SDK允許通過android攝像頭回調捕獲超幀。如果正確解析,超幀包含所有相關的傳感器數據。在Java Tango SDK(或C SDK)中獲取色彩數據

在阿基米德,我嘗試了以下。我做了一個實現CameraPreviewListener活動:

public class MainActivity extends Activity implements CameraPreviewListener 
{ 
    // Inside of this class we manage another object that implements PreviewCallback 
    ... 
} 

這使得攝像機圖像的拍攝,就像它其他任何Android設備上。 (請注意,在Peanut手機上,這提供了超幀;這只是在平板電腦上提供了原始RGB緩衝區。)同樣,Tango服務的簡單回調函數也可以正常工作。

public class MainActivity extends Activity 
{ 
    private Tango mTango; 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     ... 
     setTangoListeners(); 
    } 
    private void setTangoListeners() 
    { 
     mTango.connectListener(framePairs, new OnTangoUpdateListener() { 

     @Override 
     public void onPoseAvailable(final TangoPoseData pose) 
     { 
      System.out.println("Pose data received."); 
     } 
     @Override 
     public void onXyzIjAvailable(final TangoXyzIjData xyzIj) 
     { 
      System.out.println("Cloud data received."); 
     } 
     @Override 
     public void onTangoEvent(final TangoEvent event) 
     { 
      ... 
     } 
    } 
} 

然而,當我嘗試這兩個結合在一起,像這樣,

public class MainActivity extends Activity implements CameraPreviewListener 
{ 
    // Inside of this class we manage another object that implements PreviewCallback 
    private Tango mTango; 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     ... 
     setTangoListeners(); 
    } 
    private void setTangoListeners() 
    { 
     mTango.connectListener(framePairs, new OnTangoUpdateListener() { 

     @Override 
     public void onPoseAvailable(final TangoPoseData pose) 
     { 
      System.out.println("Pose data received."); 
     } 
     @Override 
     public void onXyzIjAvailable(final TangoXyzIjData xyzIj) 
     { 
      System.out.println("Cloud data received."); 
     } 
     @Override 
     public void onTangoEvent(final TangoEvent event) 
     { 
      ... 
     } 
    } 
} 

奇怪的事情發生。相機回調啓動得很好,並且我也獲得了onPoseAvailable回調。但是,我不再收到onXyzIjAvailable的任何回調。

所以我的問題是:

  1. 上午我在假設的探戈服務需要訪問攝像機的回調產生點雲數據是否正確?

  2. 如果是這樣,是否還有,這樣我可以在大致相同的時間獲得RGB緩衝區和Pointcloud? (是的,我知道校準不是微不足道的。)

  3. 如果沒有解決方案2,是否有任何未來的SDK更新計劃,將允許這樣的事情?

  4. 我還沒有探索過C SDK。也許有辦法在那裏做,如果是的話,有沒有人有任何經驗借貸?

理想情況下,我想訪問原始RGB緩衝區,強度圖像和魚眼圖像;我不在乎如何,只要它有效。

+0

您持有哪款平板電腦?這是「黃石」建築嗎? – 2014-11-06 19:21:19

回答

2
  1. Tango Service確實需要攝像頭訪問才能生成點雲數據。您可以在應用的Android清單文件中設置相機權限。

  2. 探戈服務需要在RGB-IR相機上接收來自onXyzIjAvailable的回調。從我從代碼中觀察到的情況看,您似乎正在嘗試使用Android Camera API以及Tango Service。這意味着RGB-IR攝像頭已被Android Camera API使用,這意味着Tango服務無法再使用RGB紅外攝像頭來生成點雲數據。但是,由於運動跟蹤使用FishEye相機進行Pose估計,您仍然會收到onPoseAvailable回調。

This example顯示你的方式使用connectSurface呼叫呈現到使用探戈服務的Android表面RGB數據。使用此調用不會影響onXyzIjAvailable回調,因爲它是Tango Service API的一部分。

tl:dr:不要使用帶有Tango Service的Android Camera API。請使用connectSurface(int cameraId, Surface surface)功能連接到所需的相機。

+0

這可以在SurfaceView上渲染RGB數據,但是如何獲得RGB(或YUV與花生)數據?我無法找到一種附加PreviewCallback的方法,就像將SuperFrame作爲字節數組的花生一樣。 感謝您對此的進一步解釋 – ArthurT 2015-02-14 17:16:08

+0

請注意,從Android Tango Jacobi發佈開始,上面'connectSurface(in cameraId,Surface surface)'方法被棄用/刪除。您現在需要使用TangoCameraPreview類中的'connectToTangoCamera'方法。請參閱更新的VideoOverlaySample。 https://github.com/googlesamples/tango-examples-java/tree/master/VideoOverlaySample – henderso 2015-03-22 03:07:25