# Charger les données de maillage

Les jeux de données Mesh ont des colonnes de type [Mesh](/docs/datasets/main/fr/package_reference/main_classes#datasets.Mesh), qui contiennent des objets `trimesh.Trimesh` ou `trimesh.Scene`.

> [!TIP]
> Pour travailler avec des jeux de données maillés, vous devez avoir installé la dépendance `mesh`. Consultez le guide [d'installation](./installation#mesh) pour savoir comment l'installer.

Lorsque vous chargez un jeu de données de maillages et appelez la colonne de maillages, les maillages sont décodés avec `trimesh` :

```py
>>> from datasets import load_dataset, Mesh

>>> dataset = load_dataset("VINAY-UMRETHE/My-Mesh-Dataset", split="train")
>>> dataset[0]["mesh"]
<trimesh.Scene(len(geometry)=33)>
```

Selon le contenu du fichier, `trimesh` peut retourner un objet `trimesh.Trimesh` ou un objet `trimesh.Scene`.

> [!WARNING]
> Accédez à un jeu de données de maillage en utilisant d'abord l'index de ligne, puis la colonne `mesh` - `dataset[0]["mesh"]` - afin d'éviter de décoder tous les fichiers de maillage du jeu de données. Sinon, cela peut être un processus lent et chronophage si vous disposez d'un jeu de données volumineux.

Pour un guide sur la façon de charger n'importe quel type de jeu de données, consultez le guide de chargement général.

## Fichiers locaux

Vous pouvez charger un jeu de données à partir de chemins de fichiers mesh. Utilisez la fonction [cast_column()](/docs/datasets/main/fr/package_reference/main_classes#datasets.Dataset.cast_column) pour accepter une colonne de chemins de fichiers mesh, puis la décoder en un objet `trimesh` avec la fonctionnalité [Mesh](/docs/datasets/main/fr/package_reference/main_classes#datasets.Mesh) :

```py
>>> from datasets import Dataset, Mesh

>>> dataset = Dataset.from_dict({"mesh": ["path/to/model_1.glb", "path/to/model_2.ply", "path/to/model_3.stl"]}).cast_column("mesh", Mesh())
>>> dataset[0]["mesh"]
<trimesh.Scene(len(geometry)=33)>
```

Si vous souhaitez uniquement charger le chemin sous-jacent ou les octets du jeu de données de maillage sans décoder l’objet maillé, définissez `decode=False` dans la fonctionnalité [Mesh](/docs/datasets/main/fr/package_reference/main_classes#datasets.Mesh) :

```py
>>> dataset = load_dataset("VINAY-UMRETHE/My-Mesh-Dataset", split="train").cast_column("mesh", Mesh(decode=False))
>>> dataset[0]["mesh"]
{'bytes': b'...',
 'path': '00001.glb'}
```

La fonctionnalité [Mesh](/docs/datasets/main/fr/package_reference/main_classes#datasets.Mesh) prend en charge les fichiers `.glb`, `.ply` et `.stl`. Selon le contenu du fichier, `trimesh` peut retourner un objet `trimesh.Trimesh` ou un objet `trimesh.Scene`.

## MeshFolder

Vous pouvez également charger un jeu de données avec le constructeur de jeu de données `MeshFolder`, qui ne nécessite pas d'écrire un chargeur de données personnalisé. Cela rend `MeshFolder` utile pour créer et charger rapidement des jeux de données de maillages contenant plusieurs milliers de fichiers 3D. La structure de votre jeu de données de maillages doit ressembler à ceci :

```text
folder/train/diya/brass_diya.glb
folder/train/diya/clay_diya.ply
folder/train/diya/festival_diya.stl

folder/train/kalash/copper_kalash.glb
folder/train/kalash/pooja_kalash.ply
folder/train/kalash/temple_kalash.stl
```

Si le jeu de données suit la structure `MeshFolder`, vous pouvez le charger directement avec [load_dataset()](/docs/datasets/main/fr/package_reference/loading_methods#datasets.load_dataset) :

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")
```

Pour les jeux de données locaux, cela équivaut à passer manuellement `meshfolder` dans [load_dataset()](/docs/datasets/main/fr/package_reference/loading_methods#datasets.load_dataset) et le répertoire dans `data_dir` :

```py
>>> dataset = load_dataset("meshfolder", data_dir="/path/to/folder")
```

Vous pouvez ensuite accéder aux maillages en tant qu'objets `trimesh` :

```py
>>> dataset["train"][0]
{"mesh": <trimesh.Scene(len(geometry)=33)>, "label": 0}
```

Pour ignorer les informations du fichier de métadonnées, définissez `drop_metadata=True` dans [load_dataset()](/docs/datasets/main/fr/package_reference/loading_methods#datasets.load_dataset) :

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)
```

Si vous n'avez pas de fichier de métadonnées, `MeshFolder` infère automatiquement le nom de l'étiquette à partir du nom du répertoire. Si vous souhaitez supprimer les étiquettes créées automatiquement, définissez `drop_labels=True`. Dans ce cas, votre jeu de données ne contiendra qu'une colonne de maillage :

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)
```

Enfin, l'argument `filters` permet de charger uniquement un sous-ensemble du jeu de données, en fonction d'une condition sur l'étiquette ou les métadonnées. C'est particulièrement utile si les métadonnées sont au format Parquet, car ce format permet un filtrage rapide. Il est également recommandé d'utiliser cet argument avec `streaming=True`, car par défaut le jeu de données est entièrement téléchargé avant le filtrage.

```python
>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)
```

> [!TIP]
> Pour plus d'informations sur la création de votre propre jeu de données `MeshFolder`, consultez le guide [Créer un jeu de données de maillage](./mesh_dataset).

## Décodage en maillage

Par défaut, les maillages sont décodés séquentiellement en tant qu'objets `trimesh.Trimesh` ou `trimesh.Scene` lors de l'itération sur un jeu de données.

Si vous n’êtes pas intéressé par les maillages décodés en tant qu’objets `trimesh` et souhaitez plutôt accéder au chemin ou aux octets, vous pouvez désactiver le décodage :

```python
>>> dataset = dataset.decode(False)
```

Remarque : [IterableDataset.decode()](/docs/datasets/main/fr/package_reference/main_classes#datasets.IterableDataset.decode) n'est actuellement disponible que pour les jeux de données en flux.

