Przewodnik po zadaniach związanych z rozpoznawaniem gestów

Narzędzie do rozpoznawania gestów MediaPipe umożliwia rozpoznawanie gestów w czasie rzeczywistym. udostępnia rozpoznane gesty dłoni wraz z punktami orientacyjnymi wykryte ręce. Możesz używać tego zadania do rozpoznawania określonych gestów użytkownika i wywoływać funkcje aplikacji odpowiadające tym gestom.

To zadanie działa na danych obrazów z użyciem modelu systemów uczących się i akceptuje ze statycznym lub ciągłym strumieniem. Zadanie wyświetla punkty orientacyjne w języku: współrzędne obrazu, punkty orientacyjne we współrzędnych świata, ręka (lewa/prawa ręka) i kategorie gestów dla wielu rąk.

Wypróbuj!

Rozpocznij

Aby zacząć z niego korzystać, postępuj zgodnie z jednym z tych przewodników po implementacji platformy docelowej. Te przewodniki dotyczące konkretnych platform przeprowadzą Cię przez wdrożenia tego zadania przy użyciu zalecanego modelu i podanie przykładów kodu z zalecanymi opcjami konfiguracji:

.

Szczegóły zadania

W tej sekcji opisujemy możliwości, dane wejściowe, wyjściowe i konfigurację. aby wykonać tę czynność.

Funkcje

  • Wprowadzanie obrazów – przetwarzanie obrazu – przetwarzanie obejmuje obrót, zmianę rozmiaru normalizację i konwersję przestrzeni kolorów.
  • Próg wyniku – filtruj wyniki na podstawie wyników prognozy.
  • Lista dozwolonych etykiet i list odrzuconych – określ kategorie gestów rozpoznane przez model.
Dane wejściowe zadania Wyniki zadania
Moduł do rozpoznawania gestów akceptuje dane wejściowe jednego z tych typów:
  • Nieruchome obrazy
  • Zdekodowane klatki filmu
  • Obraz na żywo
Moduł rozpoznawania gestów generuje te wyniki:
  • Kategorie gestów dłoni
  • Ręka wykrytych rąk
  • Punkty orientacyjne wykrytych rąk we współrzędnych obrazu
  • Punkty orientacyjne wykrytych rąk we współrzędnych świata

Opcje konfiguracji

To zadanie zawiera te opcje konfiguracji:

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

IMAGE: tryb wprowadzania pojedynczego obrazu.

WIDEO: tryb zdekodowanych klatek filmu.

LIVE_STREAM: tryb transmisji danych wejściowych na przykład z kamery. W tym trybie detektor wyników musi mieć wartość wywołano, aby skonfigurować detektor i otrzymywać wyniki asynchronicznie.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_hands Maksymalną liczbę rąk może wykryć GestureRecognizer. Any integer > 0 1
min_hand_detection_confidence Minimalny wskaźnik ufności, jaki musi osiągnąć wykrywanie ręki uznane za udane w modelu wykrywania dłoni. 0.0 - 1.0 0.5
min_hand_presence_confidence Minimalny wynik ufności dłoni na ręce model wykrywania punktów orientacyjnych. W trybie wideo i trybie transmisji na żywo modułu rozpoznawania gestów jeśli wynik pewności obecności ręki z modelu punktu orientacyjnego ręki jest poniżej ten próg aktywuje model wykrywania dłoni. W przeciwnym razie lekki algorytm śledzenia dłoni jest używany do określania lokalizacji ręce do późniejszego wykrycia punktu orientacyjnego. 0.0 - 1.0 0.5
min_tracking_confidence Minimalny wskaźnik ufności, z którego można korzystać podczas śledzenia dłoni udało się. Jest to wartość progowa współczynnika podobieństwa między dłońmi bieżącej i ostatniej klatki. W trybie wideo i w trybie strumienia Moduł rozpoznawania gestów, jeśli śledzenie nie działa, moduł rozpoznawania gestów uruchamia dłoń wykrywaniem zagrożeń. W przeciwnym razie wykrywanie rąk zostanie pominięte. 0.0 - 1.0 0.5
canned_gestures_classifier_options Opcje konfiguracji działania klasyfikatora gestów bazujących na szablonach. Gotowe gesty: ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
  • Wyświetlane nazwy – język: język używany na potrzeby wyświetlanych nazw określonych za pomocą metadanych modelu TFLite (jeśli występują).
  • Maksymalna liczba wyników: maksymalna liczba najwyżej punktowanych wyników klasyfikacji do zwrócenia. Jeśli < 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 wyklucza się z listą odrzuconych.
  • Lista odrzuconych kategorii: lista odrzuconych nazw kategorii. Jeśli pole nie jest puste, wyniki klasyfikacji, które należą do tego zbioru, zostaną odfiltrowane. Wzajemne wykluczanie z listy 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.
  • Wyświetlane nazwy – język: język używany na potrzeby wyświetlanych nazw określonych za pomocą metadanych modelu TFLite (jeśli występują).
  • Maksymalna liczba wyników: maksymalna liczba najwyżej punktowanych wyników klasyfikacji do zwrócenia. Jeśli < 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 wyklucza się z listą odrzuconych.
  • Lista odrzuconych kategorii: lista odrzuconych nazw kategorii. Jeśli pole nie jest puste, wyniki klasyfikacji, które należą do tego zbioru, zostaną odfiltrowane. Wzajemne wykluczanie z listy 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 Konfiguruje detektor wyników, aby otrzymywać wyniki klasyfikacji asynchronicznie, gdy moduł rozpoznawania gestów działa w trybie transmisji na żywo. Tej opcji można używać tylko wtedy, gdy tryb działania jest ustawiony na LIVE_STREAM ResultListener Nie dotyczy Nie dotyczy

    Modele

    Moduł do rozpoznawania gestów używa pakietu modeli zawierającego dwa gotowe pakiety modeli: pakiet modeli dłoni i modelu klasyfikacji gestów. model punktu orientacyjnego wykrywa obecność rąk i ich geometrii oraz gest rozpoznaje gesty na podstawie ich geometrii.

    Nazwa modelu Wpisz 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 zobacz stronę Dostosowywanie modeli do rozpoznawania gestów.

    Pakiet modeli z ręką

    Pakiet modeli rękodzieła wykrywa najważniejszą lokalizację 21 kastetów i współrzędnych w wykrytych obszarach dłoni. Model został wytrenowany ok. 30 tys. rzeczywistych obrazów oraz kilka renderowanych zdjęć syntetycznych. narzucanych na różne tła. Definicję 21 punktów orientacyjnych znajdziesz poniżej:

    Pakiet modeli punktów orientacyjnych dłoni zawiera model wykrywania dłoni model wykrywania punktów orientacyjnych na dłoni. Model wykrywania dłoni lokalizuje region dłoni z całego zdjęcia wejściowego, a model wykrywający punkty orientacyjne na przyciętym obrazie dłoni zdefiniowanego przez model wykrywania dłoni.

    Model wykrywania dłoni jest znacznie bardziej czasochłonny w trybie wideo lub na żywo trybu strumienia, Rozpoznawanie gestów używa ramki ograniczającej zdefiniowanej przez wykrytą rękę punkty orientacyjne w bieżącej ramce, aby zlokalizować obszar rąk w następnej kolejności ramki. Zmniejsza to liczbę przypadków wyzwalania przez czytnik gestów wyzwalania modelu wykrywania dłoni. Tylko wtedy, gdy model punktów orientacyjnych w rękach nie może określić wystarczająco wymaganych liczba obecności rąk lub śledzenie rąk się nie udaje, model wykrywania dłoni jest w celu zmiany lokalizacji rąk.

    Pakiet modeli klasyfikacji gestów

    Pakiet modeli klasyfikacji gestów rozpoznaje te typowe gesty:

    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, moduł rozpoznawania zwraca wynik „None” (Brak). Jeśli model nie wykryje rąk, moduł rozpoznawania gestów zwraca wartość pustą.

    Pakiet modeli klasyfikacji gestów zawiera dwuetapowy potok sieci neuronowej z modelem umieszczania gestów oraz modelem klasyfikacji gestów. Szczegółowe informacje znajdziesz w artykule Karta modelu klasyfikacji gestów.

    model osadzania gestów koduje cechy obrazu jako wektor cech, model klasyfikacji to prosty klasyfikator gestów, który wykorzystuje funkcję jako wektor. Podany pakiet modeli klasyfikacji gestów zawiera klasyfikator gestów bazujących na szablonie, który wykrywa 7 najczęściej wprowadzonych gestów powyżej. Możesz rozszerzyć pakiet modeli, aby rozpoznawał więcej gestów przez trenowanie za pomocą własnego klasyfikatora gestów. Więcej szczegółów znajdziesz w tych artykułach: Sekcja Modele niestandardowe.

    Moduł do rozpoznawania gestów z klasyfikatorem gestów bazujących na szablonie i klasyfikatorem gestów niestandardowych preferuje gest niestandardowy, jeśli oba klasyfikatory rozpoznają ten sam gest w ich kategoriach. Jeśli tylko 1 klasyfikator gestów rozpozna gest, Rozpoznawanie gestów bezpośrednio generuje rozpoznany gest.

    Testy porównawcze zadań

    Oto testy porównawcze zadań dla całego potoku przygotowane na podstawie powyższych danych już wytrenowanych modeli. Wynik opóźnienia to średnie opóźnienie na Pixelu 6 przy użyciu: CPU / GPU.

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

    Modele niestandardowe

    Jeśli chcesz zwiększyć lub zmienić możliwości modeli dostępnych w tym możesz za pomocą Kreatora modeli modyfikować istniejące modele. Używane modele niestandardowe z MediaPipe musi być w formacie .task, który jest plikiem pakietu modeli. Ty powinien rozważyć skorzystanie z Kreatora modeli, aby zmodyfikować podane modele zanim utworzysz własny.

    Więcej informacji o dostosowywaniu modelu na potrzeby tego zadania znajdziesz w sekcji Dostosuj modele do rozpoznawania gestów.