For the complete documentation index, see llms.txt. This page is also available as Markdown.

データ表現

ブロックが実行時に受け取るPythonデータ型: Batch、WorkflowImageData、VideoMetadata。

多くのフレームワークは、開発者が扱う標準データ型を強制しており、Workflows エコシステムも例外ではありません。 種類 Workflow における kind は、通過するデータの高レベルな抽象化を表しますが、提供される具体的なデータ型を理解することが重要です WorkflowBlock.run(...) Workflow ブロックを作成する際のメソッドです。

そして、まさにここでそれを学ぶことができます。

Batch

Workflow ブロックがバッチ処理を宣言するとき、Batch と呼ばれる特別なコンテナ型を使用します。バッチ指向のすべてのパラメータは次のようにラップされます: Batch[X]ここで X はデータ型です:

from inference.core.workflows.execution_engine.entities.base import Batch
from inference.core.workflows.prototypes.block import BlockResult

# Workflow ブロックの run メソッド
def run(self, x: Batch[int], y: Batch[float]) -> BlockResult:
   pass

この Batch 型は Python の list と同様に機能しますが、1 つ重要な違いがあります。それは 読み取り専用です。要素を変更したり、要素を追加・削除したりすることはできません。ただし、いくつか便利な操作が利用できます:

要素の反復

from inference.core.workflows.execution_engine.entities.base import Batch

def iterate(batch: Batch[int]) -> None:
    for element in batch:
        print(element)

複数のバッチを zip する

バッチの整列について心配する必要はありません

Execution Engine は、run メソッドに渡されるバッチが同じサイズになるよう保証するため、反復中にバッチサイズの不一致によって要素が失われることはありません。

バッチ要素のインデックスを取得する

これはタプルのリストを返します。各タプルは、入れ子になった可能性のあるバッチ構造内でのバッチ要素の位置を表します。

要素とそのインデックスを同時に取得しながら反復する

の追加メソッド Batch コンテナ

Batch インターフェースには、次のような他のメソッドもあります。 remove_by_indices(...) または broadcast(...)、これらは Workflow ブロック内で使用することを意図したものではありません。これらのメソッドは主に Execution Engine がブロックへデータを提供する際に使用します。

WorkflowImageData

WorkflowImageData は、画像とそのメタデータをまとめて格納する dataclass で、Workflow ブロック内で画像表現を操作するための便利なメソッドを提供します。

一部のユーザーは、 np.ndarray が、Execution Engine から直接提供されることを期待するかもしれません。 image kind が宣言されているとき。これは便利で分かりやすい方法ですが、次のような制約があります:

  • メタデータが不足すること: 単に np.ndarrayだけでは、データ系譜や元ファイル内での画像の位置(たとえば切り抜き画像を扱う場合)といったメタデータを付与する方法がありません。

  • 複数の表現をキャッシュできないこと: 複数のブロックが画像をシリアライズして HTTP 経由で送信する必要がある場合、WorkflowImageData は base64 エンコード版など異なる画像表現をキャッシュでき、効率が向上します。

動画メタデータ

Execution Engine では v1.2.0で、追加されました video_metadataWorkflowImageDataこのオブジェクトは動画処理のコンテキストを保持するためのもので、動画処理ブロックにのみ関連します。出力画像を作成しない場合、他のブロックはその存在を無視してもかまいません(次のセクションで説明します)。

を扱う WorkflowImageData は、そのインターフェースを理解すればかなり簡単です。主なメソッドとプロパティをいくつか示します:

以下に、画像を変換しながらメタデータを保持する方法を示す例を示します

画像の切り抜き

ブロックが次元を増やし、次を持つ出力を返す場合 image kind - 通常それは画像の切り抜きを意味します。そのような場合、入力画像 video_metadata は削除する必要があります(通常、それらを保持する意味がなく、基盤となる動画処理ブロックは動的に作成されたブロックに対して正しく動作しないためです)。

その操作の実装の下書きを以下に示します:

場合によっては、 video_metadataそのような状況の例は、ブロックが固定座標に基づいて切り抜きを生成する場合です(たとえば、複数の固定 Region of Interest に個別トラッカーを適用する単一動画フッテージなど)。その場合、結果の切り抜きを、あたかも別々のカメラで生成されたかのように、動画の文脈で処理したいはずです。次のように create_crop(...) の動作を調整するには create_crop(...) メソッドで、単に次を追加します preserve_video_metadata=True:

共通の前任を持たない画像のマージ

共通の parent_metadata を、マージしようとしている複数の画像に対して指定できない場合は、Workflow に「新しい」画像が現れることを示す必要があります。簡単には次のようにします:

VideoMetadata

VideoMetadata は、動画フレームと動画ソースに関する次のメタデータを提供する dataclass です:

最終更新

役に立ちましたか?