# تحميل بيانات الشبكة

تحتوي مجموعات البيانات من نوع الشبكة على أعمدة من نوع [Mesh](/docs/datasets/main/ar/package_reference/main_classes#datasets.Mesh)، والتي تتضمن كائنات `trimesh.Trimesh` أو `trimesh.Scene`.

> [!TIP]
> للتعامل مع مجموعات بيانات الشبكات (mesh datasets)، يجب أن يكون لديك اعتمادية `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/main/ar/package_reference/main_classes#datasets.Dataset.cast_column) لقبول عمود من مسارات ملفات الشبكات، وفكّ ترميزه إلى كائن `trimesh` باستخدام ميزة [Mesh](/docs/datasets/main/ar/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/main/ar/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/main/ar/package_reference/main_classes#datasets.Mesh) ملفات `.glb` و`.ply` و`.stl`. اعتماداً على محتوى الملف، قد يعيد `trimesh` كائن `trimesh.Trimesh` أو كائن `trimesh.Scene`.

## MeshFolder

يمكنك أيضًا تحميل مجموعة بيانات باستخدام منشئ مجموعات البيانات `MeshFolder` الذي لا يتطلب كتابة مُحمِّل بيانات مخصص. وهذا يجعل `MeshFolder` مفيدًا لإنشاء وتحميل مجموعات بيانات شبكية بسرعة تحتوي على عدة آلاف من الملفات ثلاثية الأبعاد. يجب أن يبدو هيكل مجموعة البيانات الشبكية لديك على النحو التالي:

```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/main/ar/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/main/ar/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/main/ar/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).

## فك ترميز الشبكة

بشكل افتراضي، يتم فك ترميز الشبكات (meshes) بشكل تسلسلي ككائنات `trimesh.Trimesh` أو `trimesh.Scene` عند تكرار مجموعة البيانات.

إذا لم تكن مهتمًا بالشبكات المُفكَّكة ككائنات `trimesh` وأردت الوصول إلى المسار أو البايتات بدلاً من ذلك، يمكنك تعطيل فك الترميز:

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

ملاحظة: [IterableDataset.decode()](/docs/datasets/main/ar/package_reference/main_classes#datasets.IterableDataset.decode) متاح حاليًا فقط لمجموعات البيانات التي يتم بثها.

