$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Pierwszym wymaganiem dla proponowanej metody jest system do dokładnego śledzenia pozycji obiektów 3D i rąk. Konkretna konfiguracja jest pokazana w Rysunek 1A i wykorzystuje sprzęt i oprogramowanie wyprodukowane przez firmę Qualisys, zajmującą się przechwytywaniem ruchu. Stół warsztatowy umieszczamy w przestrzeni śledzenia (100 cm x 100 cm x 100 cm), która jest obrazowana pod różnymi kątami przez osiem kamer śledzących i sześć kamer wideo umieszczonych na sześciennej ramie otaczającej przestrzeń roboczą. Kamery śledzące śledzą pozycję 3D znaczników odblaskowych w przestrzeni śledzenia z prędkością 180 klatek/s i z submilimetrową rozdzielczością przestrzenną 3D. Stosujemy markery odblaskowe o średnicy 4 mm, które są mocowane do przedmiotów i dłoni za pomocą przyjaznej dla skóry dwustronnej taśmy klejącej. Pozycje znaczników 3D są przetwarzane przez oprogramowanie do przechwytywania ruchu. W sekcji dyskusji omówiono również alternatywne systemy przechwytywania ruchu, które można zastosować przy użyciu proponowanej metody.
Aby uzyskać dokładne rekonstrukcje 3D rzeczywistych obiektów, które są chwytane i manipulowane, proponujemy dwie opcje. Pierwsza, która jest tutaj przyjęta, polega na rozpoczęciu od wirtualnego modelu obiektu 3D w postaci siatki wielokątów. Takie modele 3D można konstruować za pomocą odpowiedniego oprogramowania (np. Blender 3D44), a następnie drukować w 3D (Rysunek 1B). Drugą opcją jest wzięcie istniejącego, rzeczywistego obiektu 3D i użycie technologii skanowania 3D do skonstruowania repliki modelu siatkowego obiektu. Niezależnie od strategii, celem końcowym jest uzyskanie zarówno rzeczywistego obiektu 3D, jak i odpowiadającego mu wirtualnego modelu siatki obiektów 3D. Warto zauważyć, że opisane tutaj podejście działa tylko w przypadku sztywnych (tj. nieodkształcalnych) obiektów.
Gdy powierzchnia 3D obiektu jest dostępna jako model siatki, jej pozycja musi być śledzona i rejestrowana (Rysunek 1C). W tym celu do powierzchni rzeczywistego obiektu przymocowane są cztery niepłaskie znaczniki odblaskowe, a obiekt jest umieszczany w objętości śledzenia. Pozycje 3D znaczników obiektów są następnie na krótko rejestrowane. To przechwytywanie służy do ustalenia zgodności między czterema znacznikami i czterema wierzchołkami modelu siatki obiektów. Odbywa się to za pomocą prostej trasy programowej ad hoc napisanej w API Pythona Blendera. W rzutni Blendera program prezentuje wirtualny obiekt wraz z pozycjami znaczników, które są reprezentowane jako pojedynczy obiekt siatki składający się z jednej sfery dla każdego znacznika. Użytkownik może następnie obrócić i przesunąć obiekt i/lub znaczniki, aby wyrównać je tak, aby były wyrównane z rzeczywistymi znacznikami umieszczonymi na rzeczywistym obiekcie. Program zarejestruje obroty i translację, które są stosowane do obliczenia pojedynczej translacji rotacyjnej, która jest ostatecznie stosowana do oryginalnej siatki obiektów, zapewniając siatkę obiektu, która jest współzarejestrowana z definicją ciała sztywnego w QTM.
Po ustaleniu zgodności, za każdym razem, gdy rzeczywisty obiekt jest przesuwany w obrębie objętości śledzenia, wirtualny obiekt może zostać umieszczony w nowej pozycji, obliczając translację rotacyjną między śledzonymi znacznikami a czterema odpowiadającymi im wierzchołkami siatki. Aby zamiast tego zarejestrować dynamikę chwytu, za pomocą dwustronnej taśmy na różnych punktach orientacyjnych dłoni przymocowano w sumie 24 sferyczne znaczniki odblaskowe (Rysunek 1D i Rysunek 2).
Na początku próby (Rysunek 1E), uczestnik kładzie rękę płasko na stole warsztatowym z dłonią skierowaną w dół i zamyka oczy. Eksperymentator umieszcza obiekt docelowy na stole warsztatowym przed uczestnikiem. Następnie sygnał dźwiękowy sygnalizuje uczestnikowi, aby otworzył oczy i wykonał chwyt. W naszych pokazach zadanie polega na dotarciu i uchwyceniu docelowego przedmiotu, podniesieniu go pionowo o około 10 cm, odłożeniu i przywróceniu ręki do pozycji wyjściowej. Skrypt napisany w Pythonie 3.7 steruje eksperymentem. W każdej próbie skrypt wybiera i przekazuje eksperymentatorowi bieżące ustawienia warunków (np. tożsamość obiektu i pozycjonowanie). Skrypt steruje również czasem próby, w tym sygnałami dźwiękowymi oraz początkiem i końcem nagrań przechwytywania ruchu.
Kończyny charakteryzują się nie tylko swoją pozycją w przestrzeni 3D, ale także pozą. Tak więc, aby uzyskać kompletną rekonstrukcję 3D ludzkiej ręki wykonującej prawdziwy chwyt, potrzebujemy nie tylko pozycji każdego stawu w przestrzeni 3D, ale także względnej pozycji (translacji i obrotu) każdego stawu w stosunku do jego stawu macierzystego (Rysunek 1F). Pozycje i orientacje stawów szkieletowych można wywnioskować z pozycji znaczników za pomocą kinematyki odwrotnej. Aby to zrobić, używamy tutaj solvera szkieletowego dostarczonego przez oprogramowanie QTM. Aby solver działał, musimy najpierw dostarczyć definicję szkieletu, która łączy położenie i orientację każdego połączenia z wieloma pozycjami znaczników. W ten sposób konstruowana jest definicja szkieletu, a szkielet jest łączony z danymi znacznika za pomocą wtyczki QTM Connect dla programu Maya. Tworzymy spersonalizowane definicje szkieletu dla każdego uczestnika, aby zmaksymalizować dokładność dopasowań szkieletu do danych znacznika. Dla każdego uczestnika ręcznie dopasowujemy szkielet dłoni do pojedynczej klatki danych motion capture. Po uzyskaniu definicji szkieletu specyficznej dla uczestnika, uruchamiamy solver szkieletu, aby oszacować ułożenie stawów szkieletowych dla każdej klatki każdej próby w eksperymencie.
Dla każdej klatki każdej próby w eksperymencie generujemy siatkę dłoni, która rekonstruuje aktualną pozycję dłoni za pomocą narzędzia do generowania siatki dłoni o otwartym kodzie źródłowym, DeepHandMesh28 (Rysunek 1G). DeepHandMesh to głęboka sieć kodera-dekodera, która generuje spersonalizowane siatki dłoni na podstawie obrazów. Po pierwsze, enkoder szacuje ułożenie dłoni w obrazie (tj. wspólne kąty Eulera). Następnie szacowana pozycja ręki i spersonalizowany wektor identyfikatora są wprowadzane do dekodera, który szacuje zestaw trzech dodatkowych korekt do sfałszowanej siatki szablonu. Na koniec siatka szablonu jest deformowana zgodnie z szacowanym ułożeniem dłoni i poprawkami za pomocą liniowego skórowania mieszania. Pierwszą korekcją jest korekcja szkieletu zależna od ID, za pomocą której szkielet jest dostosowywany do pozycji stawów specyficznych dla danej osoby. Pozostałe dwie korekcje to korekcje siatki, za pomocą których wierzchołki siatki są dostosowywane tak, aby lepiej reprezentowały powierzchnię dłoni uczestnika. Jedną z korekcji siatki jest korekcja siatki zależna od identyfikatora, która uwzględnia strukturę powierzchni dłoni indywidualnego uczestnika. Ostatnia korekcja siatki to korekcja wierzchołków zależna od ułożenia, która uwzględnia deformacje powierzchni dłoni spowodowane bieżącym ułożeniem dłoni.
DeepHandMesh jest trenowany przy użyciu słabego nadzoru z kluczowymi punktami połączeń 2D i mapami głębi sceny. W tym przypadku używamy tylko wstępnie wytrenowanego dekodera DeepHandMesh do generowania rekonstrukcji siatki ręcznej, zmodyfikowanych w następujący sposób (Rysunek 3). Po pierwsze, ponieważ sieć nie jest trenowana na konkretnych uczestnikach, stosowana jest ogólna korekcja siatki zależnej od identyfikatora dostarczana ze wstępnie wytrenowanym modelem (Rysunek 3A). Co więcej, korekcja szkieletu zależna od ID jest wyprowadzana przy użyciu solvera szkieletu QTM, jak opisano powyżej (Rysunek 3B). Zakłada się proporcjonalne skalowanie dłoni wraz z długością szkieletu, a grubość siatki jest równomiernie skalowana przez współczynnik wynikający ze względnego skalowania szkieletu tak, aby siatka lepiej przybliżała rozmiar dłoni uczestnika (Rysunek 3C). Ta zmodyfikowana siatka jest wprowadzana do dekodera wraz z aktualną pozycją ręki (pochodzącą z danych znacznika) oraz pozycją i orientacją 3D nadgarstka. W ten sposób dekoder oblicza bieżącą korektę zależną od pozy, stosuje wszystkie korekty i translacje rotacyjne, a następnie wyprowadza rekonstrukcję siatki 3D bieżącego ułożenia ręki w tej samej ramce współrzędnych, co siatka śledzonych obiektów 3D (Rysunek 3D).

Rysunek 3: Modyfikacje wstępnie wytrenowanego dekodera DeepHandMesh. (A) Poprawiona, ogólna korekta siatki zależnej od ID. (B) Korekta szkieletu zależna od ID uzyskana za pomocą kinematyki odwrotnej w kroku 10. (C) Rozmiar siatki ręcznej jest skalowany za pomocą tego samego współczynnika, co stawy szkieletowe. (D) Ostateczna rekonstrukcja 3D obecnej pozycji dłoni za pomocą siatki. Kliknij tutaj, aby zobaczyć większą wersję tego rysunku.
Po zrekonstruowaniu modeli siatki 3D zarówno dla dłoni uczestnika, jak i chwytanego obiektu, obszary kontaktu ręka-obiekt można oszacować, obliczając przecięcie między siatką dłoni i obiektu (Rysunek 1H). Założenie jest takie, że prawdziwa ręka jest zdeformowana przez kontakt z powierzchnią, co oznacza, że szkielet może zbliżyć się do powierzchni, niż byłoby to możliwe, gdyby ręka była sztywna, co pozwala częściom siatki dłoni przejść przez siatkę obiektu. W rezultacie obszary kontaktu można przybliżyć jako obszary nakładania się dwóch siatek.
W szczególności, aby obliczyć te obszary nakładania się, definiujemy wierzchołki siatki obiektów, które są zawarte w objętości 3D siatki dłoni, jako stykające się z dłonią. Te wierzchołki są identyfikowane przy użyciu standardowego podejścia do śledzenia promieni45. Dla każdego wierzchołka siatki obiektu promień jest rzutowany z tego wierzchołka do dowolnego punktu 3D poza siatką ręczną. 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 ręcznej. Jeśli liczba przecięć jest parzysta, oznacza to, że wierzchołek obiektu znajduje się poza siatką ręczną. Obszary kontaktowe na powierzchni obiektu można zatem przybliżyć jako zbiór ścian trójkątów, których wszystkie wierzchołki są zawarte w siatce ręcznej. Możemy zastosować to samo uzasadnienie do wierzchołków siatki dłoni zawartych w objętości 3D siatki obiektu, aby oszacować obszary kontaktu na powierzchni dłoni. Warto zauważyć, że można również zastosować bardziej zaawansowane podejścia do operacji siatki logicznej31.
Wideo 1 pokazuje film przedstawiający rękę, śledzone punkty i wspólnie zarejestrowaną siatkę, które poruszają się obok siebie podczas jednego chwytu do wydrukowanej w 3D figurki kota. Rysunek 4A zamiast tego pokazuje pojedynczą klatkę w momencie kontaktu dłoni z obiektem od uchwytu do wydrukowanego w 3D rogalika, wraz z rekonstrukcjami siatki ręka-obiekt (Rysunek 4B) i szacowanymi obszarami kontaktu na powierzchni rogalika (Rysunek 4C).

Rysunek 4: Szacowane obszary kontaktu dłoni z obiektem. (A) Śledzona ręka i przedmiot oglądane z jednej z kamer śledzących podczas chwytania. (B) Zrekonstruowana siatka ręczna i siatka śledzonych obiektów renderowana z tego samego punktu widzenia, co kamera śledząca. (C) Obszary kontaktowe na powierzchni obiektu widziane z wielu punktów widzenia. Kliknij tutaj, aby zobaczyć większą wersję tego rysunku.
Wideo 1: Siatki rekonstrukcje dłoni i obiektu. Animacja GIF przedstawiająca dłoń, śledzone znaczniki oraz rekonstrukcje dłoni i siatki obiektów podczas pojedynczego chwytu, oglądane z tego samego punktu widzenia kamery. Kliknij tutaj, aby pobrać ten film.