0

私のコンピュータービジョンプロジェクトで大量のデータを管理することに関する概念的なアドバイスを探しています。カメラからプログラムへの入力として、またコードによって生成されたこの大量のデータ ストリームを調整するという概念を、a) 概念化および b) 実装するのに問題があります。

したがって、処理する必要があるデータは、次のように 5 つの個別の「ストリーム」に分割できます。

生フレーム (カメラからの直接入力) ターゲット画像 (前の画像ストリームから取得したサブフレーム) タイムスタンプ (生フレーム用) 車両姿勢データ (車両へのワイヤレス シリアル ポート接続からの GPS、車体角度など)態度データのタイムスタンプ

これを完全に順番に行う場合、一般的な流れは次のようになります。

Frame = grabInputFrame();
TargetsVector = searchForTargets(Frame);
VehicleData = getDataFromVehicle();

for each Target in TargetVector (
    targetData = processData(Target, VehicleData);
    updateTargetLog(targetData);
}

アルゴリズムは非常にプロセッサを集中的に使用し、連続的に関連付けられていないため、スレッドを使用してこれを実行しようとしています (ターゲットの GPS 座標を取得するために色データは必要ないということです)。ただし、画像をターゲットに、タイムスタンプをそれらの画像に合わせて調整する必要があるため、適切な画像に適切な車両データを使用できます。

私の友人はリレーショナル DB アプローチを提案しましたが、私は C++ を使用しています。私が疑問に思っているのは、C++ でリレーショナル DB を模倣する方法 (データまたはターゲット イメージに関連付けられたタイムスタンプまたはターゲット ID のように、キーをデータに関連付ける方法) があるかどうかです。SQL DB に接続すると、これを管理しやすくなりますか? そうすることに関連して、重大なパフォーマンスの低下はありますか? ここで最も重要な点は、何をするにしても、安全にマルチスレッド化できるように共有データをロックできなければならないということです。

このような階層データ構造の経験がある人が私の状況に光を当ててくれることを願っています。あなたのアイデアと批判を前もって感謝します。

4

1 に答える 1