Pojęcia związane z platformami

Zanim zaczniesz korzystać z platformy MediaPipe Framework, zapoznaj się z poniższymi pojęciami.

Podstawy

Pakiet

Jednostka podstawowego przepływu danych. Pakiet składa się z liczbowej sygnatury czasowej i wspólnego wskaźnika do niezmiennego ładunku. Ładunek może być dowolnego typu C++. Typ ładunku jest również nazywany typem pakietu. Pakiety to klasa wartości i można je tanio kopiować. Każda kopia współdzieli własność ładunku z semantyką zliczania odwołań. Każda kopia ma własną sygnaturę czasową. Zobacz też Pakiet.

Wykres

Przetwarzanie MediaPipe odbywa się na wykresie, który definiuje ścieżki przepływu pakietów między węzłami. Wykres może mieć dowolną liczbę danych wejściowych i wyjściowych, a przepływ danych może się rozgałęziać i scalać. Ogólnie dane przepływają do przodu, ale możliwe jest zapętlenie się. Szczegółowe informacje znajdziesz w sekcji Wykresy.

Węzły

Węzły produkują lub wykorzystują pakiety i to w nich odbywa się większość pracy związanej z wykresem. Ze względów historycznych są one też nazywane „kalkulatorami”. Interfejs każdego węzła definiuje liczbę ports wejściowych i wyjściowych określonych za pomocą tagu lub indeksu. Więcej informacji znajdziesz w sekcji Kalkulatory.

Strumienie

Strumień to połączenie między 2 węzłami przenoszącymi sekwencję pakietów, których sygnatury czasowe muszą rosnąć monotonicznie.

Pakiety boczne

Połączenie pakietów bocznych między węzłami przenosi pojedynczy pakiet (z nieokreśloną sygnaturą czasową). Dzięki niemu możesz dostarczać pewne dane, które nie zmieniają się, a strumień to przepływ danych, który zmienia się w czasie.

Porty pakietów

Port ma powiązany typ. Pakiety przechodzące przez ten port muszą być tego typu. Port strumienia wyjściowego można podłączyć do dowolnej liczby portów strumienia wejściowego tego samego typu. Każdy konsument otrzymuje osobną kopię pakietów wyjściowych i ma własną kolejkę, która może je wykorzystywać we własnym tempie. Podobnie port wyjściowego pakietu bocznego można podłączyć do dowolnej liczby portów wejściowych pakietów bocznych.

Port może być wymagany. Musisz nawiązać połączenie, aby wykres był prawidłowy lub opcjonalny (tzn. może pozostać niepołączony).

Dane wejściowe i wyjściowe

Przepływ danych może pochodzić z węzłów źródłowych, które nie mają strumieni danych wejściowych i generują pakiety spontanicznie (np. przez odczyt z pliku) lub ze strumieni danych wejściowych, które pozwalają aplikacji przesyłać pakiety do wykresu.

Istnieją też węzły ujścia, które odbierają dane i zapisują je w różnych miejscach docelowych (np. pliku, buforze pamięci itp.), a aplikacja może też otrzymywać dane wyjściowe z wykresu za pomocą wywołań zwrotnych.

Działanie środowiska wykonawczego

Czas trwania wykresu

Po zainicjowaniu wykresu można go rozpocząć, aby rozpocząć przetwarzanie danych i przetwarzać strumień pakietów do chwili zamknięcia każdego strumienia lub anulowania wykresu. Następnie można go zniszczyć lub rozpocząć ponownie.

Czas życia węzła

Istnieją 3 główne metody cyklu życia, które platforma będzie wywoływać w węźle:

  • Otwarta: wywoływana raz przed innymi metodami. Po jego wywołaniu wszystkie pakiety po stronie wejściowe wymagane przez węzeł będą dostępne.
  • Proces: wywoływany wiele razy, gdy dostępny jest nowy zestaw danych wejściowych, zgodnie z zasadą wprowadzania danych węzła.
  • Zakończenie: wywołanie jednorazowe na końcu.

Dodatkowo każdy kalkulator może zdefiniować konstruktor i niszczyciel, co jest przydatne przy tworzeniu i cofaniu lokalizacji zasobów niezależnych od przetworzonych danych.

Zasady wprowadzania

Domyślna zasada wejściowa to deterministyczne sortowanie pakietów według sygnatury czasowej. Węzeł otrzymuje jednocześnie wszystkie dane wejściowe z tą samą sygnaturą czasową w wywołaniu swojej metody Process, a kolejne zbiory wejściowe są odbierane w kolejności według sygnatur czasowych. Może to wymagać opóźnienia przetwarzania niektórych pakietów, dopóki pakiet o tej samej sygnaturze czasowej nie zostanie odebrany we wszystkich strumieniach wejściowych lub dopóki nie będzie można zagwarantować, że pakiet z tą sygnaturą czasową nie zostanie dostarczony w strumieniach, które go nie odebrały.

Dostępne są też inne zasady, wdrożone za pomocą osobnego rodzaju komponentu o nazwie ConversionStreamHandler.

Więcej informacji znajdziesz w temacie Synchronizacja.

Transmisje w czasie rzeczywistym

Wykresy kalkulatora MediaPipe są często wykorzystywane do przetwarzania strumieni ramek wideo lub audio w aplikacjach interaktywnych. Normalnie każdy kalkulator jest uruchamiany w momencie, gdy są dostępne wszystkie pakiety wejściowe dla danej sygnatury czasowej. Aby umożliwić natychmiastowe zaplanowanie kalkulatorów na wykresach w czasie rzeczywistym, kalkulatory danych wyjściowych muszą określać granice sygnatur czasowych wyników na podstawie progów sygnatury czasowej danych wejściowych. Więcej informacji znajdziesz w sekcji Transmisje w czasie rzeczywistym.