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.
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:
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 orientacyjny | Typ | Pozycja | InFrameLikelihood |
---|---|---|---|
11 | LEFT_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.