4

デバイスを最新の (ライプニッツ) リリースに更新したばかりですが、いくつかの観察/問題があります。

1) アプリで、ポーズ データが無効になる断続的な期間が長くなります (2 ~ 3 秒)。この問題は Tango Explorer でも発生するため、ドライバーに問題があると思います。エクスプローラーを起動してそのままにしておくと、「モーション トラッキングが失われました」というダイアログが表示されたり、表示されたりします。誰でもこれを確認できますか?

2) TangoService_connectOnFrameAvailable() コールバックのカラー バッファが戻ってきましたが、リリース ノートに記載されているように YUV420SP です。タンゴ開発者の誰でも、これを RGB に変換するコードを投稿できますか。このようなことをグーグルで検索できることは知っていますが、TangoImageBuffer の幅、高さ、ストライドなどに関連するサンプルがあるとよいでしょう。

4

4 に答える 4

2

簡単に言うと、Tango で使用していた YUV コードは次のとおりです。

// http://en.wikipedia.org/wiki/YUV
int halfi, uvOffset, halfj, uvOffsetHalfj;
float y_scaled, v_scaled, u_scaled;
const float Umax = 0.436f;
const float Vmax = 0.615f;

unsigned char* pData = TangoData::cameraImageBuffer;
unsigned char* iData = TangoData::cameraImageBufferRGBA;
float invByte = 0.0039215686274509803921568627451;  // ( 1 / 255)

is_image_dirty = false;
int size = (int)(TangoData::imageBufferStride * TangoData::imageBufferHeight);

int uOffset = size / 4 + size;
int halfstride = TangoData::imageBufferStride / 2;
for (int i = 0; i < TangoData::imageBufferHeight; ++i)
{
    halfi = i / 2;
    uvOffset = halfi * halfstride;
    for (int j = 0; j < TangoData::imageBufferWidth; ++j)
    {
        halfj = j / 2;
        uvOffsetHalfj = uvOffset + halfj;
        y_scaled = pData[i * TangoData::imageBufferStride + j] * invByte;
        v_scaled = 2 * (pData[uvOffsetHalfj + size] * invByte - 0.5f) * Vmax;
        u_scaled = 2 * (pData[uvOffsetHalfj + uOffset] * invByte - 0.5f) * Umax;
        *iData++ = (unsigned char)((y_scaled + 1.13983f * v_scaled) * 255.0);;
        *iData++ = (unsigned char)((y_scaled - 0.39465f * u_scaled - 0.58060f * v_scaled) * 255.0);
        *iData++ = (unsigned char)((y_scaled + 2.03211f * u_scaled) * 255.0);
        *iData++ = 255;
    }
}

さて、リターン形式に以前の未発表の変更があったとき、私はそれを詳しく調べ、変更し、これが一貫性を維持するかどうかを尋ねました-いつものように、コオロギ。それから 2 つのリリースの前に、彼らはイメージ全体のリターンを無効にしました。親愛なる Google 開発者へ こんなことを言いたくないのですが、これは私の最初のロデオではありません。私は Tango から始めて非常に興奮していましたが、コミュニケーションが完全に欠如していることと、リリース サイクル内の明らかな混乱を考えると、今では幻滅し、完全にうんざりし続けるのではないかと恐れています。Google 以外で AR ツールを検討している私たちは、他の手段を真剣に検討する必要があると思います。率直に言って、Google 開発者の皆さん、自分の進歩に誇りを持っているのなら、そうすべきではありません。これは学術研究プロジェクトとしての A グレードでさえありません。本当に申し訳ありませんが、これはあまりにも長く続き、あなたは悪化しています. ノックオフ!

于 2015-04-19T23:02:39.657 に答える
0

私は同じ問題に遭遇しました。点群の例をプログラミングの基礎として使用します。最初の数秒間はポーズがなく、さらにビューを「正面図」に変更しようとすると、アプリケーションがクラッシュします (ビューと位置を変更できるポーズがないためだと思います)。

1 か月前に質問されたので、カメラ データをキャプチャできたかどうか知りたいです。NV12 から RGB への変換には、次のコードを使用します。

 int size = (int)(buffer->width * buffer->height);
 for (int i = 0; i < buffer->height; i++)
 {
   for (int j = 0; j < buffer->width; j++)
     {
     float y = buffer->data[i * buffer->stride + j];
     float u = buffer->data[size+2*((i / 2) * (buffer->stride / 2) + (j / 2))];
     float v = buffer->data[size+2*((i / 2) * (buffer->stride / 2) + (j / 2))+1];

            TangoData::GetInstance().color_buffer[3*(i*buffer->width+j)]=y;
            TangoData::GetInstance().color_buffer[3*(i*buffer->width+j)+1]=u;
            TangoData::GetInstance().color_buffer[3*(i*buffer->width+j)+2]=v;;
}
}

幅 x 高さで Y データが保存され、その後に UV データが交互に保存されます。変換は、既知の変換 ( Android YUV 形式)を使用して、シェーダーで (FrameAvailable メソッドよりも高速に) 行われます。

attribute vec4 vertex;
attribute vec3 color;
uniform mat4 mvp;
varying vec4 v_color;
void main() {
gl_PointSize = 7.0;
gl_Position = mvp*vertex;
float r=color.x + (1.370705f * (color.z-128.0f));
float g=color.x - (0.698001f * (color.z-128.0f)) - (0.377633f * (color.y-128.0f));
float b=color.x + (1.732446f * (color.y-128.0f));
v_color = vec4(r/255.0f,g/255.0f,b/255.0f,1.0);

このコードは完全に機能しません。

  • Y データ (輝度、したがってグレーの画像を取得する必要があります) をキャプチャしようとすると、グレーのドットだけが表示され、意味がありません。さらに、黒/白のポイントはなく、コントラストがほとんどないグレーのポイントだけです。
  • UV を追加すると、赤と黄色の色が得られます。UV 位置を変更すると、すべて非常に青くなります。オブジェクトや輪郭を検出できません。
  • 数フレーム後、カメラがクラッシュし、次の例外が表示されます (最初に例外が表示されたときは、「YUV」ではなく「RAW」と表示されます)。

     E/camera-metadata﹕ /home/ubuntu/jobs/redwood_internal/RedwoodInternal/Redwood/common/player-engine/‌​src/camera-metadata.cc:56 YUV failed to match frame 1545.014677
    

    - アプリケーションが非常に遅く、多くの時間が必要です。ミューテックスを使用しましたが、何も変わりませんでした。誰かがその問題を解決しましたか、それとも今それを抱えていますか?

カラーカメラを有効にする必要があると言われたので、構成を少し変更しました。しかし、これがどのように行われるかについての説明は見つかりませんでした。次のコードが正しいことを願っています。エラー メッセージは表示されませんでした。

bool TangoData::SetConfig() {

[...]

if (TangoConfig_setBool(config_, "config_enable_color_camera", true) !=
    TANGO_SUCCESS) {
  LOGE("config_enable_color_camera Failed");
  return false;
}

if (TangoConfig_setInt32(config_, "config_color_exp", 300) !=
    TANGO_SUCCESS) {
  LOGE("config_color_exp Failed");
  return false;
}

[...]
return true;
}

この記事の一部が役立つことを願っています。または、ライプニッツ リリースのカメラですでに良い結果が得られていることを願っています!

于 2015-05-15T11:18:24.523 に答える
0

軽率に聞こえるかもしれませんが、更新をやり直してください。

先週 Leibnez にアップデートしたところ、NaN、tango サービスの失敗、INVALID STATE コードという同じ問題が発生しました。今夜、Jacobi にロールバックしようとして Tango の設定を掘り下げていました。更新を確認したところ、Leibnez の「内部」OTA 更新メッセージを受け取りました。このメッセージは、主要な更新メッセージとは異なって見えました。私はそれを更新させ、問題は解決したようです。5分ほど走らせましたが失敗しませんでした...

私の設定は今報告します:

ビルド: KOT49H.150414

于 2015-04-29T00:50:55.103 に答える