# Cargar datos de malla

Los conjuntos de datos de mallas tienen columnas de tipo [Mesh](/docs/datasets/v5.2.0/es/package_reference/main_classes#datasets.Mesh), que contienen objetos `trimesh.Trimesh` o `trimesh.Scene`.

> [!TIP]
> Para trabajar con conjuntos de datos de mallas, necesitas tener instalada la dependencia `mesh`. Consulta la guía de [instalación](./installation#mesh) para aprender a instalarla.

Cuando cargas un conjunto de datos de mallas y llamas a la columna de mallas, las mallas se decodifican con `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)>
```

Según el contenido del archivo, `trimesh` puede devolver un objeto `trimesh.Trimesh` o un objeto `trimesh.Scene`.

> [!WARNING]
> Índice en un conjunto de datos de malla usando primero el índice de fila y luego la columna `mesh` - `dataset[0]["mesh"]` - para evitar decodificar todos los archivos de malla del conjunto de datos. De lo contrario, este puede ser un proceso lento y que consume mucho tiempo si se tiene un conjunto de datos grande.

Para una guía sobre cómo cargar cualquier tipo de conjunto de datos, consulte la guía general de carga.

## Archivos locales

Puedes cargar un conjunto de datos desde rutas de mallas. Utiliza la función [cast_column()](/docs/datasets/v5.2.0/es/package_reference/main_classes#datasets.Dataset.cast_column) para aceptar una columna de rutas de archivos de malla y decodificarla en un objeto `trimesh` con la función [Mesh](/docs/datasets/v5.2.0/es/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 solo desea cargar la ruta o los bytes subyacentes del conjunto de datos de malla sin decodificar el objeto de malla, establezca `decode=False` en la función [Mesh](/docs/datasets/v5.2.0/es/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 función [Mesh](/docs/datasets/v5.2.0/es/package_reference/main_classes#datasets.Mesh) admite archivos `.glb`, `.ply` y `.stl`. Dependiendo del contenido del archivo, `trimesh` puede devolver un objeto `trimesh.Trimesh` o un objeto `trimesh.Scene`.

## MeshFolder

También puede cargar un conjunto de datos con el creador de conjuntos de datos `MeshFolder`, que no requiere escribir un dataloader personalizado. Esto hace que `MeshFolder` sea útil para crear y cargar rápidamente conjuntos de datos de mallas con varios miles de archivos 3D. La estructura de su conjunto de datos de mallas debe ser así:

```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 el conjunto de datos sigue la estructura `MeshFolder`, puede cargarlo directamente con [load_dataset()](/docs/datasets/v5.2.0/es/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")
```

Para conjuntos de datos locales, esto es equivalente a pasar `meshfolder` manualmente en [load_dataset()](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.load_dataset) y el directorio en `data_dir`:

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

Luego puedes acceder a las mallas como objetos `trimesh`:

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

Para ignorar la información en el archivo de metadatos, establezca `drop_metadata=True` en [load_dataset()](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.load_dataset):

```py
>>> from datasets import load_dataset

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

Si no tiene un archivo de metadatos, `MeshFolder` infiere automáticamente el nombre de la etiqueta a partir del nombre del directorio. Si desea eliminar las etiquetas creadas automáticamente, establezca `drop_labels=True`. En este caso, su conjunto de datos solo contendrá una columna de malla:

```py
>>> from datasets import load_dataset

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

Por último, el argumento `filters` permite cargar solo un subconjunto del conjunto de datos, basado en una condición sobre la etiqueta o los metadatos. Esto es especialmente útil si los metadatos están en formato Parquet, ya que este formato permite un filtrado rápido. También se recomienda usar este argumento con `streaming=True`, porque por defecto el conjunto de datos se descarga por completo antes de aplicar el filtrado.

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

> [!TIP]
> Para obtener más información sobre la creación de tu propio conjunto de datos `MeshFolder`, consulta la guía [Create a mesh dataset](./mesh_dataset).

## Decodificación en malla

Por defecto, las mallas se decodifican de forma secuencial como objetos `trimesh.Trimesh` o `trimesh.Scene` cuando se itera sobre un conjunto de datos.

Si no le interesan las mallas decodificadas como objetos `trimesh` y prefiere acceder a la ruta o a los bytes, puede desactivar la decodificación:

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

Nota: [IterableDataset.decode()](/docs/datasets/v5.2.0/es/package_reference/main_classes#datasets.IterableDataset.decode) solo está disponible actualmente para conjuntos de datos en streaming.

