{"id":93,"date":"2019-02-17T10:24:44","date_gmt":"2019-02-17T10:24:44","guid":{"rendered":"http:\/\/symotiv.de\/?p=93"},"modified":"2019-04-25T10:14:08","modified_gmt":"2019-04-25T10:14:08","slug":"08-entwicklung-einer-pipeline-zur-datenerstellung-und-sortierung","status":"publish","type":"post","link":"https:\/\/symotiv.de\/08-entwicklung-einer-pipeline-zur-datenerstellung-und-sortierung","title":{"rendered":"08 – Entwicklung einer Pipeline zur Datenerstellung und Sortierung"},"content":{"rendered":"

Nach den Aufnahmen lagen Videos jedes Takes von den einzelnen Musikergruppen vor. Damit eine saubere Strukturierung der Daten m\u00f6glich ist, haben wir uns dazu entschieden, die Musiker einzeln zu maskieren und in die Mitte des Bilder zu setzen, damit die 3D Transformation die Kameramatrix und -projektion richtig interpretiert und die Daten auf einen kleinen bestimmten Bereich zentriert werden.<\/p>\n

Bild eines einzelnen maskierten Musikers\u2026<\/p>\n

Diese Prozedur wurde f\u00fcr alle Musiker durchgef\u00fchrt, dass am Schluss alle Videos geschnitten auf den aufgenommenen Klang vorlagen. Alle Videos mussten nun von Openpose im Stapel verarbeitet werden, um an die 2D .json Daten zu kommen. Da viel mit Linux gearbeitet wurde, hat hier ein Shell Script die Arbeit erledigt. Die Grundstruktur des Shellscripts wurde auch f\u00fcr sp\u00e4tere Stapelverarbeitungen der Daten genutzt.<\/p>\n

# read files in folder\r\nfor file in \/path\/to\/directory\/*\r\ndo\r\n\tpath=$1\r\n\tfilename=$(basename -- \"$file\")\r\n\t# strip filetype\r\n\tfilename=\"${filename%.*}\"\r\n\tfilename_op=\"${filename%.*}_op\"\r\n\techo \"File: $file\"\r\n\techo \"Path: $path\"\r\n  \techo \"File name: $filename\"\r\n\r\n  \t# create output path for json & video\r\n  \t# echo \"Creating output folder at\"\r\n  \t# echo \"$path\/$filename\"\r\n  \t# mkdir \"$path\/$filename\"\r\n\t\t\r\n  \techo \"Executing openpose\"\r\n\tsudo nvidia-docker run -v \/path\/to\/openpose:\/data -v \/path\/to\/openpose\/models:\/openpose\/models -it wenwu449\/openpose:latest .\/build\/examples\/openpose\/openpose.bin --video \/data\/$filename.mp4 --write_json \/data\/Motiondata\/$filename\/ --model_pose COCO --number_people_max 1 --camera_fps 60 --write_video \/data\/Motionvideo\/$filename_op.avi --display 0<\/pre>\n
\r\n\techo \"openpose is done\"\r\n\r\n  \t# convert to mp4\r\n  \tffmpeg -i \/Motionvideo\/$filename_op.avi Isolation\/Motionvideo\/$filename_op.mp4 -hide_banner\r\n\r\n\techo \"AVI File converted to MP4\"\r\n  \t\r\n  \t# delete avi\r\n  \trm Isolation\/Motionvideo\/$filename_op.avi\r\n\r\n\techo \"AVI File deleted\"\r\n\r\n  \techo \"\"\r\n  \techo \"~\"\r\n  \techo \"\"\r\n  \techo \"\"\r\n\r\ndone<\/pre>\n

Nachdem alle Videos von Openpose verarbeitet worden sind, wurde der Datensatz von 3D Baseline weiterverarbeitet. \u00dcber ein Shellscript wurde hier wieder auf die einzelnen Ordner zugegriffen, um die csv Tabellen f\u00fcr die Bewegungsdaten der Musiker zu erstellen. Hier wurden der openpose Befehl, das Konvertieren zu .mp4, sowie das L\u00f6schen der .avi-Datei weggelassen und ausgetauscht durch den Befehl f\u00fcr 3d-pose-baseline<\/p>\n

Alle CSV Tabellen waren nun zur Weiterverarbeitung bereit. Da noch nicht sicher war, wie die Daten eingebettet werden, wurden die Datenmengen der Tabelle reduziert von XX MB auf YY MB. Durch ein Runden auf zwei Nachkommastellen aller Zahlen reduzierte sich die Zeichenmenge so, dass auch die Datenmenge nach unten ging. \u00dcber ein Shellscript wurden die Tabellen wieder im Stapel verarbeitet. Mit einem perl regex Befehl wurden die Zahlen in den Tabellen gerundet und gek\u00fcrzt.<\/p>\n

perl -i -pe 's\/[-+]?\\d*(?:\\.?\\d|\\d\\.)\\d*(?:[eE][-+]?\\d+)?\/sprintf(\"%.2f\",$&)\/ge' $file<\/pre>\n

Es wurde viel Zeit investiert, die Daten immer im Stapel und nicht einzeln zu generieren, da das einfach mehr Zeit in Anspruch genommen h\u00e4tte. Die Shell Scripte haben sehr viel Aufwand gespart und waren ein gutes Mittel \u00dcberblick zu behalten.<\/p>\n

Nach der langen Besch\u00e4ftigung mit der Datenarchitektur, war das n\u00e4chste Thema das Audio- und Klangbild im virtuellen Raum.<\/p>\n

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

Nach den Aufnahmen lagen Videos jedes Takes von den einzelnen Musikergruppen vor. Damit eine saubere Strukturierung der Daten m\u00f6glich ist, haben wir uns dazu entschieden, die Musiker einzeln zu maskieren und in die Mitte des Bilder zu setzen, damit die 3D Transformation die Kameramatrix und -projektion richtig interpretiert und die Daten auf einen kleinen bestimmten […]<\/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\/93"}],"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=93"}],"version-history":[{"count":3,"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/posts\/93\/revisions"}],"predecessor-version":[{"id":131,"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/posts\/93\/revisions\/131"}],"wp:attachment":[{"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/media?parent=93"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/categories?post=93"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/symotiv.de\/wp-json\/wp\/v2\/tags?post=93"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}