Magazín KPI
Časopis Katedry počítačov a informatiky FEI TUKE
kpi

Vizualizácia gestikulácie ruky s podporou MYO Armband

V dnešnej dobe vznikla snaha, tam kde je to vhodné, nahradiť klasická ovládanie pomocou klávesnice a myši. Ako jeden z efektívnych spôsobov sa ukázala gestikulácia. Tento článok opisuje tvorbu webovej aplikácie pre vizualizáciu gestikulácie ľudskej ruky s podporou zariadenia MYO Armband, ktorá má prispieť k rozširovaniu využiteľnosti gestikulácie ako ovládacieho prvku zariadení. Mojou úlohou bolo predovšetkým analyzovať možnosti detekcie pohybu ruky, prostredníctvom náramku MYO a vytvoriť webovú aplikáciu, schopnú výstupy tohto zariadenia využívať pre grafickú 3D reprezentáciu ruky používateľa.

Technické parametre MYO Armband

Ako uvádza technická špecifikácia zariadenia, náramok MYO sa skladá z ôsmich EMG senzorov, prostredníctvom ktorých meria aktivitu svalov ruky umiestnených na predlaktí a ktoré sú zodpovedné za pohyb zápästia a prstov ruky (okrem palca). Ďalej je tento náramok vybavený 9 osovou IMU (Inertial Measurement Unit) pozostávajúcej z 3-osového gyroskopu, akcelerometra a magnetometra, pomocou ktorých je možné sledovať priestorový pohyb ruky používateľa.

Meranie svalovej aktivity prostredníctvom MYO (zdroj)
Meranie svalovej aktivity prostredníctvom MYO (zdroj)

Náramok poskytuje spätnú väzbu predovšetkým v podobe vibrácií a podporuje bezdrôtové pripojenie prostredníctvom priloženého Bluetooth adaptéra. Na klientskej strane je možné údaje z náramka MYO prijímať po nainštalovaní klientskej aplikácie pre toto zariadenie.

Zaznamenávanie gestikulácie a polohy ruky

Gestikuláciu ruky je možné z náramka MYO čítať dvoma spôsobmi. Prvým spôsobom je získavanie rozpoznaných gest, ktoré náramok rozpoznáva prostredníctvom integrovaných algoritmov strojového učenia. Tento systém dokáže rozpoznať 5 gest. Sú to gestá: „Double-tap“, “Fist“, „Open“, „Wave in“ a „Wave out“.

Zobrazenie preddefinovaných gest náramka MYO (zdroj)
Zobrazenie preddefinovaných gest náramka MYO (zdroj)

Pred využitím tohto spôsobu rozpoznávania je potrebné náramok kalibrovať na konkrétneho používateľa a to prostredníctvom formovania určených gest.

Okrem samotných rozpoznaných gest, zariadenie MYO poskytuje aj priamy prístup k nameraným EMG hodnotám na jednotlivých senzoroch. V rámci tvorby tejto aplikácie vznikla snaha využiť tieto dáta k monitorovaniu pohybu ruky používateľa a jej vyobrazovanie prostredníctvom virtuálneho modelu v reálnom čase. Tento spôsob detekcie gestikulácie sa však ukázal ako neuskutočniteľný, a to z dôvodu premenlivého charakteru dát. Namerané EMG dáta svalovej aktivity sa pri niekoľkých opakovaniach rovnakého gesta v značnej miere líšili, v dôsledku čoho z nich nebolo možné selektovať pohyb jednotlivých prstov ruky. Mimo tohto experimentu vznikla snaha rozšíriť základnú sadu rozpoznateľných gest pomocou algoritmov strojového učenia. Tento systém rozpoznávania mal byť založený na statickej definícii gesta ako množiny hodnôt EMG nameraných na jednotlivých senzoroch náramku. Výrazné odchýlky v nameraných údajoch však predstavovali problém aj pre tento spôsob riešenia, nakoľko sa v rámci implementácie tohto riešenia, nepodarilo nájsť žiadne vzory premenlivosti dát pri opakovanom vykonávaní daného gesta. Navyše, bol spomínaný efekt nekonzistentnosti údajov umocnený pri meraniach medzi rôznymi používateľmi zariadenia, kedy boli rozdiely omnoho výraznejšie. Preto, na základe tohto poznatku, bola práca s detekciou gestikulácie ruky prostredníctvom zariadenia MYO, v rámci tejto aplikácie, obmedzená výlučne na 5 gest, ktoré tento náramok v základnej konfigurácii poskytuje.

Čo sa týka priestorovej polohy a rotácie ruky, tie je možné sledovať prostredníctvom spomínaného vstavaného gyroskopu a akcelerometra. Pre potreby aplikácie bolo potrebné snímať polohu ruky relatívne voči polohe používateľa, no s použitím jediného akcelerometra je výsledná poloha ruky ovplyvnená aj celkovou polohou používateľa. Pre jednoznačné definovanie polohy ruky by bolo potrebné použiť druhé zariadenie, ktoré by snímalo polohu používateľa, predstavujúcu hmotný bod voči ktorému by bola poloha ruky určovaná.

Grafickú reprezentáciu výstupov zo zariadenia MYO, je možné sledovať na stránke diagnostics.myo.com.

Webové vizualizačné rámce

Veľkou výhodou webových aplikácií je ľahkosť s akou je možné ich sprostredkovať. Má k nim prakticky okamžitý prístup každé zariadenie, ktoré disponuje webovým prehliadačom a internetovým pripojením, a to bez nutnosti sťahovania a inštalácie. Dnes už väčšina, nie len desktopových ale aj mobilných zariadení disponuje prehliadačom schopným pracovať s webovou vizualizačnou technológiou WebGL, prostredníctvom ktorej je možné vizualizovať rôzne dvoj, alebo troj rozmerné animácie a objekty.

Trojrozmerné objekty sú vo virtuálnom priestore reprezentované prostredníctvom svojich jednotlivých vrcholov, anglicky nazývaných vertex. Programy pre grafickú reprezentáciu týchto objektov využívajú vertexové (vrcholové) a fragmentové shaderové programy. O ich význame a spôsobe sa môžte dočítať v článku WebGL Shaders and GLSL.

Samotná technológia WebGL je pre tvorbu grafického prostredia príliš „surová“. Niektoré operácie pri tvorbe a práci s objektmi v nej môžu byť príliš zdĺhavé a náročné. Preto bolo nad touto technológiou postavených hneď niekoľko rámcov, medzi najznámejšie patria: Three.js a Babylon.js. Tieto rámce ponúkajú softvérové nástroje pre zjednodušenú tvorbu objektov, s niekoľkými preddefinovanými základnými geometrickými útvarmi. Okrem toho disponujú aj vlastnými webovými editormi virtuálnych prostredí, z ktorých je vytvorené objekty možné importovať do aplikácie. No najdôležitejšou vlastnosťou týchto rámcov je to, že disponujú preddefinovanými vrcholovými a fragmentovými shadermi, ktorých vlastná implementácie do prostredia WebGL môže byť taktiež zdĺhavá a náročná. Na základe potreby neskoršej integrácie tejto aplikácie do už existujúceho systému bol pre tvorbu tejto aplikácie zvolený rámec Three.js.

Práca s Three.js sa vyznačuje virtuálnym priestorom nazývaným scéna, do ktorého je možné vkladať jednotlivé objekty. Tieto objekty sa dajú behom chodu programu vytvárať a je nimi podľa potreby možné hýbať, respektíve ich rotovať, či meniť ich veľkosť.

Návrh ovládania a tvorba virtuálneho modelu

Ako bolo už spomenuté, Three.js disponuje vlastným editorom virtuálnych prostredí, no tento editor je príliš obmedzený a pre potreby tvorby tejto aplikácie takmer nepoužiteľný. Miesto toho bola pre tvorbu trojrozmerného povrchového modelu využitá modelovacia aplikácia Blender s nainštalovaným doplnkom umožňujúcim export vytvoreného objektu ruky vo formáte GLB, ktorý je možné importovať do scény rámca Three.js.

Povrchový model ruky bol vytvorený z grafických primitív, kde kĺby sú reprezentované objektmi gule a články prstov sú vyobrazené prostredníctvom valcov. Následujúci obrázok zobrazuje model ruky vytvorený v modelovacom nástroji Blender, s označením jednotlivých objektov, z ktorých je model zložený.

Povrchový model ruky
Povrchový model ruky

Ovládanie modelu je riadené pravidlami priamej kinematiky, podľa ktorých sú objekty v modeli zoradené hierarchicky vo vzťahu rodič – potomok a poloha každého potomka je ovplyvnená polohou rodiča. Inými slovami, každá transformácia aplikovaná na objekt rodiča musí byť automaticky prenesená a aplikovaná aj všetkých jeho potomkov. Toto pravidlo je aplikovateľné na reálny pohyb samotnej ruky, kedy sa napríklad s ohybom zápästia pohne v priestore aj celá dlaň. V tomto prípade hovoríme, že zápästie a dlaň sú vo vzťahu rodič – potomok, pri ďalšom delení ruky je teda možné prideliť jednotlivé prsty ruky ako potomkov dlane, a každý článok jednotlivého prsta je potomkom článku predchádzajúceho.

Túto hierarchickú štruktúru je možné v Three.js vytvoriť prostredníctvom vkladania objektov do mriežok ďalších objektov. Každý objekt v Three.js totiž disponuje vlastným súradnicovým podsystémom, do ktorého je možné vkladať ďalšie objekty. Tento súradnicový podsystém objektu je rotovaný a škálovaný spolu s objektom ktorému patrí a teda môže poslúžiť na prenos transformácie (pohybu) z rodiča na jeho potomkov. V konkrétnom prípade tohto modelu ruky je teda do scény vložený najprv objekt zápästia a do jeho mriežky sú následne vložené objekty T0, I0, M0, R0 a L0. Na záver sú do každej vetvy prstov vkladané objekty priliehajúce jednotlivým prstom. Napríklad v prípade palca je do objektu T0 vložený objekt JT0, do objektu JT0 je vložený objekt T1, a tak ďalej. Takto vytvorený model je možné ovládať pomocou rotácie jednotlivých kĺbov po ich osiach.

Vizualizácia gest

Keďže sa čítanie svalovej aktivity z EMG signálov nepodarilo v rámci tejto práce implementovať, model ruky je riadený detekciou predvolených gest zariadenia MYO Armband. Na vstupe aplikácie je teda textový reťazec, obsahujúci názov gesta, ktoré má byť zobrazené. Jednotlivé gesto je v aplikácii vyobrazené ako animácia postupného prechodu medzi kľúčovými polohami ruky v danom geste. Tieto kľúčové polohy sú vnímané ako hodnoty rotácií kĺbov, ktoré má model ruky nadobudnúť. Na nasledujúcom obrázku sú zobrazené kľúčové polohy gesta „double-tap“.

Kľúčové polohy gesta double-tap
Kľúčové polohy gesta double-tap

V každom snímku animácie je kontrolovaná aktuálna rotácia daného kĺbu voči jeho cieľovej rotácii pre dané gesto. Ak je aktuálna rotácia daného kĺbu menšia, pripočíta sa k menu zvolená hodnota rotácie, v opačnom prípade je táto hodnota odčítaná. Zmenou veľkosti tejto hodnoty je možné ovládať rýchlosť animácie zvolenej časti gesta. Práca s výslednou aplikáciou je zobrazená v nasledujúcom videu. Video zachytáva predovšetkým spôsob animácie gest ruky a v jeho závere je znázornená integrácia vstupných dát z náramku MYO.

Záver

Pri tvorbe tejto aplikácie boli skúmané rôzne možnosti pre prácu s detekciou pohybu, výsledná aplikácia však dokáže pracovať len s gestami, ktoré sú zariadeniu MYO armband preddefinované, nakoľko sa nepodarilo v rámci tohto projektu vytvoriť systém ktorý by danú sadu dokázal rozšíriť, a to z dôvodu nadmerného šumu na nameraných dátach. Virtuálny model ruky je zobrazovaný a animovaný v reálnom čase v grafickom prostredí Three.js, ktorý podporuje import trojrozmerných objektov z externých grafických editorov vo formáte GLB a rovnako podporuje ďalšiu manipuláciu s nimi, počas behu programu.

Linkovať