07 / BTS-SIO / software

Dataset artificiel

Script blender permettant de générer automatiquement un grand nombre d'images d’entraînement pour une IA

Statut : archived Stack : python/blender Année : 2023-2024

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é.

code_blocks

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é.

download

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.

timeline

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.

Architecture Technique

Extrait de code principal illustrant le modèle d'implémentation clé de ce projet.

python blender early AI
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)
07

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.