# Загрузка данных сетки

Наборы данных Mesh имеют столбцы типа [Mesh](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Mesh), которые содержат объекты `trimesh.Trimesh` или `trimesh.Scene`.

> [!TIP]
> Для работы с наборами данных мешей необходимо установить зависимость `mesh`. Ознакомьтесь с руководством по [установке](./installation#mesh), чтобы узнать, как это сделать.

При загрузке набора данных с мешами и обращении к столбцу мешей они декодируются с помощью `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)>
```

В зависимости от содержимого файла `trimesh` может вернуть объект `trimesh.Trimesh` или объект `trimesh.Scene`.

> [!WARNING]
> Обращайтесь к набору данных мешей сначала по индексу строки, а затем по столбцу `mesh` — `dataset[0]["mesh"]` — чтобы избежать декодирования всех файлов мешей в наборе данных. В противном случае, если набор данных большой, этот процесс может быть медленным и требовать много времени.

Справочник по загрузке любого типа набора данных см. в общем руководстве по загрузке.

## Локальные файлы

Вы можете загрузить набор данных из путей к файлам мешей. Используйте функцию [cast_column()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.cast_column), чтобы принять столбец с путями к файлам мешей и декодировать его в объект `trimesh` с фичей [Mesh](/docs/datasets/v5.2.0/ru/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)>
```

Если вам нужно загрузить только базовый путь или байты набора данных меша без декодирования объекта меша, установите `decode=False` в фиче [Mesh](/docs/datasets/v5.2.0/ru/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'}
```

Функция [Mesh](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Mesh) поддерживает файлы `.glb`, `.ply` и `.stl`. В зависимости от содержимого файла `trimesh` может вернуть объект `trimesh.Trimesh` или объект `trimesh.Scene`.

## MeshFolder

Также можно загрузить набор данных с помощью конструктора `MeshFolder`, который не требует написания собственного загрузчика данных. Это делает `MeshFolder` полезным для быстрого создания и загрузки наборов данных с мешами, содержащих несколько тысяч 3D-файлов. Структура вашего набора данных с мешами должна выглядеть следующим образом:

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

Если набор данных следует структуре `MeshFolder`, то его можно загрузить напрямую с помощью [load_dataset()](/docs/datasets/v5.2.0/ru/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")
```

Для локальных наборов данных это эквивалентно ручной передаче `meshfolder` в [load_dataset()](/docs/datasets/v5.2.0/ru/package_reference/loading_methods#datasets.load_dataset) и указанию каталога в `data_dir`:

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

Затем вы можете обращаться к сеткам как к объектам `trimesh`:

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

Чтобы игнорировать информацию в файле метаданных, установите `drop_metadata=True` в [load_dataset()](/docs/datasets/v5.2.0/ru/package_reference/loading_methods#datasets.load_dataset):

```py
>>> from datasets import load_dataset

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

Если у вас нет файла метаданных, `MeshFolder` автоматически определяет имя метки по имени каталога. Если вы хотите отбросить автоматически созданные метки, установите `drop_labels=True`. В этом случае ваш набор данных будет содержать только столбец с мешами:

```py
>>> from datasets import load_dataset

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

Наконец, аргумент `filters` позволяет загрузить только часть набора данных на основе условия, наложенного на метку или метаданные. Это особенно полезно, если метаданные хранятся в формате Parquet, поскольку этот формат обеспечивает быструю фильтрацию. Также рекомендуется использовать этот аргумент вместе с `streaming=True`, так как по умолчанию набор данных полностью загружается до применения фильтрации.

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

> [!TIP]
> Для получения дополнительной информации о создании собственного набора данных `MeshFolder` ознакомьтесь с руководством [Создание набора данных мешей](./mesh_dataset).

## Декодирование в сетке

По умолчанию при итерации по набору данных меши декодируются последовательно в объекты `trimesh.Trimesh` или `trimesh.Scene`.

Если вам не интересны сетки, декодированные в объекты `trimesh`, и вы хотите получить доступ к пути или байтам, вы можете отключить декодирование:

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

Примечание: [IterableDataset.decode()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.IterableDataset.decode) в настоящее время доступен только для потоковых наборов данных.

