Przewodnik po zadaniach związanych z rozpoznawaniem gestów

Ręka z kciukiem w górę, którą model z 63% poziomem pewności rozpoznaje jako gest kciuka w górę

Zadanie MediaPipe Gesture Recognizer umożliwia rozpoznawanie gestów dłoni w czasie rzeczywistym. Wyniki rozpoznawania gestów są wyświetlane wraz z miejscami rozpoznawania dłoni. Za pomocą tego zadania możesz rozpoznawać określone gesty użytkownika i wywoływać funkcje aplikacji odpowiadające tym gestom.

To zadanie działa na danych obrazów za pomocą modelu uczenia maszynowego (ML) i akceptuje dane statyczne lub ciągły strumień. Zadanie zwraca punkty orientacyjne dłoni w współrzędnych obrazu, punkty orientacyjne dłoni w współrzędnych globalnych, stronność (lewa/prawa ręka) oraz kategorie gestów dłoni.

Wypróbuj to!

Rozpocznij

Aby zacząć korzystać z tego zadania, postępuj zgodnie z jednym z tych przewodników dotyczących wdrażania na platformie docelowej. Te przewodniki dotyczące poszczególnych platform zawierają podstawowe informacje o wdrażaniu tego zadania przy użyciu zalecanego modelu oraz przykłady kodu z zalecanymi opcjami konfiguracji:

Szczegóły działania

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

Funkcje

  • Przetwarzanie wejściowego obrazu – przetwarzanie obejmuje obrót, zmianę rozmiaru, normalizację i konwersję przestrzeni barw.
  • Progień wyniku – filtrowanie wyników według progu wyniku prognozy.
  • Lista dozwolonych i zablokowanych etykiet – określ kategorie gestów rozpoznawanych przez model.
Dane wejściowe zadania Dane wyjściowe
Rozpoznawanie gestów obsługuje dane wejściowe jednego z tych typów:
  • obrazy nieruchome,
  • Dekodowane klatki wideo
  • Transmisja na żywo
Moduł rozpoznawania gestów zwraca te wyniki:
  • Kategorie gestów dłoni
  • Dominująca ręka w przypadku wykrywanych dłoni
  • Punkty orientacyjne wykrytych rąk w współrzędnych obrazu
  • Punkty orientacyjne wykrytych rąk w współrzędnych globalnych

Opcje konfiguracji

To zadanie ma te opcje konfiguracji:

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

OBRAZ: tryb dla pojedynczych obrazów wejściowych.

FILM: tryb dekodowanych klatek filmu.

LIVE_STREAM: tryb transmisji na żywo danych wejściowych, takich jak dane z kamery. W tym trybie należy wywołać metodę resultListener, aby skonfigurować odbiornik, który będzie asynchronicznie odbierał wyniki.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_hands Maksymalna liczba dłoni, które może wykryć GestureRecognizer, to Any integer > 0 1
min_hand_detection_confidence Minimalny wynik ufności wykrywania dłoni, który jest uznawany za udany w przypadku modelu wykrywania dłoni. 0.0 - 1.0 0.5
min_hand_presence_confidence Minimalny wynik ufności obecności ręki w modelu wykrywania punktów orientacyjnych ręki. W trybie wideo i w trybie transmisji na żywo usługi rozpoznawania gestów, jeśli wskaźnik ufności obecności ręki z modelu punktów orientacyjnych ręki jest poniżej tego progu, uruchamia model wykrywania dłoni. W przeciwnym razie do określenia lokalizacji dłoni(dłoni) w celu wykrywania punktów orientacyjnych używany jest lekki algorytm śledzenia dłoni. 0.0 - 1.0 0.5
min_tracking_confidence Minimalny wynik ufności śledzenia dłoni, który jest uznawany za udany. To próg współczynnika podobieństwa ramki ograniczającej między dłońmi w bieżącej i ostatniej ramie. W trybie wideo i strumień w rozpoznawaniu gestów, jeśli śledzenie zawiedzie, rozpoznawanie gestów uruchamia wykrywanie ręki. W przeciwnym razie wykrywanie dłoni zostanie pominięte. 0.0 - 1.0 0.5
canned_gestures_classifier_options Opcje konfiguracji zachowania klasyfikatora gotowych gestów. Gotowe gesty: ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
  • Język wyświetlanych nazw: język, którego należy używać do wyświetlanych nazw określonych w metadanych modelu TFLite (jeśli istnieją).
  • Maks. wyników: maksymalna liczba wyników klasyfikacji z najwyższą liczbą punktów, które mają zostać zwrócone. Jeśli wartość jest mniejsza od 0, zwracane są wszystkie dostępne wyniki.
  • Próg wyniku: wynik, poniżej którego wyniki są odrzucane. Jeśli ustawisz wartość 0, zwrócone zostaną wszystkie dostępne wyniki.
  • Lista dozwolonych kategorii: lista dozwolonych nazw kategorii. Jeśli wyniki klasyfikacji nie są puste, a ich kategoria nie należy do tego zbioru, zostaną odfiltrowane. Wyklucza się z listą blokowanych adresów.
  • Lista odrzuconych kategorii: lista odrzuconych nazw kategorii. Jeśli nie są puste, wyniki klasyfikacji, których kategoria należy do tego zbioru, zostaną odfiltrowane. Wyklucza się z listą dozwolonych.
    • Język wyświetlania nazw: any string
    • Maks. 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świetlania nazw: "en"
    • Maks. liczba wyników: -1
    • Próg wyniku: 0
    • Lista dozwolonych kategorii: pusta
    • Lista odrzuconych kategorii: pusta
    custom_gestures_classifier_options Opcje konfiguracji zachowania klasyfikatora niestandardowych gestów.
  • Język wyświetlanych nazw: język, którego należy używać do wyświetlanych nazw określonych w metadanych modelu TFLite (jeśli istnieją).
  • Maks. wyników: maksymalna liczba wyników klasyfikacji z najwyższą liczbą punktów, które mają zostać zwrócone. Jeśli wartość jest mniejsza od 0, zwracane są wszystkie dostępne wyniki.
  • Próg wyniku: wynik, poniżej którego wyniki są odrzucane. Jeśli ustawisz wartość 0, zwrócone zostaną wszystkie dostępne wyniki.
  • Lista dozwolonych kategorii: lista dozwolonych nazw kategorii. Jeśli wyniki klasyfikacji nie są puste, a ich kategoria nie należy do tego zbioru, zostaną odfiltrowane. Wyklucza się z listą blokowanych adresów.
  • Lista odrzuconych kategorii: lista odrzuconych nazw kategorii. Jeśli nie są puste, wyniki klasyfikacji, których kategoria należy do tego zbioru, zostaną odfiltrowane. Wyklucza się z listą dozwolonych.
    • Język wyświetlania nazw: any string
    • Maks. 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świetlania nazw: "en"
    • Maks. liczba wyników: -1
    • Próg wyniku: 0
    • Lista dozwolonych kategorii: pusta
    • Lista odrzuconych kategorii: pusta
    result_callback Ustawia odbiornik wyników w celu asynchronicznego otrzymywania wyników klasyfikacji, gdy rozpoznawacz gestów jest w trybie transmisji na żywo. Można go używać tylko wtedy, gdy tryb działania ma wartość LIVE_STREAM. ResultListener Nie dotyczy Nie dotyczy

    Modele

    Rozpoznawanie gestów korzysta z paczki modeli zawierającej 2 wstępnie skompilowane pakiety modeli: pakiet modelu punktów orientacyjnych dłoni i pakiet modelu klasyfikacji gestów. Model rozpoznawania punktów orientacyjnych wykrywa obecność dłoni i geometrię dłoni, a model rozpoznawania gestów rozpoznaje gesty na podstawie geometrii dłoni.

    Nazwa modelu Kształt wejściowy Typ kwantowania Karta modelu Wersje
    HandGestureClassifier 192 x 192, 224 x 224 float 16 info Najnowsze

    To zadanie umożliwia też modyfikowanie pakietu modeli za pomocą Model Maker. Więcej informacji o używaniu narzędzia Model Maker do dostosowywania modeli do tego zadania znajdziesz na stronie Dostosowywanie modeli do rozpoznawania gestów.

    Pakiet modeli punktów orientacyjnych dłoni

    Pakiet modeli punktów orientacyjnych dłoni wykrywa lokalizację punktów kluczowych 21 współrzędnych stawów palców dłoni w wykrytych regionach dłoni. Model został wytrenowany na około 30 tys. zdjęć rzeczywistych oraz kilku wyrenderowanych syntetycznych modeli dłoni na różnych tłach. Poniżej znajdziesz definicje 21 punktów orientacyjnych:

    Kody dla określonych punktów charakterystycznych dłoni

    Pakiet modeli punktów orientacyjnych dłoni zawiera model wykrywania dłoni i model wykrywania punktów orientacyjnych dłoni. Model wykrywania dłoni lokalizuje obszar dłoni na całym obrazie wejściowym, a model wykrywania punktów orientacyjnych dłoni znajduje punkty orientacyjne na wyciętym obrazie dłoni zdefiniowanym przez model wykrywania dłoni.

    Model wykrywania dłoni jest znacznie bardziej czasochłonny, dlatego w trybie wideo lub strumieniowania na żywo rozpoznawanie gestów używa ramki ograniczającej zdefiniowanej przez wykryte punkty dłoni w bieżącym ujęciu, aby zlokalizować obszar dłoni w następnym ujęciu. Dzięki temu funkcja rozpoznawania gestów rzadziej uruchamia model wykrywania dłoni. Tylko wtedy, gdy model punktów orientacyjnych dłoni nie może już wykryć wystarczającej liczby dłoni lub śledzenie dłoni nie powiedzie się, model wykrywania dłoni jest wywoływany, aby ponownie zlokalizować dłonie.

    Pakiet modeli klasyfikacji gestów

    Pakiet modeli do klasyfikacji gestów może rozpoznawać te 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, zwraca wartość „Brak”. Jeśli model nie wykryje rąk, rozpoznawacz gestów zwróci pustą wartość.

    Pakiet modeli do klasyfikowania gestów zawiera dwuetapowy przetwarzanie za pomocą sieci neuronowej: najpierw model osadzania gestów, a potem model klasyfikacji gestów. Więcej informacji znajdziesz na karcie modelu klasyfikacji gestów.

    Model osadzania gestów koduje cechy obrazu w wektory cech, a model klasyfikacji jest lekkim klasyfikatorem gestów, który przyjmuje wektor cech jako dane wejściowe. Dostarczony pakiet modelu klasyfikacji gestów zawiera gotowy klasyfikator gestów, który wykrywa 7 opisanych powyżej typowych gestów dłoni. 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.

    Rozpoznawanie gestów z klasyfikatorem gotowych gestów i klasyfikatorem gestów niestandardowych preferuje gest niestandardowy, jeśli oba klasyfikatory rozpoznają ten sam gest w swoich kategoriach. Jeśli gest rozpoznaje tylko jeden klasyfikator, funkcja Gesture Recognizer bezpośrednio wygeneruje rozpoznany gest.

    Porównania zadań

    Poniżej znajdziesz benchmarki zadań dla całego przepływu danych opartego na wytrenowanych wstępnie modelach. Wynik opóźnienia to średnie opóźnienie na Pixelu 6 z wykorzystaniem procesora CPU lub GPU.

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

    Modele niestandardowe

    Jeśli chcesz ulepszyć lub zmienić możliwości modeli udostępnionych w tym zadaniu, możesz zmodyfikować istniejące modele za pomocą Kreatora modeli. Modele niestandardowe używane z MediaPipe muszą być w formacie .task, czyli pliku pakietu modelu. Przed utworzeniem własnych modeli warto użyć narzędzia Model Maker, aby zmodyfikować udostępnione modele do tego zadania.

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