Zadanie MediaPipe Gesture Recognizer umożliwia rozpoznawanie gestów dłoni w czasie rzeczywistym i udostępnia wyniki rozpoznawania gestów dłoni wraz z punktami orientacyjnymi wykrytych dłoni. Możesz użyć tego zadania, aby rozpoznawać konkretne gesty dłoni użytkownika i wywoływać funkcje aplikacji odpowiadające tym gestom.
To zadanie działa na podstawie danych obrazu z modelem uczenia maszynowego i akceptuje dane statyczne lub ciągły strumień. Zadanie zwraca punkty orientacyjne dłoni we współrzędnych obrazu, punkty orientacyjne dłoni we współrzędnych świata, informację o tym, czy jest to lewa czy prawa dłoń, oraz kategorie gestów dłoni.
Rozpocznij
Aby zacząć korzystać z tego zadania, postępuj zgodnie z jednym z tych przewodników implementacji na platformie docelowej. Te przewodniki dotyczące konkretnych platform przeprowadzą Cię przez podstawową implementację tego zadania przy użyciu zalecanego modelu i zawierają przykłady kodu z zalecanymi opcjami konfiguracji:
- Android – przykład kodu
- Python – przykład kodu
- Internet – [przykład kodu](https://github.com/google-ai-edge/mediapipe-samples-web/blob/main/src/tasks/gesture-recognizer.ts) – przewodnik
Szczegóły zadania
W tej sekcji opisujemy możliwości, dane wejściowe, wyjściowe i opcje konfiguracji tego zadania.
Funkcje
- Przetwarzanie obrazu wejściowego – obejmuje obracanie, zmianę rozmiaru, normalizację i konwersję przestrzeni kolorów.
- Próg wyniku – filtruj wyniki na podstawie wyników prognozowania.
- Lista dozwolonych i odrzuconych etykiet – określ kategorie gestów rozpoznawane przez model.
| Dane wejściowe zadania | Dane wyjściowe zadania |
|---|---|
Rozpoznawanie gestów akceptuje dane wejściowe jednego z tych typów:
|
Rozpoznawanie gestów zwraca te wyniki:
|
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: IMAGE: tryb dla pojedynczych obrazów wejściowych. VIDEO: tryb dla dekodowanych klatek filmu. LIVE_STREAM: tryb dla strumienia danych wejściowych na żywo, np. z kamery. W tym trybie należy wywołać funkcję resultListener, aby skonfigurować odbiornik do asynchronicznego odbierania wyników. |
{IMAGE, VIDEO, LIVE_STREAM} |
IMAGE |
|
num_hands |
Maksymalna liczba dłoni, które może wykryć
GestureRecognizer.
|
Any integer > 0 |
1 |
|
min_hand_detection_confidence |
Minimalny wynik ufności, aby wykrycie dłoni zostało uznane za udane w modelu wykrywania dłoni. | 0.0 - 1.0 |
0.5 |
|
min_hand_presence_confidence |
Minimalny wynik ufności obecności dłoni w modelu wykrywania punktów orientacyjnych dłoni. Jeśli w trybie wideo lub strumienia na żywo rozpoznawania gestów, jeśli wynik ufności obecności dłoni z modelu punktów orientacyjnych dłoni jest niższy niż ten próg, uruchamia się model wykrywania dłoni. W przeciwnym razie do określenia położenia dłoni na potrzeby wykrywania punktów orientacyjnych używany jest lekki algorytm śledzenia rąk. | 0.0 - 1.0 |
0.5 |
|
min_tracking_confidence |
Minimalny wynik ufności, aby śledzenie rąk zostało uznane za udane. Jest to próg IoU ramki ograniczającej między dłońmi w bieżącej i ostatniej klatce. Jeśli w trybie wideo lub strumienia rozpoznawania gestów śledzenie się nie powiedzie, rozpoznawanie gestów uruchamia wykrywanie dłoni. W przeciwnym razie wykrywanie dłoni jest pomijane. | 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"] |
|
|
|
custom_gestures_classifier_options |
Opcje konfigurowania działania klasyfikatora gestów niestandardowych. |
|
|
|
result_callback |
Ustawia odbiornik wyników, aby asynchronicznie odbierać wyniki klasyfikacji
gdy rozpoznawanie gestów jest w trybie strumienia na żywo.
Można go używać tylko wtedy, gdy tryb działania jest ustawiony na LIVE_STREAM |
ResultListener |
Nie dotyczy | Nie dotyczy |
Modele
Rozpoznawanie gestów używa pakietu modeli z 2 wstępnie skonfigurowanymi pakietami modeli: pakietu modelu punktów orientacyjnych dłoni i pakietu modelu klasyfikacji gestów. Model 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 danych wejściowych | Typ kwantyzacji | Karta modelu | Wersje |
|---|---|---|---|---|
| HandGestureClassifier | 192 x 192, 224 x 224 | float 16 | info | Najnowsza |
To zadanie obsługuje też modyfikowanie pakietu modeli za pomocą Model Maker. Więcej informacji o używaniu Model Maker do dostosowywania modeli do tego zadania znajdziesz na stronie Dostosowywanie modeli do rozpoznawania gestów.
Pakiet modelu punktów orientacyjnych dłoni
Pakiet modelu punktów orientacyjnych dłoni wykrywa lokalizację punktów kluczowych 21 współrzędnych kostek dłoni w wykrytych obszarach dłoni. Model został wytrenowany na podstawie około 30 tys. obrazów rzeczywistych oraz kilku renderowanych syntetycznych modeli dłoni nałożonych na różne tła. Poniżej znajdziesz definicję 21 punktów orientacyjnych:

Pakiet modelu 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 przyciętym obrazie dłoni zdefiniowanym przez model wykrywania dłoni.
Ponieważ model wykrywania dłoni jest znacznie bardziej czasochłonny, w trybie wideo lub transmisji na żywo rozpoznawanie gestów używa ramki ograniczającej zdefiniowanej przez wykryte punkty orientacyjne dłoni w bieżącej klatce, aby zlokalizować obszar dłoni w następnej klatce. Zmniejsza to liczbę przypadków, w których rozpoznawanie gestów uruchamia model wykrywania dłoni. Model wykrywania dłoni jest wywoływany tylko wtedy, gdy model punktów orientacyjnych dłoni nie może już zidentyfikować wystarczającej liczby dłoni lub gdy śledzenie rąk się nie powiedzie, aby ponownie zlokalizować dłonie.
Pakiet modelu klasyfikacji gestów
Pakiet modelu klasyfikacji gestów może rozpoznawać te popularne 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 dłonie, ale nie rozpozna gestu, rozpoznawanie gestów zwróci wynik „None”. Jeśli model nie wykryje dłoni, rozpoznawanie gestów zwróci pusty wynik.
Pakiet modelu klasyfikacji gestów zawiera 2-etapowy potok sieci neuronowej z modelem osadzania gestów, a następnie modelem klasyfikacji gestów. Więcej informacji znajdziesz na karcie modelu klasyfikacji gestów.
Model osadzania gestów koduje cechy obrazu w wektor cech, a model klasyfikacji to lekki klasyfikator gestów, który przyjmuje wektor cech jako dane wejściowe. Dostarczony pakiet modelu klasyfikacji gestów zawiera klasyfikator gotowych gestów, który wykrywa 7 popularnych gestów dłoni opisanych powyżej. Możesz rozszerzyć pakiet modeli, aby rozpoznawać więcej gestów, trenując własny klasyfikator gestów niestandardowych. Więcej informacji znajdziesz w sekcji Modele niestandardowe poniżej.
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 tylko jeden klasyfikator gestów rozpozna gest, rozpoznawanie gestów bezpośrednio zwróci rozpoznany gest.
Testy porównawcze zadań
Oto testy porównawcze zadań dla całego potoku na podstawie powyższych wstępnie wytrenowanych modeli. Wynik opóźnienia to średnie opóźnienie na Pixelu 6 przy użyciu procesora lub GPU.
| Nazwa modelu | Opóźnienie procesora | Opóźnienie GPU |
|---|---|---|
| GestureRecognizer | 16,76 ms | 20,87 ms |
Modele niestandardowe
Jeśli chcesz ulepszyć lub zmienić możliwości modeli udostępnianych w tym zadaniu, możesz użyć Model Maker, aby zmodyfikować istniejące modele. Modele niestandardowe używane z MediaPipe muszą być w formacie .task, który jest plikiem pakietu modeli. Zanim utworzysz własny model, rozważ użycie Model Maker do zmodyfikowania modeli udostępnionych w tym zadaniu.
Więcej informacji o dostosowywaniu modelu do tego zadania znajdziesz w artykule Dostosowywanie modeli do rozpoznawania gestów.