{"id":106,"date":"2018-09-13T12:59:54","date_gmt":"2018-09-13T12:59:54","guid":{"rendered":"http:\/\/symotiv.de\/?p=106"},"modified":"2019-05-06T10:38:26","modified_gmt":"2019-05-06T10:38:26","slug":"04-rekonstruktion-der-openpose-daten-in-die-dritte-dimension","status":"publish","type":"post","link":"https:\/\/symotiv.de\/04-rekonstruktion-der-openpose-daten-in-die-dritte-dimension","title":{"rendered":"04 – Rekonstruktion der Openpose Daten in die dritte Dimension"},"content":{"rendered":"

Wenn man an Ganzk\u00f6rper-Motion-Tracking denkt, denkt man zumeist erst an Systeme aus der Film- oder Videospiel-Produktion, die mit farbigen Referenzpunkten auf dem zu analysierenden K\u00f6rper oder sogar\u00a0Ganzk\u00f6rper-Anz\u00fcgen die Bewegungen sehr genau entnehmen. In diesem Forschungsprojekt musste\u00a0jedoch ein bestimmter Rahmen an Kosten und Aufwand f\u00fcr das Orchester eingehalten werden, der es\u00a0nicht erlaubt hat, derartige Systeme zu benutzen. Daher war es eine umso gr\u00f6\u00dfere Herausforderung, eine\u00a0\u00e4hnliches Tracking nur mit Kameras und Machine-Learning Frameworks zu erreichen.\u00a0Um die gewonnenen Daten aus der 2D-Pose-Estimation in der gewollten Virtual Reality Umgebung\u00a0darstellen zu k\u00f6nnen, musste der Schritt in die dritte Dimension noch getan werden. Da das Ergebnis des\u00a0Openpose Trackings 2D-Pixeldaten sind, die abh\u00e4ngig vom analysierten Video entstehen, musste eine\u00a0weitere Pose-Estimation Komponente angewandt werden, um auch die 3-dimensionale Position der\u00a0einzelnen getrackten Gelenkpunkte zu ermitteln.<\/p>\n

Hierzu lie\u00dfen sich im Internet viele kleine Experimente und Ans\u00e4tze finden, die allesamt sehr spezifisch in ihrer eigenen Funktion waren:<\/p>\n

https:\/\/github.com\/chanyn\/3Dpose_ssl<\/a>
\nHier wird versucht, die menschliche Bewegung volumetrisch anhand des sichtbaren K\u00f6rpers\u00a0herauszufinden.<\/p>\n

https:\/\/github.com\/ildoonet\/tf-pose-estimation<\/a>
\nDieses Framework spezialisiert sich auf die live-Erfassung von Bewegungen<\/p>\n

http:\/\/gvv.mpi-inf.mpg.de\/projects\/VNect\/content\/VNect_SIGGRAPH2017.pdf<\/a>
\nHier wird eine weitere Option zur Echtzeiterfassung geboten.<\/p>\n

3D-pose-baseline, das Framework f\u00fcr das wir uns entschieden haben, versucht anhand eines Datensatzes\u00a0eine r\u00e4umlich realistische 3D-Bewegung aus einem Video zu entnehmen, auf Basis des Open-Source\u00a0Machine Learning Frameworks tensorflow und der Skriptsprache Python. Arash Hosseini, ein Mitarbeiter\u00a0am Openpose-Projekt hat diese Methodik auf den Datensatz angepasst, der aus einer Video-Analyse von\u00a0Openpose entsteht. So k\u00f6nnen wir direkt an unseren bisherigen Datensatz ankn\u00fcpfen:<\/p>\n

https:\/\/github.com\/ArashHosseini\/3d-pose-baseline<\/p>\n

Man gibt hier die Ordnerstruktur an, die von Openpose ausgegeben wurde und das Ergebnis ist eine\u00a0.TXT-Datei, die die Information f\u00fcr die gesamte Bewegung enth\u00e4lt. Das Ergebnis-Datenformat wurde\u00a0allerdings auf .CSV umgestellt, der Inhalt bleibt der gleiche (siehe unten).<\/p>\n

Um 3d-pose-baseline zu verwenden, muss eine funktionierende Tesorflow Environment eingerichtet\u00a0werden. W\u00e4hrend dem Forschungsprojekt wurde f\u00fcr Machine-Learning Ubuntu 18.04 verwendet, f\u00fcr das\u00a0alle folgenden Installationen gedacht sind:<\/p>\n

https:\/\/docs.anaconda.com\/anaconda\/install\/linux\/<\/a>
\n
https:\/\/github.com\/markjay4k\/Install-Tensorflow-on-Ubuntu-17.10-\/blob\/master\/Tensorflow%20Install%20instructions.ipynb<\/a><\/p>\n

Sobald die Tensorflow-Environment installiert und initialisiert ist, k\u00f6nnen die Python-Befehle ausgef\u00fchrt\u00a0werden, die wie folgend aussehen:<\/p>\n

python src\/openpose_3dpose_sandbox_out.py --camera_frame --residual --batch_norm --dropout
\n0.5 --max_norm --evaluateActionWise --use_sh --epochs 200 --load 4874200 --openpose
\ntrackingdata\/mid_coco_op\/ --people 0 --out test<\/p>\n

Dabei sind folgende Komponenten wichtig zu kennen:<\/p>\n

src\/openpose_3dpose_sandbox_out.py
\nBeschreibt das Skript, das mit dem Befehl ausgef\u00fchrt wird. Hier muss man den Pfad angeben, wo sich die\u00a0.py-Datei befindet<\/p>\n

--openpose trackingdata\/mid_coco_op\/
\nHier wird der Ordner angegeben, der den Openpose-Datensatz enth\u00e4lt.<\/p>\n

--people 0 --out test
\nDas sind Flags, die zugeschrieben wurden; \u201epeople\u201c beschreibt per ID die Person, von der das Ergebnis\u00a0erstellt werden soll und das Wort nach \u201eout\u201c gibt an wie die auszugebene .CSV-Datei hei\u00dfen wird. Hier\u00a0ist die ver\u00e4nderte Datei:<\/p>\n

Link mit erneuertem Python Modul folgt.<\/p>\n

Die .CSV-Datei die durch diese Rechnungen erstellt wird, bezieht ihre Gr\u00f6\u00dfe aus der Anzahl\u00a0Videoframes, die berechnet wurden. Wenn man die Datei in Excel\/Calc \u00f6ffnet ergibt sich folgende
\nDatenstruktur: Zeilen in der Tabelle stehen f\u00fcr die einzelnen Frames der Bewegung. Spalten bezeichnen\u00a0die einzelnen Koordinaten, die die Bewegung zusammenstellen in der X-, Y-, und Z-Position. So sind\u00a0zum Beispiel die Spalten 1, 2, 3 f\u00fcr die x, y, z Position des Joints H\u00fcfte-Mitte zust\u00e4ndig, 4, 5, 6 f\u00fcr H\u00fcfte-Rechts, 7, 8, 9 f\u00fcr Knie-Rechts und so weiter.<\/p>\n

\"\"<\/p>\n

Die aus 3d-baseline exportierte .CSV hat immer 96 Spalten, von denen allerdings viele \u00fcberfl\u00fcssig sind\u00a0und daher aus dem benutzbaren Datenset herausfallen. \u00dcbrig bleiben 51 Spalten, die f\u00fcr 17 mal 3\u00a0Koordinaten, also 17 Gelenke stehen. Das folgende Array zeigt die Gelenke aus der .CSV, die benutzt\u00a0werden und l\u00e4sst unbenutzte Werte einfach weg:<\/p>\n

int[] relevant = {\r\n\r\n0, \/\/ H\u00fcfte Mitte 0\r\n1, \/\/ H\u00fcfte Links 1\r\n2, \/\/ Knie Links 2\r\n3, \/\/ Fu\u00df Links 3\r\n\/*4,5,*\/\r\n6, \/\/ H\u00fcfte Rechts 4\r\n7, \/\/ Knie Rechts 5\r\n8, \/\/ Fu\u00df Rechts 6\r\n\/*9,10,11,*\/\r\n12, \/\/ Torso 7\r\n13, \/\/ Nacken 8\r\n14, \/\/ Hals 9\r\n15, \/\/ Kopf 10\r\n\/*,16*\/\r\n17, \/\/ Schulter Rechts 11\r\n18, \/\/ Ellbogen Rechts 12\r\n19, \/\/ Hand Rechts 13\r\n\/*20,21, 22, 23, 24,*\/\r\n25, \/\/ Schulter Links 14\r\n26, \/\/ Ellbogen links 15\r\n27 \/\/ Hand Links 16\r\n\/*,28*\/\r\n};<\/pre>\n

F\u00fcr den sp\u00e4teren Gebrauch haben wir das Array l\u00fcckenlos gelassen, da wir aus den Tabellen die \u00fcberfl\u00fcssigen Werte streichen und die CSV wirklich nur aus 51 Spalten besteht. Die Gelenke sind folgenderma\u00dfen zuzuordnen.<\/p>\n

\"\"<\/p>\n","protected":false},"excerpt":{"rendered":"

Wenn man an Ganzk\u00f6rper-Motion-Tracking denkt, denkt man zumeist erst an Systeme aus der Film- oder Videospiel-Produktion, die mit farbigen Referenzpunkten auf dem zu analysierenden K\u00f6rper oder sogar\u00a0Ganzk\u00f6rper-Anz\u00fcgen die Bewegungen sehr genau entnehmen. In diesem Forschungsprojekt musste\u00a0jedoch ein bestimmter Rahmen an Kosten und Aufwand f\u00fcr das Orchester eingehalten werden, der es\u00a0nicht erlaubt hat, derartige Systeme zu […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/posts\/106"}],"collection":[{"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/comments?post=106"}],"version-history":[{"count":3,"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/posts\/106\/revisions"}],"predecessor-version":[{"id":147,"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/posts\/106\/revisions\/147"}],"wp:attachment":[{"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/media?parent=106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/categories?post=106"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/tags?post=106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}