قبل از استفاده از MediaPipe Framework، با مفاهیم زیر آشنا شوید.
اصول اولیه
بسته
واحد اصلی جریان داده یک بسته شامل یک مهر زمان عددی و یک اشاره گر مشترک به یک بار غیرقابل تغییر است. محموله می تواند از هر نوع C++ باشد و نوع بار به عنوان نوع بسته نیز نامیده می شود. بستهها کلاسهای ارزشی هستند و میتوان آنها را ارزان کپی کرد. هر کپی مالکیت محموله را با معنای شمارش مرجع به اشتراک می گذارد. هر نسخه دارای مهر زمانی خاص خود است. بسته را نیز ببینید.
نمودار
پردازش MediaPipe در داخل یک گراف انجام می شود که مسیرهای جریان بسته را بین گره ها تعریف می کند. یک نمودار می تواند هر تعداد ورودی و خروجی داشته باشد و جریان داده می تواند منشعب و ادغام شود. به طور کلی داده ها به جلو جریان می یابند، اما حلقه های عقب ممکن است. برای جزئیات بیشتر به نمودارها مراجعه کنید.
گره ها
گره ها بسته ها را تولید و/یا مصرف می کنند و آنها جایی هستند که بخش عمده ای از کار نمودار انجام می شود. آنها همچنین به دلایل تاریخی به عنوان "ماشین حساب" شناخته می شوند. رابط هر گره تعدادی پورت ورودی و خروجی را تعریف می کند که با یک برچسب و/یا یک شاخص مشخص می شوند. برای جزئیات بیشتر به ماشین حساب ها مراجعه کنید.
جریان ها
یک جریان، اتصالی بین دو گره است که دنباله ای از بسته ها را حمل می کند که مهر زمانی آنها باید به طور یکنواخت افزایش یابد.
بسته های جانبی
یک اتصال بسته جانبی بین گره ها یک بسته واحد (با مهر زمانی نامشخص) را حمل می کند. می توان از آن برای ارائه برخی از داده ها استفاده کرد که ثابت می مانند، در حالی که یک جریان نشان دهنده جریانی از داده است که در طول زمان تغییر می کند.
پورت های بسته
یک پورت دارای یک نوع مرتبط است. بسته هایی که از طریق پورت عبور می کنند باید از این نوع باشند. یک پورت جریان خروجی را می توان به هر تعداد پورت جریان ورودی از همان نوع متصل کرد. هر مصرف کننده یک کپی جداگانه از بسته های خروجی دریافت می کند و دارای صف خاص خود است، بنابراین می تواند آنها را با سرعت خود مصرف کند. به طور مشابه، یک درگاه خروجی بسته جانبی را می توان به تعداد دلخواه درگاه ورودی بسته جانبی متصل کرد.
ممکن است یک پورت مورد نیاز باشد، به این معنی که برای معتبر بودن نمودار باید یک اتصال ایجاد شود، یا اختیاری است، به این معنی که ممکن است متصل باقی بماند.
ورودی و خروجی
جریان داده می تواند از گره های منبع نشات بگیرد که هیچ جریان ورودی ندارند و بسته ها را به طور خود به خود تولید می کنند (مثلاً با خواندن از یک فایل). یا از جریان های ورودی گراف ، که به یک برنامه اجازه می دهد بسته ها را به یک گراف تغذیه کند.
به طور مشابه، گرههای سینک وجود دارند که دادهها را دریافت میکنند و آنها را در مقاصد مختلف مینویسند (مثلاً یک فایل، یک بافر حافظه، و غیره)، و یک برنامه همچنین میتواند خروجی را از نمودار با استفاده از تماسهای پاسخ دریافت کند.
رفتار زمان اجرا
طول عمر نمودار
هنگامی که یک نمودار مقداردهی اولیه شد، می توان آن را شروع به پردازش داده ها کرد و می تواند جریانی از بسته ها را تا زمانی که هر جریان بسته شود یا نمودار لغو شود، پردازش کند. سپس نمودار را می توان از بین برد یا دوباره شروع کرد .
طول عمر گره
سه روش اصلی مادام العمر وجود دارد که فریم ورک بر روی یک گره فراخوانی می کند:
- Open: یک بار، قبل از روش های دیگر فراخوانی می شود. هنگامی که آن فراخوانی می شود، تمام بسته های جانبی ورودی مورد نیاز گره در دسترس خواهند بود.
- فرآیند: با توجه به خط مشی ورودی گره، زمانی که مجموعه جدیدی از ورودی ها در دسترس است، چندین بار فراخوانی می شود.
- بستن: یک بار در پایان تماس گرفته شد.
علاوه بر این، هر ماشین حساب می تواند سازنده و تخریب کننده را تعریف کند که برای ایجاد و تخصیص منابع مستقل از داده های پردازش شده مفید هستند.
سیاست های ورودی
خط مشی ورودی پیشفرض، ترکیب قطعی بستهها بر اساس مهر زمانی است. یک گره در یک فراخوانی از روش Process خود، تمام ورودیها را برای یک مهر زمانی در یک زمان دریافت میکند. و مجموعه های ورودی متوالی به ترتیب مهر زمانی خود دریافت می شوند. این میتواند نیازمند تأخیر در پردازش برخی بستهها باشد تا زمانی که بستهای با همان مهر زمانی در تمام جریانهای ورودی دریافت شود، یا تا زمانی که بتوان تضمین کرد که بستهای با آن مهر زمانی به جریانهایی که آن را دریافت نکردهاند نمیرسد.
سیاستهای دیگری نیز در دسترس هستند که با استفاده از نوع جداگانهای از مؤلفه به نام InputStreamHandler اجرا میشوند.
برای جزئیات بیشتر به همگام سازی مراجعه کنید.
جریان های زمان واقعی
نمودارهای ماشین حساب MediaPipe اغلب برای پردازش جریان های ویدئویی یا فریم های صوتی برای برنامه های تعاملی استفاده می شوند. به طور معمول، هر ماشین حساب به محض در دسترس قرار گرفتن تمام بسته های ورودی آن برای یک مهر زمانی مشخص، اجرا می شود. ماشینحسابهای مورد استفاده در نمودارهای بلادرنگ باید مرزهای مهر زمانی خروجی را بر اساس کرانهای مُهر زمانی ورودی تعریف کنند تا به ماشینحسابهای پاییندستی اجازه دهند به سرعت برنامهریزی شوند. برای جزئیات بیشتر به جریانهای بیدرنگ مراجعه کنید.
،قبل از استفاده از MediaPipe Framework، با مفاهیم زیر آشنا شوید.
اصول اولیه
بسته
واحد اصلی جریان داده یک بسته شامل یک مهر زمان عددی و یک اشاره گر مشترک به یک بار غیرقابل تغییر است. محموله می تواند از هر نوع C++ باشد و نوع بار به عنوان نوع بسته نیز نامیده می شود. بستهها کلاسهای ارزشی هستند و میتوان آنها را ارزان کپی کرد. هر کپی مالکیت محموله را با معنای شمارش مرجع به اشتراک می گذارد. هر نسخه دارای مهر زمانی خاص خود است. بسته را نیز ببینید.
نمودار
پردازش MediaPipe در داخل یک گراف انجام می شود که مسیرهای جریان بسته را بین گره ها تعریف می کند. یک نمودار می تواند هر تعداد ورودی و خروجی داشته باشد و جریان داده می تواند منشعب و ادغام شود. به طور کلی داده ها به جلو جریان می یابند، اما حلقه های عقب ممکن است. برای جزئیات بیشتر به نمودارها مراجعه کنید.
گره ها
گره ها بسته ها را تولید و/یا مصرف می کنند و آنها جایی هستند که بخش عمده ای از کار نمودار انجام می شود. آنها همچنین به دلایل تاریخی به عنوان "ماشین حساب" شناخته می شوند. رابط هر گره تعدادی پورت ورودی و خروجی را تعریف می کند که با یک برچسب و/یا یک شاخص مشخص می شوند. برای جزئیات بیشتر به ماشین حساب ها مراجعه کنید.
جریان ها
یک جریان، اتصالی بین دو گره است که دنباله ای از بسته ها را حمل می کند که مهر زمانی آنها باید به طور یکنواخت افزایش یابد.
بسته های جانبی
یک اتصال بسته جانبی بین گره ها یک بسته واحد (با مهر زمانی نامشخص) را حمل می کند. می توان از آن برای ارائه برخی از داده ها استفاده کرد که ثابت می مانند، در حالی که یک جریان نشان دهنده جریانی از داده است که در طول زمان تغییر می کند.
پورت های بسته
یک پورت دارای یک نوع مرتبط است. بسته هایی که از طریق پورت عبور می کنند باید از این نوع باشند. یک پورت جریان خروجی را می توان به هر تعداد پورت جریان ورودی از همان نوع متصل کرد. هر مصرف کننده یک کپی جداگانه از بسته های خروجی دریافت می کند و دارای صف خاص خود است، بنابراین می تواند آنها را با سرعت خود مصرف کند. به طور مشابه، یک درگاه خروجی بسته جانبی را می توان به تعداد دلخواه درگاه ورودی بسته جانبی متصل کرد.
ممکن است یک پورت مورد نیاز باشد، به این معنی که برای معتبر بودن نمودار باید یک اتصال ایجاد شود، یا اختیاری است، به این معنی که ممکن است متصل باقی بماند.
ورودی و خروجی
جریان داده می تواند از گره های منبع نشات بگیرد که هیچ جریان ورودی ندارند و بسته ها را به طور خود به خود تولید می کنند (مثلاً با خواندن از یک فایل). یا از جریان های ورودی گراف ، که به یک برنامه اجازه می دهد بسته ها را به یک گراف تغذیه کند.
به طور مشابه، گرههای سینک وجود دارند که دادهها را دریافت میکنند و آنها را در مقاصد مختلف مینویسند (مثلاً یک فایل، یک بافر حافظه، و غیره)، و یک برنامه همچنین میتواند خروجی را از نمودار با استفاده از تماسهای پاسخ دریافت کند.
رفتار زمان اجرا
طول عمر نمودار
هنگامی که یک نمودار مقداردهی اولیه شد، می توان آن را شروع به پردازش داده ها کرد و می تواند جریانی از بسته ها را تا زمانی که هر جریان بسته شود یا نمودار لغو شود، پردازش کند. سپس نمودار را می توان از بین برد یا دوباره شروع کرد .
طول عمر گره
سه روش اصلی مادام العمر وجود دارد که فریم ورک بر روی یک گره فراخوانی می کند:
- Open: یک بار، قبل از روش های دیگر فراخوانی می شود. هنگامی که آن فراخوانی می شود، تمام بسته های جانبی ورودی مورد نیاز گره در دسترس خواهند بود.
- فرآیند: با توجه به خط مشی ورودی گره، زمانی که مجموعه جدیدی از ورودی ها در دسترس است، چندین بار فراخوانی می شود.
- بستن: یک بار در پایان تماس گرفت.
علاوه بر این، هر ماشین حساب می تواند سازنده و تخریب کننده را تعریف کند که برای ایجاد و تخصیص منابع مستقل از داده های پردازش شده مفید هستند.
سیاست های ورودی
خط مشی ورودی پیشفرض، ترکیب قطعی بستهها بر اساس مهر زمانی است. یک گره در یک فراخوانی از روش Process خود، تمام ورودیها را برای یک مهر زمانی در یک زمان دریافت میکند. و مجموعه های ورودی متوالی به ترتیب مهر زمانی خود دریافت می شوند. این میتواند نیازمند تأخیر در پردازش برخی بستهها باشد تا زمانی که بستهای با همان مهر زمانی در تمام جریانهای ورودی دریافت شود، یا تا زمانی که بتوان تضمین کرد که بستهای با آن مهر زمانی به جریانهایی که آن را دریافت نکردهاند نمیرسد.
سیاستهای دیگری نیز در دسترس هستند که با استفاده از نوع جداگانهای از مؤلفه به نام InputStreamHandler اجرا میشوند.
برای جزئیات بیشتر به همگام سازی مراجعه کنید.
جریان های زمان واقعی
نمودارهای ماشین حساب MediaPipe اغلب برای پردازش جریان های ویدئویی یا فریم های صوتی برای برنامه های تعاملی استفاده می شوند. به طور معمول، هر ماشین حساب به محض در دسترس قرار گرفتن تمام بسته های ورودی آن برای یک مهر زمانی مشخص، اجرا می شود. ماشینحسابهای مورد استفاده در نمودارهای بلادرنگ باید مرزهای مهر زمانی خروجی را بر اساس کرانهای مُهر زمانی ورودی تعریف کنند تا به ماشینحسابهای پاییندستی اجازه دهند به سرعت برنامهریزی شوند. برای جزئیات بیشتر به جریانهای بیدرنگ مراجعه کنید.