Erstellung von Modellen mit Hilfe von MakeHuman

Die Bedienoberfläche von makehuman

Ich habe von meinem betreuenden Professor den Vorschlag bekommen zunächst eigene Modelle zu erstellen und mein Vorgehen für das Grundprojekt zu dokumentieren. Auf der Suche nach Programmen die mir hilfreich sein können bin ich über makehuman.org gestolpert. Dieses Programm wird seit 2001 entwickelt, ist Open-Source und in Python 2.7 geschrieben.
Da ich seit einiger Zeit selbst verstärkt mit Python arbeite war mein initiales Interesse sehr groß. Ich schaute mir das Programm an und stellte fest das kein direkter Zugriff auf die API durch die Programmierer angedacht ist. Allerdings gab es eine Commandline-Variante (makehuman-commandline) die ein Scripting-Interface bereitstellt. Mit der Option Scripte auszuführen ist eine beliebige Anzahl zufälliger Modelle problemlos zu erstellen.

Einrichtung der Umgebung

Da meine Versuche die Commandline-Variante unter Windows 10 zu installieren leider fehl schlugen entschied ich mich das Programm in einer Virtuellen-Maschiene unter Ubuntu 16.04 zu installieren. Die notwendigen Pakete die nicht unter pip installiert werden konnten sind unten aufgeführt.

apt-get install python-pip python-dev build-essential python-qt4-gl python-sip python-qt4
apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev

Alle weiteren notwendigen Module können mit pip installiert werden.
Nachdem ich nun fertig war mit der Installation musste ich leider feststellen das nur wenige Features von MakeHuman in der Scriptingumgebung ausführbar waren. So war es zum Beispiel nicht möglich mit einem Befehl ein zufälliges Modell zu erstellen oder ein Modell zu exportieren.

Entscheidung über das Export-Format

Es gab 5 verschiedene Formate für den Export von Modellen. Das populärste ist mhx2, mit dem laut dem Forum von makehumancommunity.org ein guter Import zu Blender möglich sei. Es wurden alle Formate für das gleiche Modell zum Vergleich in Blender importiert.

Alle exportierten Formate im Überblick (v.L.n.R. .dae, .fxb, .obj, .mxh2, .slt)
Alle exportierten Formate im Überblick (v.L.n.R. .dae, .fxb, .obj, .slt, .mxh2)

Es ist zu erkennen das die Ergebnisse sehr unterschiedlich sind. Der Export per .stl ist unvollständig, ohne Textur und sehr grob. Die besten Ergebnisse werden mit dem mhx2-Format und dae-Format erlangt. Im Vergleich schneidet das mhx2-Format jedoch noch besser ab, wie in den Bildern unten zu erkennen ist. Da die erstellten Modelle zufällige Attribute haben kann ein männlicher Kopf auf einem weiblichen anmutenden Körper sein. Da lediglich der Kopfbereich interessant ist für das Projekt ist es nicht problematisch, dass die Gesichter nicht zu den Körpern passen. Die erste Generation von zufälligen Modellen hat bisher keine Haare oder andere Features wie Brille, Schnurbart o.Ä., ebenso sind die Texturen zunächst auch zufällig gewählt und so kann ein Modell welches den Parameter ‚cacasian‘ auf 1 hat und ‚asian‘ und ‚african‘ auf 0 eine Textur erhalten die zu einer dunkelhäutigen Person gehört. Wenn diese Modelle zur Erstellung von Lerndaten genutzt werden ist die Übertragbarkeit des entstehenden Modells auf echte Bilder natürlich weniger gegeben. Ebenfalls gilt dies für das Alter einer Person und die Textur, wenn später noch Haare und andere Features hinzugefügt werden muss hier auch darauf geachtet werden, dass diese stimmig sind.

Erweiterung des Programmcodes

Um mehr Freiheiten zu gewinnen wurde der Programmcode genauer angeschaut. Es existiert ein Plugin das zufällige Modelle generieren kann, der notwendigen Programmcode wurde in die Scripting-Umgebung hinzugefügt. So war es nun möglich belibig viele zufällige Modell in einer Schleife zu erstellen.
Der Export von Modellen gestaltete sich komplexer. Jegliche Export-Formate wurden über ein Gui-Element in das Programm integriert. So musste das Gui-Element verändert werden um Zugriff auf die Export-Funktionalität zu gewinnen. Eine neue Methode wurde definiert die aus der Scripting-Umgebung aufgerufen werden kann. Die abgeänderten Dateien (/makehuman/plugins/7_scripting.py, /makehuman/apps/gui/guiexport.py) können Sie sich gerne hier herrunterladen.

Das Script sieht dann wie folgt aus:

import random
from core import G
app = G.app
human = app.selectedHuman

skins = ['default.mhmat','middleage_caucasian_female/middleage_caucasian_female.mhmat','old_caucasian_female/old_caucasian_female.mhmat','young_asian_male/young_asian_male.mhmat','middleage_caucasian_male/middleage_caucasian_male.mhmat','old_caucasian_male/old_caucasian_male.mhmat','Harvey_DevilhornsfemaleV1.mhmat','young_caucasian_female/young_caucasian_female.mhmat','Harveyg3g3.mhmat','Nipple_Skin.mhmat','skin_male_african_middleage.mhmat','middleage_african_female/middleage_african_female.mhmat','old_african_female/old_african_female.mhmat','summerglow.mhmat','young_caucasian_male/young_caucasian_male.mhmat','middleage_african_male/middleage_african_male.mhmat','old_african_male/old_african_male.mhmat','old_african_male/old_african_male.mhmat','middleage_asian_female/middleage_asian_female.mhmat','old_asian_female/old_asian_female.mhmat','young-caucasion-female-ehs01.mhmat','young_african_male/young_african_male.mhmat','young_lightskinned_female_diffuse2_tanlines_1.mhmat','middleage_asian_male/middleage_asian_male.mhmat','old_asian_male/old_asian_male.mhmat','young_asian_female/young_asian_female.mhmat']

for x in range(10):
    MHScript.randomize(human,1,True,True,True,True)
    MHScript.setMaterial('data/skins/'+skins[random.randint(0,len(skins)-1)])
    MHScript.exportmhx2('../../makehumanModels/model_'+str(x)+'.mhx2')

Die beiden Methoden exportmhx2() und randomize() wurden von mir hinzugefügt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.