Wykrywanie pozycji

Interfejs ML Kit Pose Detection API to lekkie i uniwersalne rozwiązanie dla programistów aplikacji służące do wykrywania w czasie rzeczywistym pozycji ciała badanego na podstawie ciągłego filmu lub obrazu statycznego. Pozycja przedstawia pozycję ciała w danej chwili na podstawie punktów orientacyjnych szkieletu. Punkty orientacyjne odpowiadają różnym częściom ciała, takim jak ramiona i biodra. Względne położenie punktów orientacyjnych może posłużyć do odróżnienia pozycji.

iOS Android

Wykrywanie pozycji w ML Kit obejmuje 33-punktowe dopasowanie szkieletu obejmujące całe ciało, z uwzględnieniem punktów orientacyjnych twarzy (uszu, oczu, ust i nosa) oraz punktów na dłoniach i stopach. Rysunek 1 poniżej przedstawia punkty orientacyjne patrzące na użytkownika przez aparat, są to więc lustrzane odbicie. Prawa strona użytkownika jest wyświetlana po lewej stronie obrazu:

Rysunek 1. Punkty orientacyjne

Wykrywanie pozycji w ramach ML Kit nie wymaga specjalistycznego sprzętu ani wiedzy z zakresu systemów uczących się, aby uzyskać doskonałe wyniki. Dzięki tej technologii programiści mogą tworzyć wyjątkowe usługi dla użytkowników za pomocą zaledwie kilku linijek kodu.

W celu wykrycia pozy musi być widoczna twarz użytkownika. Wykrywanie pozycji działa najlepiej, gdy w kadrze widać całe ciało obiektu, ale wykrywa też częściowe pozycje ciała. W takim przypadku do nierozpoznanych punktów orientacyjnych są przypisane współrzędne poza obrazem.

Najważniejsze funkcje

  • Obsługa wielu platform – możesz korzystać z tych samych funkcji na Androidzie i iOS.
  • Śledzenie całego ciała: model zwraca 33 kluczowe punkty orientacyjne szkieletu, w tym ułożenie rąk i stóp.
  • Wynik prawdopodobieństw InFrame: miara, która określa prawdopodobieństwo, że punkt orientacyjny znajduje się w ramce obrazu, w przypadku każdego punktu orientacyjnego. Wynik ma zakres od 0,0 do 1,0, gdzie 1,0 oznacza wysoki stopień pewności.
  • Dwa zoptymalizowane pakiety SDK Podstawowy pakiet SDK działa w czasie rzeczywistym na nowoczesnych telefonach, takich jak Pixel 4 i iPhone X. Zwraca wyniki z częstotliwością około 30–45 kl./s. Dokładność współrzędnych punktu orientacyjnego może być jednak różna. Dokładny pakiet SDK zwraca wyniki z mniejszą liczbą klatek na sekundę, ale generuje dokładniejsze wartości współrzędnych.
  • Z Coordinate do szczegółowej analizy Ta wartość pomaga określić, czy części ciała użytkownika znajdują się przed, czy za biodrami użytkownika. Więcej informacji znajdziesz w sekcji Koordynator Z poniżej.

Interfejs Pose Detection API jest podobny do Facial Recognition API, ponieważ zwraca zestaw punktów orientacyjnych i ich lokalizacji. Mimo że wykrywanie twarzy próbuje też rozpoznać takie elementy jak uśmiechnięte usta czy otwarte oczy, wykrywanie pozycji nie przypisuje żadnych znaczenia do elementów wyróżniających się pozycji ani samej pozy. Możesz tworzyć własne algorytmy do interpretowania pozy. Przykłady znajdziesz w sekcji Wskazówki dotyczące klasyfikacji ułożenia.

Wykrywanie pozycji wykrywa tylko jedną osobę na zdjęciu. Jeśli na obrazie są 2 osoby, model przypisze punkty orientacyjne osobie wykrytej z największą pewnością.

Współrzędne Z

Współrzędne Z to wartość eksperymentalna obliczana dla każdego punktu orientacyjnego. Jest mierzona w „pikselach obrazu”, takich jak współrzędne X i Y, ale nie jest prawidłową wartością 3D. Oś Z jest prostopadła do kamery i przebiega między biodrami fotografowanych osób. Punkt początkowy osi Z to w przybliżeniu punkt środkowy między biodrami (lewo/prawo i przód/tył w stosunku do kamery). Wartości Z są w kierunku kamery, a wartości dodatnie są od niej daleko. Współrzędna Z nie ma górnej ani dolnej granicy.

Przykładowe wyniki

W tabeli poniżej znajdziesz współrzędne i prawdopodobieństwo elementu InFrame w przypadku kilku punktów orientacyjnych w pozycji po prawej stronie. Zwróć uwagę, że współrzędne Z dla lewej ręki użytkownika są ujemne, ponieważ znajdują się one przed środkiem bioder fotografowanego, a w kierunku kamery.

Punkt orientacyjnyTypPozycjaInFrameLikelihood
11LEFT_SHOULDER(734,9671, 550,7924, -118,11934)0,9999038
12 RIGHT_SHOULDER (391,27032, 583,2485, -321,15836) 0,9999894
13 LEFT_ELBOW (903.83704, 754.676, -219,67009) 0,9836427
14 RIGHT_ELBOW (322,18152, 842,5973, -179,28519) 0,99970156
15 LEFT_WRIST (1073,8956, 654,9725, -820,93463) 0,9737737
16 RIGHT_WRIST (218,27956, 1015,70435, -683,6567) 0,995568
17 LEFT_PINKY (1146.1635, 609,6432, -956,9976) 0,95273364
18 RIGHT_PINKY (176,17755, 1065,838, -776,5006) 0,9785348

Dla zaawansowanych

Więcej informacji o wdrażaniu podstawowych modeli ML tego interfejsu API znajdziesz w poście na blogu Google AI.

Więcej informacji o naszych praktykach w zakresie uczciwości systemów uczących się i o tym, jak trenowano modele, znajdziesz na naszej karcie modelu.