Dataset artificiel
Script blender permettant de générer automatiquement un grand nombre d'images d’entraînement pour une IA
Le Défi
Créer un programme permettant de générer des rendus photoréalistes de pièces "Lego" dans le but d’entraîner une intelligence artificielle à reconnaître des pièces dans la réalité.
Fonctionnement du script
Ce script permet de créer des dizaines de rendus réalistes grâce à quelques étapes simples. D'abord, une simulation de rigidbody est opérée pour donner une position réaliste bien qu'aléatoire à l'objet. Étant donné qu'il est difficile de donner une vélocité arbitraire à un objet sur Blender, j'ai choisi de donner une gravité aléatoire à la scène pendant un bref instant, ce qui revient au même résultat.
Puis, la caméra est déplacée vers l'objet de sorte qu'il prenne l'entièreté du champ. Enfin, un rendu 3D en 128p est opéré.
Sources des données
Les modèles 3D sont sourcés grâce à la bibliothèque open source LDRAW qui regroupe les modèles 3D de toutes les briques Lego existantes.
Objectif Final
Ce script a pour but de simplifier la création d'un DataSet dans le but d’entraîner une IA de reconnaissance d'image.
object = import_obj("C:\ldrawmodels\"+part_name, ldrawpath)
object.scale = (import_scale,)*3
for i in range(iterations):
scene.keyframe_in("gravity",(r.uniform(3*2,-3*2),r.uniform(3*2,-3*2),0),frame=0)
scene.keyframe_in("gravity",(0.0, 0.0, -9.81), frame=26)
data.materials["Material_4_c"].node_tree.nodes["Group"].inputs[0].default_value = (r.random(), r.random(), r.random(), 1)
object.rotation_euler = (r.uniform(0, pi*2),r.uniform(0, pi*2),r.uniform(0, pi*2))
bpy.ops.rigidbody.bake_to_keyframes(frame_start = 1, frame_end = 90)
camera.frame_object(object)
bpy.ops.render()
data.images['Render'].save_render(filepath)
data.objects.remove(imported_object, do_unlink=True)
J'ai fait ce script à 15 ans en tant que mon premier projet sur Python. À une époque où la meilleure IA sur le marché était GPT 3.5.
Je suis donc très fier d'en être venu à bout.