0

kinectと組み合わせて処理を使用して、ポイントクラウドデータをキャプチャしています。私のスケッチは、kinectから配列にポイントのベクトル位置を書き込み、PrintWriterクラスを使用して、各フレームのすべてのポイントを個別のテキストファイルに格納するテキストファイルを作成します。これには、プリントライターによる書き込みを停止することになっている条件が含まれていますが、書き込みを続行し、最終的には電話を切ります。何が間違っているのかについてのアイデアはありますか?これが私のコードです:

録音時:

PVector realWorldPoint; //stores each point as a vector
PVector[] frame = new PVector[arrayLength]; //stores all of the vectors/real world points in an array
int index = 0;

for(int y=0;y < context.depthHeight();y+=steps) //height = 480
{
    for(int x=0;x < context.depthWidth();x+=steps) //width = 640
    {
      if (isRecording == true){
        int offset = x + y * context.depthWidth();
        realWorldPoint = context.depthMapRealWorld()[offset];
        frame[index] = realWorldPoint;
        recording.add(frame);
        index++;
      }
    }
}

そして保存するとき:

if (isRecording == true){
  isRecording = false;
  println("Stopped Recording");
  Enumeration e = recording.elements();
  int i = 0;
  while (e.hasMoreElements()) {

    // Create one directory
    boolean success = (new File("out"+currentFile)).mkdir(); 
    PrintWriter output = createWriter("out"+currentFile+"/frame" + i++ +".txt");
    PVector [] frame = (PVector []) e.nextElement();

    for (int j = 0; j < frame.length; j++) {
     output.println(j + ", " + frame[j].x + ", " + frame[j].y + ", " + frame[j].z );
    }
    output.flush(); // Write the remaining data
    output.close(); //Doesn't seem to close
  }
  println("done recording"); //NEVER EXECUTES
}

これらは大きなファイル(1個あたり約12,000行)であり、私はこれらを1秒間に約30行作成しています。多分それは単にそれをオーバーロードしているので、ストップは決して登録されませんか?また、列挙についてはわかりません。これは他の誰かのコードからコピーされたものですが、このデータ型に関するドキュメントはありません。

4

1 に答える 1

2

プログラムが終了しない理由はわかりませんが、深度データをプレーンテキストとして保存することは間違いなく悪い考えです。毎秒12,000行で30個のファイルを書き込むことは明らかに多くの作業であり、アプリケーションとOSの間で多くのコンテキストスイッチが発生します。

データを保存する別の方法として、元のバイナリ形式を使用してフレームをファイルに書き込むことをお勧めします。x座標とy座標はフレームの構造によって示され、z座標は1桁あたり1バイトを使用しないため、これにより多くのスペースと書き込み時間が節約されます。

追加の改善には、メモリに書き込むものを組み立てて、一度にファイルに書き込むことが含まれます。今のところ、PrintWriter実際にファイルをディスクに書き込むのはいつか次第です。フラッシュの呼び出しを待つ保証はありません。

これによると、正しく使っEnumerationていたので問題ないと思います。

結論:書き込み負荷が原因でプログラムがハングする可能性があります。データの書き込みがより効率的になるとわかります。

于 2012-07-19T06:54:12.567 に答える