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

डेटा प्रतिनिधित्व

वे Python डेटा प्रकार जिन्हें ब्लॉक्स रनटाइम पर प्राप्त करते हैं: Batch, WorkflowImageData, और VideoMetadata।

कई फ्रेमवर्क डेवलपर्स के काम करने के लिए मानक डेटा प्रकार लागू करते हैं, और Workflows इकोसिस्टम भी इससे अलग नहीं है। जबकि प्रकार एक Workflow में पास किए जा रहे डेटा के उच्च-स्तरीय अमूर्तीकरण का प्रतिनिधित्व करता है, इसलिए उन विशिष्ट डेटा प्रकारों को समझना महत्वपूर्ण है जो WorkflowBlock.run(...) मेथड को Workflow blocks बनाते समय प्रदान किए जाएंगे।

और यहीं आप बिल्कुल यही सीखेंगे।

Batch

जब कोई Workflow block बैच प्रोसेसिंग घोषित करता है, तो वह Batch नामक एक विशेष कंटेनर प्रकार का उपयोग करता है। सभी बैच-उन्मुख पैरामीटर को Batch[X]से रैप किया जाता है, जहाँ X डेटा प्रकार है:

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

# Workflow block का run method
def run(self, x: Batch[int], y: Batch[float]) -> BlockResult:
   pass

यह Batch प्रकार Python सूची की तरह कार्य करता है, लेकिन एक मुख्य अंतर के साथ: यह केवल-पढ़ने योग्यहै। आप इसके तत्वों को संशोधित नहीं कर सकते, और न ही तत्व जोड़ या हटा सकते हैं। हालांकि, कई उपयोगी ऑपरेशन उपलब्ध हैं:

तत्वों के माध्यम से इटरेशन

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

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

कई बैंचों को ज़िप करना

बैचों के संरेखण की चिंता न करें

Execution Engine यह सुनिश्चित करता है कि run method को प्रदान किए गए बैच समान आकार के हों, जिससे इटरेशन के दौरान असमान बैच आकारों के कारण किसी भी तत्व की हानि रोकी जाती है।

बैच तत्व सूचकांकों को प्राप्त करना

यह ट्यूपलों की एक सूची लौटाता है, जहाँ प्रत्येक ट्यूपल संभावित रूप से नेस्टेड बैच संरचनाओं में बैच तत्व की स्थिति का प्रतिनिधित्व करता है।

तत्वों और उनके सूचकांकों दोनों को प्राप्त करते हुए इटरेशन

के अतिरिक्त मेथड्स Batch कंटेनर

Batch इंटरफ़ेस में अन्य मेथड भी हैं, जैसे remove_by_indices(...) या broadcast(...), लेकिन इन्हें Workflow blocks के भीतर उपयोग करने के लिए अभिप्रेत नहीं किया गया है। इन मेथड्स का मुख्य रूप से उपयोग block को डेटा प्रदान करते समय Execution Engine द्वारा किया जाता है।

WorkflowImageData

WorkflowImageData एक dataclass है जो एक image को उसकी metadata के साथ समाहित करती है, और Workflow block के भीतर image representation को manipulate करने के लिए उपयोगी methods प्रदान करती है।

कुछ उपयोगकर्ता यह अपेक्षा कर सकते हैं कि np.ndarray जब image kind घोषित किया जाता है, तो Execution Engine द्वारा सीधे प्रदान किया जाए। हालांकि यह एक सुविधाजनक और सरल दृष्टिकोण हो सकता है, लेकिन इससे कुछ सीमाएँ आती हैं, जैसे:

  • मेटाडेटा का अभाव: केवल एक np.ndarrayके साथ, data lineage या मूल फ़ाइल के भीतर image के स्थान जैसी metadata जोड़ने का कोई तरीका नहीं है (उदाहरण के लिए, cropped images के साथ काम करते समय)।

  • कई representations को cache करने में असमर्थता: यदि कई blocks को image serialize करके HTTP के माध्यम से भेजनी हो, तो WorkflowImageData अलग-अलग image representations, जैसे base64-encoded versions, के cache की अनुमति देता है, जिससे दक्षता बेहतर होती है।

वीडियो मेटाडेटा

चूँकि Execution Enginge v1.2.0, हमने video_metadata को WorkflowImageDataमें जोड़ा है। यह ऑब्जेक्ट वीडियो प्रोसेसिंग के संदर्भ को रखने के लिए है और केवल वीडियो प्रोसेसिंग blocks के लिए प्रासंगिक होगा। अन्य blocks इसके अस्तित्व की अनदेखी कर सकते हैं यदि वे आउटपुट image नहीं बना रहे हों (जिस पर अगले खंड में चर्चा की गई है)।

पर कार्य करना WorkflowImageData इसके इंटरफ़ेस को समझ लेने के बाद यह काफी सरल है। यहाँ कुछ मुख्य methods और properties हैं:

नीचे आप एक उदाहरण पा सकते हैं जो image को रूपांतरित करते समय metadata को सुरक्षित रखना दिखाता है

छवियों की क्रॉपिंग

जब आपका block dimensionality बढ़ाता है और output प्रदान करता है जिसमें image kind - आमतौर पर इसका मतलब image को crop करना होता है। ऐसे मामलों में input image video_metadata को हटाया जाना चाहिए (क्योंकि आमतौर पर उन्हें रखना अर्थपूर्ण नहीं होता, और अंतर्निहित video processing blocks dynamically बनाए गए blocks के लिए सही ढंग से काम नहीं करेंगे)।

नीचे आप उस operation के लिए implementation का एक प्रारूप पा सकते हैं:

कुछ मामलों में आप संरक्षित रखना चाह सकते हैं video_metadata. ऐसी स्थिति का एक उदाहरण तब है जब आपका block स्थिर निर्देशांकों के आधार पर crops बनाता है (जैसे कई स्थिर Regions of Interest वाला video single footage, जिन पर अलग-अलग trackers लागू किए जाने हैं) - तब आप चाहते हैं कि परिणामस्वरूप crops को वीडियो के संदर्भ में संसाधित किया जाए, मानो वे अलग-अलग cameras द्वारा उत्पन्न किए गए हों। व्यवहार को समायोजित करने के लिए create_crop(...) मेथड के, बस जोड़ें preserve_video_metadata=True:

साझा पूर्वज के बिना images का विलय

यदि साझा parent_metadata को उन multiple images के लिए नहीं इंगित किया जा सकता जिन्हें आप merge करने का प्रयास कर रहे हैं, तो आपको यह दर्शाना चाहिए कि Workflow में "एक नई" image प्रकट होती है। ऐसा करने के लिए बस:

VideoMetadata

VideoMetadata एक dataclass है जो वीडियो फ्रेम और वीडियो स्रोत के बारे में निम्नलिखित metadata प्रदान करती है:

अंतिम अपडेट

क्या यह उपयोगी था?