Przewodnik po zadaniach związanych z rozpoznawaniem gestów

Zadanie rozpoznawania gestów MediaPipe umożliwia rozpoznawanie gestów dłoni w czasie rzeczywistym i wyświetla wyniki rozpoznanych gestów wraz z punktami wykrywanymi dłoni. Możesz używać tego zadania do rozpoznawania konkretnych gestów dłoni użytkownika i wywoływania odpowiadających im funkcji aplikacji.

To zadanie operuje na danych obrazów za pomocą modelu systemów uczących się (ML) i akceptuje dane statyczne lub ciągły strumień. Zadanie wyświetla punkty orientacyjne we współrzędnych obrazu, punkty orientacyjne we współrzędnych świata, ręczność (lewa/prawa ręka) oraz kategorie gestów różnych rąk.

Wypróbuj!

Rozpocznij

Zacznij od wykonania tego zadania, postępując zgodnie z instrukcjami podanymi w jednym z przewodników po implementacji dla platformy docelowej. Te przewodniki dotyczące poszczególnych platform przeprowadzą Cię przez podstawową implementację tego zadania z użyciem zalecanego modelu i zawierają przykłady kodu z zalecanymi opcjami konfiguracji:

Szczegóły działania

W tej sekcji opisujemy możliwości, dane wejściowe, dane wyjściowe i opcje konfiguracji tego zadania.

Funkcje

  • Przetwarzanie obrazu wejściowego – przetwarzanie obejmuje obrót obrazu, zmianę jego rozmiaru, normalizację i konwersję przestrzeni kolorów.
  • Próg wyniku – filtrowanie wyników na podstawie wyników prognozy.
  • Lista dozwolonych i odrzuconych etykiet – określ kategorie gestów rozpoznawanych przez model.
Dane wejściowe zadań Wyniki działania
Moduł rozpoznawania gestów akceptuje dane wejściowe jednego z tych typów:
  • nieruchome obrazy;
  • Zdekodowane klatki wideo
  • Kanał z obrazem na żywo
Moduł rozpoznawania gestów zwraca te wyniki:
  • Kategorie gestów dłoni
  • Ręka wykrytych rąk
  • Punkty orientacyjne wykrywanych dłoni we współrzędnych zdjęcia
  • Punkty orientacyjne zidentyfikowanych rąk we współrzędnych świata

Opcje konfiguracji

To zadanie ma te opcje konfiguracji:

Nazwa opcji Opis Zakres wartości Wartość domyślna
running_mode Ustawia tryb działania zadania. Są 3 tryby:

IMAGE: tryb wprowadzania pojedynczych obrazów.

WIDEO: tryb dekodowanych klatek filmu.

TRANSMISJA NA ŻYWO: tryb transmisji danych wejściowych na żywo, np. z kamery. W tym trybie należy wywołać metodę resultListener, aby skonfigurować odbiornik, który będzie odbierał wyniki asynchronicznie.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_hands GestureRecognizer może wykryć maksymalną liczbę rąk. Any integer > 0 1
min_hand_detection_confidence Minimalny stopień pewności, że wykrywanie dłoni zostanie uznane za udane w modelu wykrywania dłoni. 0.0 - 1.0 0.5
min_hand_presence_confidence Minimalny wynik ufności wskaźnika obecności ręki w modelu wykrywania punktów orientacyjnych ręki. W trybie wideo i w trybie transmisji na żywo Modułu rozpoznawania gestów, jeśli wynik wiarygodności modelu ręki z modelu punktu orientacyjnego dłoni jest poniżej tego progu, uruchamia model wykrywania dłoni. W przeciwnym razie do określenia lokalizacji rąk używany jest uproszczony algorytm śledzenia punktów orientacyjnych. 0.0 - 1.0 0.5
min_tracking_confidence Minimalny wynik pewności, że śledzenie dłoni zostanie uznane za udane. Jest to próg interfejsu użytkownika w ramce ograniczającej między rękami w bieżącej a ostatniej klatce. W trybie wideo i trybie strumienia Modułu rozpoznawania gestów, jeśli śledzenie nie powiedzie się, rozpoznawanie gestów aktywuje wykrywanie dłoni. W przeciwnym razie wykrywanie rąk zostanie pominięte. 0.0 - 1.0 0.5
canned_gestures_classifier_options Opcje konfigurowania działania klasyfikatora gotowych gestów. Gotowe gesty to ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
  • Język wyświetlanych nazw: język, który ma być używany dla wyświetlanych nazw określonych za pomocą metadanych modelu TFLite (jeśli występują).
  • Maksymalna liczba wyników: maksymalna liczba najwyżej wyników do zwrócenia. Jeśli wartość jest mniejsza niż 0, zostaną zwrócone wszystkie dostępne wyniki.
  • Próg wyniku: wynik, poniżej którego wyniki są odrzucane. Jeśli ma wartość 0, zwracane są wszystkie dostępne wyniki.
  • Lista dozwolonych kategorii: lista dozwolonych nazw kategorii. Jeśli pole nie jest puste, wyniki klasyfikacji, których kategoria nie należy do tego zbioru, zostaną odfiltrowane. Wzajemnie wykluczają się z listą odrzuconych.
  • Lista odrzuconych kategorii: lista odrzuconych nazw kategorii. Jeśli pole nie jest puste, wyniki klasyfikacji, których kategoria należy do tego zbioru, zostaną odfiltrowane. Wzajemnie wykluczające się dzięki liście dozwolonych.
    • Język wyświetlanych nazw: any string
    • Maksymalna liczba wyników: any integer
    • Próg wyniku: 0.0-1.0
    • Lista dozwolonych kategorii: vector of strings
    • Lista odrzuconych kategorii: vector of strings
    • Język wyświetlanych nazw: "en"
    • Maksymalna liczba wyników: -1
    • Próg wyniku: 0
    • Lista dozwolonych kategorii: pusta
    • Lista odrzuconych kategorii: pusta
    custom_gestures_classifier_options Opcje konfigurowania działania klasyfikatora gestów niestandardowych.
  • Język wyświetlanych nazw: język, który ma być używany dla wyświetlanych nazw określonych za pomocą metadanych modelu TFLite (jeśli występują).
  • Maksymalna liczba wyników: maksymalna liczba najwyżej wyników do zwrócenia. Jeśli wartość jest mniejsza niż 0, zostaną zwrócone wszystkie dostępne wyniki.
  • Próg wyniku: wynik, poniżej którego wyniki są odrzucane. Jeśli ma wartość 0, zwracane są wszystkie dostępne wyniki.
  • Lista dozwolonych kategorii: lista dozwolonych nazw kategorii. Jeśli pole nie jest puste, wyniki klasyfikacji, których kategoria nie należy do tego zbioru, zostaną odfiltrowane. Wzajemnie wykluczają się z listą odrzuconych.
  • Lista odrzuconych kategorii: lista odrzuconych nazw kategorii. Jeśli pole nie jest puste, wyniki klasyfikacji, których kategoria należy do tego zbioru, zostaną odfiltrowane. Wzajemnie wykluczające się dzięki liście dozwolonych.
    • Język wyświetlanych nazw: any string
    • Maksymalna liczba wyników: any integer
    • Próg wyniku: 0.0-1.0
    • Lista dozwolonych kategorii: vector of strings
    • Lista odrzuconych kategorii: vector of strings
    • Język wyświetlanych nazw: "en"
    • Maksymalna liczba wyników: -1
    • Próg wyniku: 0
    • Lista dozwolonych kategorii: pusta
    • Lista odrzuconych kategorii: pusta
    result_callback Ustawia detektor wyników, aby asynchronicznie otrzymywać wyniki klasyfikacji, gdy moduł rozpoznawania gestów jest w trybie transmisji na żywo. Tego ustawienia można używać tylko wtedy, gdy tryb biegowy jest ustawiony na LIVE_STREAM ResultListener Nie dotyczy Nie dotyczy

    Modele

    Moduł rozpoznawania gestów korzysta z pakietu modeli z 2 gotowymi pakietami modeli: z pakietem punktów orientacyjnych dłoni i pakietem modeli klasyfikacji gestów. Model nawigacyjny wykrywa obecność dłoni i dłoni, a model rozpoznawania gestów rozpoznaje gesty na podstawie geometrii dłoni.

    Nazwa modelu Wprowadź kształt Typ kwantyzacji Karta modelu Wersje
    HandGestureClassifier 192 x 192, 224 x 224 liczba zmiennoprzecinkowa 16 informacje Najnowsze

    To zadanie obsługuje też modyfikowanie pakietu modeli za pomocą Kreatora modeli. Więcej informacji o dostosowywaniu modeli do tego zadania za pomocą Kreatora modeli znajdziesz na stronie Dostosowywanie modeli do rozpoznawania gestów.

    Pakiet punktów orientacyjnych dłoni

    Pakiet punktów orientacyjnych „dłoń” wykrywa lokalizację punktów kluczowych 21 współrzędnych współrzędnych dłoni w wykrytych obszarach dłoni. Model został wytrenowany na około 30 tys. rzeczywistych obrazów oraz kilku wyrenderowanych syntetycznych modelach dłoni nałożonych na różne tła. Poniżej znajdziesz definicje 21 punktów orientacyjnych.

    Pakiet z modelami orientacyjnymi dłoni zawiera model wykrywania dłoni i model wykrywania punktów orientacyjnych. Model wykrywania dłoni lokalizuje obszar dłoni z całego zdjęcia wejściowego, a model wykrywania wskazuje punkty orientacyjne na przyciętym zdjęciu dłoni zdefiniowanym przez model wykrywania dłoni.

    Ponieważ model wykrywania dłoni jest bardziej czasochłonny w trybie wideo lub transmisji na żywo, narzędzie do rozpoznawania gestów używa ramki ograniczającej zdefiniowanej przez wykryte punkty orientacyjne w bieżącej klatce, aby zlokalizować obszar dłoni w następnej klatce. Skraca to liczbę uruchomień modelu wykrywania dłoni przez Rozpoznawanie gestów. Dopiero gdy model punktów orientacyjnych nie może już określić wystarczającej liczby dłoni lub śledzenie rąk nie powiedzie się, wywoływany jest model wykrywania dłoni w celu ich relokacji.

    Pakiet modeli klasyfikacji gestów

    Pakiet modeli klasyfikacji gestów rozpoznaje te typowe gesty dłoni:

    0 - Unrecognized gesture, label: Unknown
    1 - Closed fist, label: Closed_Fist
    2 - Open palm, label: Open_Palm
    3 - Pointing up, label: Pointing_Up
    4 - Thumbs down, label: Thumb_Down
    5 - Thumbs up, label: Thumb_Up
    6 - Victory, label: Victory
    7 - Love, label: ILoveYou
    

    Jeśli model wykryje ręce, ale nie rozpozna gestu, funkcja rozpoznawania gestów zwraca wynik „Brak”. Jeśli model nie wykryje rąk, moduł rozpoznawania gestów zwraca pustą wartość.

    Pakiet modeli klasyfikacji gestów zawiera dwuetapowy potok sieci neuronowej z modelem umieszczania gestów oraz modelem klasyfikacji gestów. Więcej informacji znajdziesz na karcie modelu klasyfikacji gestów.

    Model osadzania gestów koduje cechy obrazu we wektorze cech, a model klasyfikacji to lekki klasyfikator gestów, który pobiera wektor cech jako dane wejściowe. Dostarczony pakiet modeli klasyfikacji gestów zawiera klasyfikator szablonów opartych na szablonach, który wykrywa 7 powszechnie opisanych wyżej gestów rękami. Możesz rozszerzyć pakiet modeli, aby rozpoznawał więcej gestów, trenując własny klasyfikator gestów. Więcej informacji znajdziesz w sekcji Modele niestandardowe.

    Moduł rozpoznawania gestów z klasyfikatorem gestów opartych na szablonach i klasyfikatorem niestandardowych gestów preferuje gest niestandardowy, jeśli oba klasyfikatory rozpoznają ten sam gest w swoich kategoriach. Jeśli tylko 1 klasyfikator gestów rozpozna dany gest, bezpośrednio wyświetli go.

    Testy porównawcze działań

    Oto porównania zadań dla całego potoku na podstawie powyższych wytrenowanych modeli. Wynik opóźnienia to średnie opóźnienie na Pixelu 6 korzystającym z procesora / GPU.

    Nazwa modelu Czas oczekiwania procesora Opóźnienie GPU
    GestureRecognizer 16,76 ms 20,87 ms

    Modele niestandardowe

    Jeśli chcesz poprawić lub zmienić możliwości modeli oferowanych w tym zadaniu, możesz użyć Kreatora modeli do zmodyfikowania istniejących modeli. Modele niestandardowe używane z MediaPipe muszą mieć format .task, który jest plikiem pakietu modeli. Przed utworzeniem własnych modeli rozważ zmodyfikowanie udostępnionych modeli na potrzeby tego zadania za pomocą Kreatora modeli.

    Więcej informacji o dostosowywaniu modelu do tego zadania znajdziesz w artykule o dostosowywaniu modeli do rozpoznawania gestów.