デルタフィルター
入力値が変化した場合に、ワークフローの実行を続行できるようにします。
入力値が前回の状態から変化した場合にのみワークフローの実行をトリガーし、変化検出を可能にし、値が一定のままのときの冗長な処理を避け、状態遷移時にのみ下流ステップを実行することでシステム効率を最適化します。
このブロックの仕組み
このブロックは値を監視し、その値が前回の状態と比較して変化した場合にのみワークフローの実行を継続します。このブロックは:
入力として画像(動画メタデータのコンテキスト用)と監視する値を受け取ります
画像から動画メタデータを抽出して、動画ストリーム(video_identifier)を識別します
内部キャッシュから、この video_identifier に対して以前キャッシュされた値を取得します
現在の入力値をキャッシュされた前回の値と比較します
値が変化している場合(現在の値 ≠ 前回の値):
この video_identifier の新しい値でキャッシュを更新します
指定された
next_stepsblocks への実行を継続し、下流処理を許可します
値が変化していない場合(現在の値 == 前回の値):
現在のワークフローブランチを終了し、冗長な下流実行を防ぎます
次のステップへ継続するか、ブランチを終了するいずれかのフロー制御ディレクティブを返します
このブロックは video_identifier によって識別される各動画ストリームごとに個別のキャッシュ値を保持し、複数の動画ソースにわたる値の変化を独立して追跡できます。この動画ごとの追跡により、異なる動画ストリームに切り替えたときにフィルターが適切にリセットされます。このブロックは数値、文字列、検出数など、あらゆる種類の値の監視に対応しており、カウンター、メトリクス、検出結果、その他のワークフローデータの変化検出に柔軟に対応できます。値が実際に変化したときのみ下流ブロックをトリガーすることで、デルタフィルターは値が一定のままのときの不要な処理を防ぎます。これは、多くのフレームで同じ検出数やメトリクス値になることがある動画ワークフローで特に有用です。
一般的な使用例
カウンターの変化検出: カウンター値が変化したときのみアクションをトリガーします(例:line counter の count_in が 5 から 6 に変わったときにデータログを実行し、count が 6 のままなら処理をスキップする)。値が安定しているときの冗長な書き込みや更新を避けます
状態遷移の監視: システム状態や検出結果の遷移を検出し、状態が変化した場合のみワークフローをトリガーします(例:検出クラスが "empty" から "occupied" に変わったときに通知を実行し、状態が "occupied" のままならスキップする)。同じ状態に対する繰り返しのアクションを防ぎます
条件付きデータログ: 値が変化した場合にのみ、データベース、CSV ファイル、または外部システムに書き込みます(例:カウントの変更を OPC や PLC システムに記録し、カウントが変わらない場合はログをスキップする)。ストレージとネットワークのオーバーヘッドを削減します
イベントベースの通知: 値が遷移したときにのみアラートや通知を送信します(例:ゾーンカウントが変わったときにメール通知をトリガーし、カウントが一定のままならスパムを避ける)。通知が繰り返し状態ではなく意味のある変化を表すようにします
最適化された処理パイプライン: 監視対象の値が変化していない場合に下流処理をスキップすることで、動画ワークフローの計算負荷を軽減します(例:フレーム間で検出数が変わらないときは高コストな分析をスキップする)。ワークフロー全体の効率を向上させます
マルチストリームの変化追跡: 複数の動画ストリームにわたって値の変化を個別に監視します(例:異なるカメラフィードごとにゾーンカウントを別々に追跡する)。動画ごとの自動キャッシュにより、各ストリームで正しく変化検出できます
他のブロックへの接続
このブロックは値を監視してワークフローの実行フローを制御し、以下のように接続できます:
カウントやメトリクス系のブロックの後ろに (例:Line Counter、Time in Zone、Velocity、Detection Filter)を使って、カウント、メトリクス、または集計値が変化したタイミングを検出し、値の遷移に基づいて下流処理を条件付きでトリガーします
検出ブロックの後ろに (例:Object Detection、Classification、Keypoint Detection)を使って、検出結果、クラスの変化、または信頼度メトリクスを監視し、検出結果が前のフレームから変化したときのみアクションを実行します
データ処理ブロックの後 (例:Property Definition、Expression、Delta Filter)を使って、計算値や処理済みメトリクスを追跡し、これらの計算値が遷移したときのみワークフローをトリガーすることで、冗長な処理を避けます
データ保存ブロックの前 (例:Local File Sink、CSV Formatter、Roboflow Dataset Upload、Webhook Sink)を使って、監視対象の値が変化したときのみ条件付きでデータを記録または保存し、値が一定のままのときの重複エントリや不要な書き込みを防ぎます
通知ブロックの前 (例:Email Notification、Slack Notification、Twilio SMS Notification)を使って、意味のある変化が発生したときのみアラートをトリガーします(例:カウントの変化、状態遷移)。値が安定しているときの通知スパムを避けます
動画処理ワークフローでは フレームごとの値が多くのフレームにわたって一定のままになる場合でも、このブロックを使って効率的に変化を検出し、必要なときにのみ高コストな下流操作をトリガーすることで、リソース使用を最適化します
型識別子
ステップで次の識別子を使用してください "type" フィールド: roboflow_core/delta_filter@v1 ワークフローにこのブロックをステップとして追加するには。
プロパティ
名前
型
説明
参照
name
str
このステップの一意の識別子を入力してください。
❌
この 参照 列は、で利用可能な動的値を使ってプロパティをパラメータ化できる可能性を示します ワークフロー 実行時。参照 バインディング 詳細は。
ランタイム互換性
soft - ランタイム hosted_serverless, dedicated_deployment;実行 リモート; 入力 動画 このブロックは、プロセスメモリ内に動画ごとの状態を保持します(video_metadata.video_identifier をキーとする)。ステートレスまたは複数レプリカのHTTPランタイムでリモートステップ実行を行うと、連続するリクエストが別々のワーカープロセスによって処理される可能性があるため、呼び出し間で状態がリセットされ、追跡/カウント/集計には意味のない出力になります。安定したフレーム間結果を得るには、永続的な WebRTC セッションでローカルステップ実行を使用してください。
soft - 入力 image このブロックは、動画または繰り返しフレームのワークフローからの時間的コンテキストに依存します。静止画像/写真では、追跡、比較、集計、可視化に使える意味のある履歴がないため、このブロックの利点はほとんど、またはまったくありません。
入力と出力のバインディング
利用可能な接続は、そのバインディング種別によって異なります。どのバインディング種別が デルタフィルター のバージョン v1 あるか確認してください。
入力と出力のバインディング
入力
image(image): 利用できません。値(*): 変化を監視する値。ワークフロー入力またはステップ出力からの任意のデータ型(数値、文字列、検出数、メトリクスなど)を指定できます。現在の video stream に対して、この値が前にキャッシュされた値と異なる場合にのみ、ワークフローブランチは next_steps に進みます。値が同じままなら、冗長な処理を避けるためにブランチは終了します。例:ラインカウンター count ($steps.line_counter.count_in) を監視し、カウントが変化したときのみアクションをトリガーします。next_steps(step): 監視対象の値が前回の状態から変化したときに実行するワークフローステップの一覧。変化が検出された場合にのみ、これらのステップに制御フローが渡り、条件付きの下流処理が可能になります。値が変化していなければ、ブランチが終了するためこれらのステップは実行されません。各ステップセレクタは、値の遷移時に実行されるべきワークフロー内のブロックを参照します。
出力
最終更新
役に立ちましたか?