# Carregar dados de malha

Os conjuntos de dados de malhas possuem colunas do tipo [Mesh](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Mesh), que contêm objetos `trimesh.Trimesh` ou `trimesh.Scene`.

> [!TIP]
> Para trabalhar com conjuntos de dados de malha, é necessário ter a dependência `mesh` instalada. Consulte o guia de [instalação](./installation#mesh) para aprender como instalá-la.

Ao carregar um conjunto de dados de malhas e chamar a coluna de malhas, as malhas são decodificadas com `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)>
```

Dependendo do conteúdo do arquivo, o `trimesh` pode retornar um objeto `trimesh.Trimesh` ou um objeto `trimesh.Scene`.

> [!WARNING]
> Acesse um conjunto de dados de malha usando primeiro o índice da linha e depois a coluna `mesh` - `dataset[0]["mesh"]` - para evitar a decodificação de todos os arquivos de malha no conjunto de dados. Caso contrário, isso pode ser um processo lento e demorado se você tiver um conjunto de dados grande.

Para um guia sobre como carregar qualquer tipo de conjunto de dados, consulte o guia de carregamento geral.

## Arquivos locais

Você pode carregar um conjunto de dados a partir de caminhos de malhas. Use a função [cast_column()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.cast_column) para aceitar uma coluna de caminhos de arquivos de malha e decodificá-la em um objeto `trimesh` com o recurso [Mesh](/docs/datasets/v5.2.0/pt/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)>
```

Se você deseja apenas carregar o caminho subjacente ou os bytes do conjunto de dados da malha sem decodificar o objeto da malha, defina `decode=False` no recurso [Mesh](/docs/datasets/v5.2.0/pt/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'}
```

O recurso [Mesh](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Mesh) suporta arquivos `.glb`, `.ply` e `.stl`. Dependendo do conteúdo do arquivo, o `trimesh` pode retornar um objeto `trimesh.Trimesh` ou um objeto `trimesh.Scene`.

## MeshFolder

Você também pode carregar um conjunto de dados com um construtor de conjunto de dados `MeshFolder` que não requer a escrita de um dataloader personalizado. Isso torna o `MeshFolder` útil para criar e carregar rapidamente conjuntos de dados de malhas com vários milhares de arquivos 3D. A estrutura do seu conjunto de dados de malhas deve ser assim:

```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
```

Se o conjunto de dados seguir a estrutura `MeshFolder`, você pode carregá-lo diretamente com [load_dataset()](/docs/datasets/v5.2.0/pt/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 dados locais, isso é equivalente a passar `meshfolder` manualmente em [load_dataset()](/docs/datasets/v5.2.0/pt/package_reference/loading_methods#datasets.load_dataset) e o diretório em `data_dir`:

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

Em seguida, você pode acessar as malhas como objetos `trimesh`:

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

Para ignorar as informações no arquivo de metadados, defina `drop_metadata=True` em [load_dataset()](/docs/datasets/v5.2.0/pt/package_reference/loading_methods#datasets.load_dataset):

```py
>>> from datasets import load_dataset

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

Se você não tiver um arquivo de metadados, o `MeshFolder` infere automaticamente o nome do rótulo a partir do nome do diretório. Se você quiser descartar os rótulos criados automaticamente, defina `drop_labels=True`. Nesse caso, seu conjunto de dados conterá apenas uma coluna de malha:

```py
>>> from datasets import load_dataset

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

Por fim, o argumento `filters` permite carregar apenas um subconjunto do conjunto de dados, com base em uma condição sobre o rótulo ou os metadados. Isso é especialmente útil se os metadados estiverem em formato Parquet, pois esse formato permite filtragem rápida. Também é recomendado usar este argumento com `streaming=True`, porque, por padrão, o conjunto de dados é totalmente baixado antes da filtragem.

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

> [!TIP]
> Para mais informações sobre a criação do seu próprio conjunto de dados `MeshFolder`, consulte o guia [Criar um conjunto de dados de malha](./mesh_dataset).

## Decodificação em malha

Por padrão, as malhas são decodificadas sequencialmente como objetos `trimesh.Trimesh` ou `trimesh.Scene` quando você itera sobre um conjunto de dados.

Se você não se interessa pelas malhas decodificadas como objetos `trimesh` e deseja acessar o caminho ou os bytes em vez disso, você pode desabilitar a decodificação:

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

Observação: [IterableDataset.decode()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.IterableDataset.decode) está disponível apenas para datasets em streaming no momento.

