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.