Pierwszym wymaganiem dla proponowanej metody jest system do dokładnego śledzenia pozycji obiektów 3D i dłoni. Specyficzna konfiguracja przedstawiona jest na Rysunku 1A i wykorzystuje sprzęt oraz oprogramowanie firmy Qualisys zajmującej się systemami przechwytywania ruchu. Wewnątrz obszaru śledzenia (100 cm x 100 cm x 100 cm) ustawiamy stół warsztatowy, który jest obrazowany z wielu kątów przez osiem kamer śledzących i sześć kamer wideo rozmieszczonych na sześcianowej ramie otaczającej przestrzeń roboczą. Kamery śledzące monitorują pozycję 3D markerów refleksyjnych wewnątrz obszaru śledzenia z częstotliwością 180 frames/s i z podmilimetrową rozdzielczością przestrzenną 3D. Stosujemy 4 mm markery refleksyjne, które są mocowane do obiektów i dłoni za pomocą przyjaznej dla skóry dwustronnej taśmy klejącej. Pozycje markerów w 3D są przetwarzane przez oprogramowanie do przechwytywania ruchu. W sekcji dyskusji omówiono również alternatywne systemy przechwytywania ruchu, które mogłyby zostać zastosowane w proponowanej metodzie.
Aby uzyskać dokładne rekonstrukcje 3D rzeczywistych obiektów będących chwytanych i manipulowanych, proponujemy dwa rozwiązania. Pierwsze z nich, zastosowane w niniejszej pracy, polega na rozpoczęciu od wirtualnego modelu 3D obiektu w formie siatki wielokątów. Takie modele 3D mogą być tworzone przy użyciu odpowiedniego oprogramowania (np. Blender 3D44), a następnie wydrukowane w technologii 3D (Rycina 1B). Drugą opcją jest wykorzystanie istniejącego, rzeczywistego obiektu 3D i zastosowanie technologii skanowania 3D w celu stworzenia repliki obiektu w formie modelu siatki. Niezależnie od wybranej strategii, celem końcowym jest uzyskanie zarówno rzeczywistego obiektu 3D, jak i odpowiadającego mu wirtualnego modelu siatki 3D. Należy zaznaczyć, że opisane tutaj podejście działa wyłącznie w przypadku obiektów sztywnych (tj. niedodawalnych).
Gdy powierzchnia 3D obiektu jest już dostępna w formie modelu siatki (mesh), jego pozycja musi zostać śledzona i zarejestrowana współrzędnie (Rysunek 1C). W tym celu do powierzchni rzeczywistego obiektu przymocowuje się cztery nieleżące na jednej płaszczyźnie markery refleksyjne, a następnie obiekt umieszcza się w obszarze śledzenia. Następnie krótko rejestrowane są pozycje 3D markerów obiektu. Rejestracja ta służy do ustalenia odpowiedniości między czterema markerami a czterema wierzchołkami modelu siatki obiektu. Jest to realizowane za pomocą prostego, dedykowanego skryptu napisanego w API Pythona programu Blender. W oknie Viewport programu Blender, program wyświetla wirtualny obiekt wraz z pozycjami markerów, które są reprezentowane jako pojedynczy obiekt siatki składający się z jednej sfery dla każdego markera. Użytkownik może następnie obracać i przesuwać obiekt i/lub markery, aby wyrównać je tak, by pokrywały się z rzeczywistymi markerami umieszczonymi na rzeczywistym obiekcie. Program zarejestruje zastosowane obroty i przesunięcia, aby obliczyć jedną roto-translację, która zostanie ostatecznie zastosowana do oryginalnej siatki obiektu, dostarczając model siatki współzarejestrowany z definicją ciała sztywnego w systemie QTM.
Po ustanowieniu odpowiedniości, podczas każdego ruchu obiektu rzeczywistego w obrębie objętości śledzenia, obiekt wirtualny może zostać umieszczony w nowej pozycji poprzez obliczenie roto-translacji pomiędzy śledzonymi markerami a czterema odpowiadającymi im wierzchołkami siatki. Aby zamiast tego zarejestrować dynamikę chwytu, łącznie 24 sferyczne markery odblaskowe zostają przymocowane do różnych punktów orientacyjnych dłoni za pomocą dwustronnej taśmy (Rysunek 1D i Rysunek 2).
Na początku próby (Rysunek 1E) uczestnik kładzie dłoń płasko na stole roboczym wnętrzem do dołu i zamyka oczy. Eksperymentator kładzie obiekt docelowy na stole roboczym przed uczestnikiem. Następnie sygnał dźwiękowy informuje uczestnika o konieczności otwarcia oczu i wykonania chwytu. W naszych demonstracjach zadaniem jest sięgnięcie i chwycenie obiektu docelowego, podniesienie go pionowo o około 10 cm, odłożenie go i powrót dłoni do pozycji wyjściowej. Przebieg eksperymentu kontroluje skrypt napisany w języku Python 3.7. W każdej próbie skrypt wybiera i przekazuje eksperymentatorowi aktualne ustawienia warunków (np. tożsamość i rozmieszczenie obiektu). Skrypt kontroluje również czas trwania prób, w tym sygnały dźwiękowe oraz rozpoczęcie i zakończenie nagrań z systemu przechwytywania ruchu.
Kończyny charakteryzują się nie tylko położeniem w przestrzeni 3D, ale także pozą. Zatem, aby uzyskać pełną rekonstrukcję 3D ludzkiej dłoni wykonującej rzeczywisty chwyt, wymagamy nie tylko pozycji każdego stawu w przestrzeni 3D, ale także względnej pozy (translacji i rotacji) każdego stawu względem stawu nadrzędnego (Rycina 1F). Pozycje i orientacje stawów szkieletu można wywnioskować z pozycji markerów za pomocą kinematyki odwrotnej. W tym celu wykorzystujemy rozwiązywacz szkieletu (skeleton solver) dostarczony przez oprogramowanie QTM. Aby rozwiązywacz mógł działać, musimy najpierw dostarczyć definicję szkieletu, która wiąże pozycję i orientację każdego stawu z pozycjami wielu markerów. W związku z tym konstruowana jest definicja szkieletu, a szkielet (skeleton rig) zostaje powiązany z danymi markerów za pomocą wtyczki QTM Connect dla programu Maya. Tworzymy spersonalizowane definicje szkieletu dla każdego uczestnika, aby zmaksymalizować dokładność dopasowania szkieletu do danych markerów. Dla każdego uczestnika ręcznie dopasowujemy szkielet dłoni do pojedynczej klatki danych z systemu motion capture. Po uzyskaniu specyficznej dla uczestnika definicji szkieletu uruchamiamy rozwiązywacz szkieletu, aby oszacować pozy stawów szkieletu dla każdej klatki każdej próby w eksperymencie.
Dla każdej klatki każdego powtórzenia w eksperymencie generujemy siatkę dłoni, która rekonstruuje aktualną pozę dłoni przy użyciu otwartoźródłowego i wstępnie wytrenowanego narzędzia do generowania siatek dłoni, DeepHandMesh28 (Rycina 1G). DeepHandMesh to głęboka sieć typu enkoder-dekoder, która generuje spersonalizowane siatki dłoni na podstawie obrazów. Najpierw enkoder szacuje pozę dłoni na obrazie (tj. kąty Eulera stawów). Następnie oszacowana poza dłoni oraz spersonalizowany wektor identyfikacyjny (ID) są wprowadzane do dekodera, który szacuje zestaw trzech addytywnych korekt dla szablonowej siatki z rigiem. Ostatecznie siatka szablonowa jest deformowana zgodnie z oszacowaną pozą dłoni i korektami przy użyciu liniowego mieszania skóry (linear blend skinning). Pierwsza korekta to zależna od ID korekta szkieletu, dzięki której rig szkieletowy jest dostosowywany tak, aby uwzględnić specyficzne dla danej osoby pozycje stawów. Pozostałe dwie korekty to korekty siatki, dzięki którym wierzchołki siatki są dostosowywane w celu lepszego odwzorowania powierzchni dłoni uczestnika. Jedna z korekt siatki jest zależną od ID korektą siatki, która uwzględnia strukturę powierzchni dłoni poszczególnego uczestnika. Ostatnia korekta siatki jest natomiast zależną od pozy korektą wierzchołków, która uwzględnia deformacje powierzchni dłoni wynikające z aktualnej pozy dłoni.
DeepHandMesh jest trenowany przy użyciu słabej superwizji z wykorzystaniem 2D punktów kluczowych stawów oraz map głębi sceny. W tym przypadku wykorzystujemy jedynie pretrenowany dekoder DeepHandMesh do generowania rekonstrukcji siatki dłoni, zmodyfikowany w następujący sposób (Rycina 3). Po pierwsze, ponieważ sieć nie była trenowana na konkretnych uczestnikach, zastosowano ogólną korektę siatki zależną od ID, dostarczoną z pretrenowanym modelem (Rycina 3A). Ponadto korekta szkieletu zależna od ID jest wyznaczana przy użyciu solvera szkieletu QTM, zgodnie z opisaną powyżej procedurą (Rycina 3B). Przyjęto proporcjonalne skalowanie dłoni wraz z długością szkieletu, a grubość siatki jest skalowana jednorodnie przez czynnik pochodzący z względnego skalowania szkieletu, tak aby siatka lepiej przybliżała rozmiar dłoni uczestnika (Rycina 3C). Ta zmodyfikowana siatka jest wprowadzana do dekodera wraz z aktualną pozą dłoni (wyznaczoną na podstawie danych z markerów) oraz 3D pozycją i orientacją nadgarstka. Dekoder oblicza zatem aktualną korektę zależną od pozy, stosuje wszystkie korekty i roto-translacje, a następnie generuje 3D rekonstrukcję siatki dłoni dla aktualnej pozy w tym samym układzie współrzędnych, co 3D siatka śledzonego obiektu (Rycina 3D).

Rycina 3: Modyfikacje dekodera DeepHandMesh z wstępnym przeszkoleniem. (A) Stała, generyczna korekta siatki zależna od ID. (B) Zależna od ID korekta szkieletu wyprowadzona za pomocą kinematyki odwrotnej w kroku 10. (C) Rozmiar siatki dłoni jest skalowany tym samym współczynnikiem co stawy szkieletowe. (D) Końcowa rekonstrukcja trójwymiarowej siatki dłoni dla aktualnej pozy dłoni. Kliknij tutaj, aby wyświetlić powiększoną wersję tej ryciny.
Po zrekonstruowaniu trójwymiarowych modeli siatki (mesh) zarówno dłoni uczestnika, jak i chwyconego obiektu, obszary kontaktu dłoni z obiektem można oszacować, obliczając przecięcie się siatek dłoni i obiektu (Rysunek 1H). Przyjęto założenie, że rzeczywista dłoń ulega odkształceniu w wyniku kontaktu z powierzchnią, co oznacza, że szkielet może znaleźć się bliżej powierzchni, niż byłoby to możliwe w przypadku dłoni sztywnej; pozwala to fragmentom siatki dłoni przeniknąć przez siatkę obiektu. W rezultacie obszary kontaktu można przybliżyć jako regiony nakładania się obu siatek.
Konkretnie, aby obliczyć te obszary nakładania się, definiujemy wierzchołki siatki obiektu, które znajdują się wewnątrz objętości 3D siatki dłoni, jako będące w kontakcie z dłonią. Wierzchołki te są identyfikowane przy użyciu standardowej metody raytracingu45. Dla każdego wierzchołka siatki obiektu rzucany jest promień z tego wierzchołka do dowolnego punktu 3D na zewnątrz siatki dłoni. Następnie oceniamy liczbę przecięć, które występują między rzuconym promieniem a trójkątami tworzącymi powierzchnię dłoni. Jeśli liczba przecięć jest nieparzysta, wierzchołek obiektu znajduje się wewnątrz siatki dłoni. Jeśli liczba przecięć jest parzysta, wierzchołek obiektu znajduje się na zewnątrz siatki dłoni. Obszary kontaktu na powierzchni obiektu można zatem przybliżyć jako zbiór ścian trójkątnych, których wszystkie wierzchołki znajdują się wewnątrz siatki dłoni. Tę samą logikę możemy zastosować do wierzchołków siatki dłoni znajdujących się w objętości 3D siatki obiektu, aby oszacować obszary kontaktu na powierzchni dłoni. Warto zauważyć, że można byłoby również zastosować bardziej zaawansowane podejścia do operacji boolowskich na siatkach31.
Film 1 przedstawia nagranie dłoni, śledzonych punktów oraz zarejestrowanej siatki, które poruszają się równolegle podczas pojedynczego chwytu wydrukowanej w 3D figurki kota. Rycina 4A pokazuje natomiast pojedynczą klatkę w momencie kontaktu dłoni z obiektem podczas chwytu wydrukowanego w 3D rogalika, wraz z rekonstrukcjami siatek dłoni i obiektu (Rycina 4B) oraz szacowanymi obszarami kontaktu na powierzchni rogalika (Rycina 4C).

Rysunek 4: Szacowane obszary kontaktu dłoni z obiektem. (A) Śledzona dłoń i obiekt widziane z jednej z kamer śledzących podczas chwytu. (B) Zrekonstruowana siatka dłoni i śledzona siatka obiektu wyrenderowane z tego samego punktu widzenia co kamera śledząca. (C) Obszary kontaktu na powierzchni obiektu widziane z wielu punktów widzenia. Proszę kliknąć tutaj, aby zobaczyć powiększoną wersję tego rysunku.
Wideo 1: Rekonstrukcje siatki dłoni i obiektu. Animacja GIF przedstawiająca dłoń, śledzone markery oraz rekonstrukcje siatki dłoni i obiektu podczas jednego chwytu, widziane z perspektywy tej samej kamery. Kliknij tutaj, aby pobrać to wideo.