私は同じ問題に遭遇しました。点群の例をプログラミングの基礎として使用します。最初の数秒間はポーズがなく、さらにビューを「正面図」に変更しようとすると、アプリケーションがクラッシュします (ビューと位置を変更できるポーズがないためだと思います)。
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;
}
この記事の一部が役立つことを願っています。または、ライプニッツ リリースのカメラですでに良い結果が得られていることを願っています!