フレームワークのコンセプト

MediaPipe Framework を使用する前に、次のコンセプトを理解しておいてください。

基本情報

パケット

基本的なデータフロー ユニット。パケットは、数値タイムスタンプと、不変ペイロードへの共有ポインタで構成されます。ペイロードは任意の C++ 型にできます。ペイロードの型はパケットのタイプとも呼ばれます。パケットは値クラスであり、低コストでコピーできます。各コピーは、参照カウントのセマンティクスとともにペイロードの所有権を共有します。各コピーには独自のタイムスタンプがあります。パケットもご覧ください。

グラフ

MediaPipe 処理は、ノード間のパケットフローパスを定義するグラフ内で行われます。グラフには任意の数の入力と出力を含めることができ、データフローは分岐やマージを行うことができます。通常、データは前に流れますが、逆方向のループが発生する可能性があります。詳細については、グラフをご覧ください。

ノード

ノードはパケットを生成または消費します。グラフの処理の大部分はノードで行われます。歴史的な理由から「計算機」とも呼ばれています。 各ノードのインターフェースは、タグやインデックスで識別される複数の入出力ポートを定義します。ports詳しくは、電卓をご覧ください。

ストリーム

ストリームは、一連のパケットを伝送する 2 つのノード間の接続であり、タイムスタンプは単調に増加する必要があります。

サイドパケット

ノード間のサイドパケット接続は、(タイムスタンプが指定されていない)単一のパケットを伝送します。ストリームは時間の経過とともに変化するデータの流れを表しますが、一定の状態を維持するデータを提供するために使用できます。

パケットポート

ポートには関連するタイプがあります。ポートを通過するパケットは、そのタイプである必要があります。出力ストリーム ポートは、同じタイプの任意の数の入力ストリーム ポートに接続できます。各コンシューマは、出力パケットの個別のコピーを受け取り、独自のキューを持つため、自分のペースで消費できます。同様に、1 つのサイドパケット出力ポートは、必要な数のサイドパケット入力ポートに接続できます。

ポートが必須の場合、グラフが有効であるためには接続を確立する必要がありますが、ポートは接続されていないままでもかまいません。オプションの場合です。

入力と出力

データフローは、入力ストリームを持たず(ファイルからの読み取りなどによって)自発的にパケットを生成するソースノードから、またはアプリケーションがパケットをグラフにフィードできるようにするグラフ入力ストリームから開始できます。

同様に、データを受信してさまざまな宛先(ファイルやメモリバッファなど)に書き込むシンクノードがあります。アプリはコールバックを使用してグラフからの出力を受け取ることもできます。

ランタイムの動作

グラフの存続期間

グラフが初期化されると、グラフを起動してデータの処理を開始し、各ストリームが閉じるかグラフがキャンセルされるまでパケットのストリームを処理できます。その後、グラフを破棄または再開できます。

ノードの存続期間

フレームワークがノードで呼び出す主なライフタイム メソッドには、次の 3 つがあります。

  • Open: 他のメソッドの前に 1 回呼び出されます。このメソッドを呼び出すと、ノードが必要とするすべての入力側のパケットが使用可能になります。
  • プロセス: ノードの入力ポリシーに従って、新しい入力セットが利用可能になると、複数回呼び出されます。
  • Close: 終了時に 1 回呼び出されます。

また、各計算ツールでコンストラクタとデストラクタを定義できます。これらは、処理されたデータとは無関係なリソースの作成や割り当て解除に役立ちます。

入力ポリシー

デフォルトの入力ポリシーは、タイムスタンプによるパケットの決定論的照合です。ノードは、自身の Process メソッドの呼び出しにおいて、同じタイムスタンプのすべての入力を同時に受け取ります。また、連続する入力セットはタイムスタンプ順に受信します。そのためには、同じタイムスタンプを持つパケットがすべての入力ストリームで受信されるまで、または、そのタイムスタンプを持つパケットが未受信のストリームに到着しないことが保証されるまで、一部のパケットの処理を遅らせる必要があります。

InputStreamHandler という別の種類のコンポーネントを使用して実装する他のポリシーも使用できます。

詳細については、同期をご覧ください。

リアルタイム ストリーム

MediaPipe 電卓グラフは、インタラクティブなアプリケーションの動画フレームまたは音声フレームのストリームを処理するためによく使用されます。通常、各計算ツールは、特定のタイムスタンプのすべての入力パケットが利用可能になるとすぐに実行されます。リアルタイムのグラフで使用される計算ツールでは、ダウンストリームの計算ツールを迅速にスケジュールできるように、入力タイムスタンプの範囲に基づいて出力タイムスタンプの範囲を定義する必要があります。詳しくは、リアルタイム ストリームをご覧ください。