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.
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:
- Android – przykładowy kod – Przewodnik
- Python – przykładowy kod – Przewodnik
- Sieć – przykładowy kod – Przewodnik
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:
|
Moduł rozpoznawania 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. 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"] |
|
|
|
custom_gestures_classifier_options |
Opcje konfigurowania działania klasyfikatora gestów niestandardowych. |
|
|
|
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.