> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/hi/blocks/blocks/video-processing/frame-delay.md).

# फ़्रेम विलंब

एक पर उत्पन्न मान का संदर्भ लें *पूर्व* उसी वीडियो स्ट्रीम के पिछले फ़्रेम पर। किसी भी वर्कफ़्लो आउटपुट (डिटेक्शन, संख्याएँ, स्ट्रिंग्स, चित्र, ...) को इस ब्लॉक में जोड़ें, एक ऋणात्मक `ऑफ़सेट`, और ब्लॉक उस मान को वैसा ही लौटाता है जैसा वह था `|offset|` फ़्रेम पहले।

केवल अतीत (गैर-धनात्मक) ऑफ़सेट समर्थित हैं। वास्तविक भविष्य की ओर देखना पूरे वर्कफ़्लो आउटपुट में देरी करने की मांग करेगा, जो समकालिक रनटाइम (WebRTC/webexec, single-image HTTP) पर संभव नहीं है, इसलिए इसे यहाँ जानबूझकर उपलब्ध नहीं कराया गया है।

## यह ब्लॉक कैसे काम करता है

1. पढ़ता है `video_metadata` जुड़े हुए `छवि` से प्राप्त करने के लिए `video_identifier` (प्रति-स्ट्रीम स्थिति को पृथक रखने के लिए उपयोग किया जाता है) और एकरूपी `frame_number` (`N`).
2. आने वाले को संग्रहीत करता है `डेटा` को फ़्रेम संख्या द्वारा कुंजीबद्ध प्रति-वीडियो रिंग बफ़र में।
3. सुलझाता है `target_frame = N + offset` (के साथ `offset <= 0`) और लौटाता है `data[target_frame]` जब बफ़र में हो, अन्यथा `default_value`.
4. रिपोर्ट करता है `is_available` (क्या लक्ष्य फ़्रेम बफ़र किया गया था) और `reference_frame_number` (हमेशा वर्तमान फ़्रेम `N`).

## सामान्य उपयोग के मामले

* वर्तमान फ़्रेम की तुलना किसी पिछले फ़्रेम (`-1`, `-5`) का उपयोग परिवर्तन/प्रवृत्ति पहचान के लिए करें।
* एक धीमे, विलंबित सिग्नल को उस फ़्रेम के साथ संरेखित करें जिससे वह संबंधित है।
* याद रखें कि N फ़्रेम पहले कोई मान क्या था (जैसे, 10 फ़्रेम पहले प्रमुख रंग)।

## आवश्यकताएँ और सीमाएँ

* `ऑफ़सेट` होना चाहिए `<= 0`. धनात्मक ऑफ़सेट अस्वीकार किए जाते हैं।
* `|offset|` 256 से अधिक नहीं हो सकता। प्रत्येक बफ़र किया गया फ़्रेम मेमोरी में रखा जाता है, इसलिए किसी इमेज स्ट्रीम को बड़े ऑफ़सेट से विलंबित करना महंगा है (\~1080p पर प्रति फ़्रेम \~6 MB, \~4K पर \~25 MB)। जहाँ संभव हो, पूर्ण छवि की बजाय किसी छोटे व्युत्पन्न मान को विलंबित करना बेहतर है।
* पिछले ऑफ़सेट हर निष्पादन संदर्भ में काम करते हैं; कोई आउटपुट विलंब नहीं जोड़ा जाता।
* स्थिति प्रोसेस मेमोरी में द्वारा कुंजीबद्ध रखी जाती है `video_identifier`; यह स्टेटलेस/मल्टी-रेप्लिका रिमोट HTTP रनटाइम पर कमजोर पड़ती है।
* अधिकतम 16 स्ट्रीमों को एक साथ ट्रैक किया जाता है; उसके बाद सबसे कम हाल में देखी गई स्ट्रीम का बफ़र हटा दिया जाता है।
* एक स्ट्रीम जिसकी `frame_number` पुनः आरंभ होती है (जैसे reconnect पर) उसका बफ़र साफ़ कर दिया जाता है।
* स्थिति वर्कफ़्लो के जीवनकाल तक बनी रहती है और पुनः आरंभ पर रीसेट हो जाती है।
* मान उपलब्ध नहीं होते (लौटाते हुए `default_value`) जब तक कि अनुरोधित तक पहुँचने के लिए पर्याप्त फ़्रेम संसाधित न हो जाएँ `|offset|` गहराई।
* जब `ऑफ़सेट` को एक रनटाइम चयनकर्ता से जोड़ा जाता है, तो बफ़र का आकार सबसे बड़े के अनुसार तय किया जाता है `|offset|` जो अब तक स्ट्रीम पर देखा गया है, इसलिए उथले और गहरे ऑफ़सेट के बीच अदला-बदली करने से गहरा इतिहास उपलब्ध बना रहता है। स्ट्रीम के बीच में ऑफ़सेट बढ़ाने पर गहरे फ़्रेम केवल तभी उपलब्ध होते हैं जब पर्याप्त नए फ़्रेम बफ़र हो जाएँ।

### प्रकार पहचानकर्ता

स्टेप में निम्नलिखित पहचानकर्ता का उपयोग करें `"type"` फ़ील्ड: `roboflow_core/frame_delay@v1` अपने वर्कफ़्लो में ब्लॉक को एक स्टेप के रूप में जोड़ने के लिए।

### गुण

| **नाम**         | **प्रकार**                        | **विवरण**                                                                                                                                                                                           | संदर्भ |
| --------------- | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| `name`          | `str`                             | इस स्टेप के लिए एक विशिष्ट पहचानकर्ता दर्ज करें..                                                                                                                                                   | ❌      |
| `ऑफ़सेट`        | `int`                             | अतीत में सापेक्ष फ़्रेम ऑफ़सेट। <= 0 होना चाहिए: जैसे -1 पिछला फ़्रेम है, -10 दस फ़्रेम पहले है, 0 वर्तमान फ़्रेम है। -256 तक सीमित, क्योंकि प्रत्येक बफ़र किया गया फ़्रेम मेमोरी में रखा जाता है.. | ✅      |
| `default_value` | `Optional[bool, float, int, str]` | जब अनुरोधित फ़्रेम बफ़र में (अभी तक) उपलब्ध न हो, तब लौटाया जाने वाला मान..                                                                                                                         | ❌      |

यह **संदर्भ** स्तंभ यह इंगित करता है कि संपत्ति को वर्कफ़्लो रनटाइम में उपलब्ध गतिशील मानों के साथ पैरामीटराइज़ किया जा सकता है `वर्कफ़्लो` रनटाइम। देखें *बाइंडिंग्स* अधिक जानकारी के लिए।

### रनटाइम संगतता

`सॉफ्ट` - रनटाइम `hosted_serverless`, `dedicated_deployment`; निष्पादन `दूरस्थ`; इनपुट `वीडियो` : ब्लॉक प्रति-वीडियो स्थिति को प्रक्रिया मेमोरी में बनाए रखता है (video\_metadata.video\_identifier द्वारा कुंजीबद्ध)। स्टेटलेस या मल्टी-रिप्लिका HTTP रनटाइम्स पर दूरस्थ स्टेप निष्पादन के साथ, क्रमिक अनुरोधों को अलग-अलग वर्कर प्रक्रियाएँ सर्व कर सकती हैं, इसलिए कॉल्स के बीच स्थिति रीसेट हो जाती है और आउटपुट ट्रैकिंग / काउंटिंग / एग्रीगेशन के लिए अर्थहीन हो जाता है। स्थिर फ़्रेम-से-फ़्रेम परिणामों के लिए एक स्थायी WebRTC सत्र में स्थानीय स्टेप निष्पादन का उपयोग करें।

`सॉफ्ट` - इनपुट `छवि` : ब्लॉक वीडियो या दोहराए गए-फ़्रेम वर्कफ़्लो से समयगत संदर्भ पर निर्भर करता है। एक स्थिर छवि/फ़ोटो के साथ, ट्रैक करने, तुलना करने, समेकित करने या दृश्यीकृत करने के लिए कोई अर्थपूर्ण इतिहास नहीं होता, इसलिए ब्लॉक बहुत कम या कोई लाभ नहीं देता।

### इनपुट और आउटपुट बाइंडिंग्स

उपलब्ध कनेक्शन उसके बाइंडिंग प्रकारों पर निर्भर करते हैं। देखें कि कौन-से बाइंडिंग प्रकार `फ़्रेम विलंब` संस्करण `v1` है।

<details>

<summary>इनपुट और आउटपुट बाइंडिंग्स</summary>

* इनपुट
  * `छवि` ([*`छवि`*](/workflows/hi/developer-guide/developer-guide/kinds/image.md)): बफ़र को अनुक्रमित करने के लिए उपयोग किए जाने वाले वीडियो मेटाडेटा (फ़्रेम संख्या और स्ट्रीम पहचानकर्ता) प्रदान करने वाला छवि / वीडियो फ़्रेम..
  * `डेटा` (*Union\[*[*`list_of_values`*](/workflows/hi/developer-guide/developer-guide/kinds/list-of-values.md)*,* [*`छवि`*](/workflows/hi/developer-guide/developer-guide/kinds/image.md)*,* [*`instance_segmentation_prediction`*](/workflows/hi/developer-guide/developer-guide/kinds/instance-segmentation-prediction.md)*,* [*`*`*](/workflows/hi/developer-guide/developer-guide/kinds/wildcard.md)*,* [*`keypoint_detection_prediction`*](/workflows/hi/developer-guide/developer-guide/kinds/keypoint-detection-prediction.md)*,* [*`object_detection_prediction`*](/workflows/hi/developer-guide/developer-guide/kinds/object-detection-prediction.md)*]*): विलंबित किया जाने वाला मान। यह डिटेक्शन, संख्याएँ, स्ट्रिंग्स, चित्र, या कोई अन्य वर्कफ़्लो आउटपुट हो सकता है..
  * `ऑफ़सेट` ([*`पूर्णांक`*](/workflows/hi/developer-guide/developer-guide/kinds/integer.md)): अतीत में सापेक्ष फ़्रेम ऑफ़सेट। <= 0 होना चाहिए: जैसे -1 पिछला फ़्रेम है, -10 दस फ़्रेम पहले है, 0 वर्तमान फ़्रेम है। -256 तक सीमित, क्योंकि प्रत्येक बफ़र किया गया फ़्रेम मेमोरी में रखा जाता है..
* आउटपुट
  * `आउटपुट` ([`*`](/workflows/hi/developer-guide/developer-guide/kinds/wildcard.md)): किसी भी तत्व का समतुल्य।
  * `is_available` ([`boolean`](/workflows/hi/developer-guide/developer-guide/kinds/boolean.md)): बूलियन फ़्लैग.
  * `reference_frame_number` ([`पूर्णांक`](/workflows/hi/developer-guide/developer-guide/kinds/integer.md)): पूर्णांक मान।

</details>

<details>

<summary>उदाहरण JSON परिभाषा</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/frame_delay@v1",
	    "image": "$inputs.image",
	    "data": "$steps.object_detection_model.predictions",
	    "offset": -1,
	    "default_value": null
	}
```

</details>
