फ़्रेमवर्क सिद्धांत

MediaPipe Framework का इस्तेमाल करने से पहले, इन सिद्धांतों के बारे में अच्छे से जानें.

बुनियादी बातें

पैकेट

बेसिक डेटा फ़्लो यूनिट. पैकेट में अंकों वाला टाइमस्टैंप और बदले न जा सकने वाले पेलोड के लिए शेयर किया गया पॉइंटर होता है. पेलोड किसी भी C++ टाइप का हो सकता है और पेलोड के टाइप को पैकेट का टाइप भी कहा जाता है. पैकेट वैल्यू क्लास होते हैं और इन्हें सस्ते में कॉपी किया जा सकता है. हर कॉपी में पेलोड का मालिकाना हक, रेफ़रंस-गिनती करने वाले सिमैंटिक के साथ शेयर किया जाता है. हर कॉपी का अपना टाइमस्टैंप होता है. Packet भी देखें.

ग्राफ़

MediaPipe प्रोसेसिंग, एक ग्राफ़ के अंदर होती है, जो नोड के बीच पैकेट फ़्लो पाथ को तय करता है. ग्राफ़ में कितने भी इनपुट और आउटपुट हो सकते हैं और डेटा फ़्लो, ब्रांच और मर्ज हो सकता है. आम तौर पर, डेटा आगे की ओर फ़्लो करता है, लेकिन बैकवर्ड लूप हो सकते हैं. ज़्यादा जानकारी के लिए ग्राफ़ देखें.

नोड

नोड, पैकेट बनाते और/या उनका इस्तेमाल करते हैं. ग्राफ़ का ज़्यादातर काम यहीं पर होता है. पुराने वजहों से इन्हें “कैलकुलेटर” के नाम से भी जाना जाता है. हर नोड का इंटरफ़ेस, इनपुट और आउटपुट ports की संख्या के बारे में बताता है, जिनकी पहचान टैग और/या इंडेक्स से की जाती है. ज़्यादा जानकारी के लिए कैलकुलेटर देखें.

स्ट्रीम

स्ट्रीम, दो नोड के बीच का कनेक्शन है, जिसमें पैकेट का क्रम होता है. इनके टाइमस्टैंप एक-दूसरे के हिसाब से बढ़ते होने चाहिए.

साइड पैकेट

नोड के बीच साइड पैकेट कनेक्शन में एक पैकेट (तय नहीं किए गए टाइमस्टैंप के साथ) होता है. इसका इस्तेमाल कुछ ऐसा डेटा देने के लिए किया जा सकता है जो एक जैसा बना रहेगा. जबकि स्ट्रीम, डेटा का ऐसा फ़्लो दिखाती है जो समय के साथ बदलता रहता है.

पैकेट पोर्ट

पोर्ट का एक टाइप होता है. पोर्ट से होकर गुज़रने वाले पैकेट इस तरह के होने चाहिए. आउटपुट स्ट्रीम पोर्ट को, एक ही तरह के कितने भी इनपुट स्ट्रीम पोर्ट से कनेक्ट किया जा सकता है. हर उपभोक्ता को आउटपुट पैकेट की एक अलग कॉपी मिलती है और उसकी अपनी सूची होती है, ताकि वह अपनी रफ़्तार से उनका इस्तेमाल कर सके. इसी तरह, एक साइड पैकेट आउटपुट पोर्ट को ज़रूरत के मुताबिक कई साइड पैकेट इनपुट पोर्ट से कनेक्ट किया जा सकता है.

पोर्ट की ज़रूरत हो सकती है, जिसका मतलब है कि ग्राफ़ के मान्य या वैकल्पिक होने के लिए, एक कनेक्शन बनाया जाना चाहिए. इसका मतलब है कि वह जुड़ा हुआ रह सकता है.

इनपुट और आउटपुट

डेटा फ़्लो, सोर्स नोड से शुरू हो सकता है, जिसमें कोई इनपुट स्ट्रीम नहीं होती है और कभी भी पैकेट बना सकते हैं (जैसे, किसी फ़ाइल से पढ़कर); या ग्राफ़ इनपुट स्ट्रीम से, जो ऐप्लिकेशन फ़ीड पैकेट को ग्राफ़ में बदल सकता है.

इसी तरह, कुछ ऐसे सिंक नोड होते हैं जो डेटा लेते हैं और उसे कई डेस्टिनेशन (जैसे कि फ़ाइल, मेमोरी बफ़र वगैरह) पर लिखते हैं. साथ ही, कोई ऐप्लिकेशन भी कॉलबैक का इस्तेमाल करके, ग्राफ़ से आउटपुट पा सकता है.

रनटाइम का व्यवहार

ग्राफ़ लाइफ़टाइम

ग्राफ़ शुरू होने के बाद, इसे डेटा प्रोसेस करने के लिए शुरू किया जा सकता है. साथ ही, हर स्ट्रीम के बंद होने या ग्राफ़ के रद्द होने तक, पैकेट की स्ट्रीम को प्रोसेस किया जा सकता है. इसके बाद, ग्राफ़ को खत्म किया जा सकता है या फिर से शुरू किया जा सकता है.

नोड का लाइफ़टाइम

किसी नोड पर फ़्रेमवर्क का इस्तेमाल करने के लिए, लाइफ़टाइम के तीन मुख्य तरीके हैं:

  • खोलें: एक बार कॉल किया जाता है, अन्य तरीकों से पहले. इसे कॉल किए जाने पर, नोड के लिए ज़रूरी सभी इनपुट साइड पैकेट उपलब्ध होंगे.
  • प्रोसेस: नोड की इनपुट नीति के मुताबिक, इनपुट का नया सेट उपलब्ध होने पर इसे कई बार कॉल किया जाता है.
  • बंद करें: एक बार कॉल किया जाता है, आखिर में.

इसके अलावा, हर कैलकुलेटर, कंस्ट्रक्टर और डिस्ट्रक्टर के बारे में जानकारी देता है. ये ऐसे रिसॉर्स बनाने और उन्हें तय करने में काम आते हैं जो प्रोसेस किए गए डेटा से अलग होते हैं.

इनपुट से जुड़ी नीतियां

डिफ़ॉल्ट इनपुट नीति, टाइमस्टैंप के हिसाब से पैकेट का डिटरमिनिस्टिक कोलेशन है. नोड को एक ही टाइमस्टैंप के लिए सभी इनपुट एक ही समय पर मिलते हैं. इसके लिए, प्रोसेस के तरीके को शुरू किया जाता है. क्रम के मुताबिक मिलने वाले इनपुट सेट, टाइमस्टैंप के क्रम में मिलते हैं. इसके लिए, कुछ पैकेट को प्रोसेस करने में तब तक देरी करनी पड़ सकती है, जब तक कि सभी इनपुट स्ट्रीम पर एक ही टाइमस्टैंप वाला पैकेट न मिल जाए या फिर यह गारंटी न मिल जाए कि जिन स्ट्रीम पर टाइमस्टैंप नहीं मिला है उन पर पैकेट नहीं आएगा.

अन्य नीतियां भी उपलब्ध हैं, जिन्हें एक अलग तरह के कॉम्पोनेंट का इस्तेमाल करके लागू किया जाता है, जिसे InputStreamHandler कहा जाता है.

ज़्यादा जानकारी के लिए सिंक करना देखें.

रीयल-टाइम स्ट्रीम

MediaPipe Calculator ग्राफ़ का इस्तेमाल अक्सर इंटरैक्टिव ऐप्लिकेशन के लिए, वीडियो या ऑडियो फ़्रेम की स्ट्रीम को प्रोसेस करने में किया जाता है. आम तौर पर, हर कैलकुलेटर उसी समय चालू हो जाता है, जब किसी दिए गए टाइमस्टैंप के लिए उसके सभी इनपुट पैकेट उपलब्ध होते हैं. रीयल-टाइम ग्राफ़ में इस्तेमाल किए जाने वाले कैलकुलेटर को, इनपुट टाइमस्टैंप की सीमाओं के आधार पर आउटपुट टाइमस्टैंप की सीमाएं तय करनी होती हैं. ऐसा डाउनस्ट्रीम कैलकुलेटर को तुरंत शेड्यूल करने के लिए किया जाता है. ज़्यादा जानकारी के लिए रीयल-टाइम स्ट्रीम देखें.