# معالجة بيانات الصور

يُظهر هذا الدليل طرقًا محددة لمعالجة مجموعات بيانات الصور. تعلّم كيفية:

- استخدم [map()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.map) مع مجموعة بيانات الصور.
- طبّق تحسينات البيانات على مجموعة بيانات باستخدام [set_transform()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.set_transform).

للاطلاع على دليل حول كيفية معالجة أي نوع من مجموعات البيانات، راجع دليل العملية العامة.

## خريطة

يمكن لدالة [map()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.map) تطبيق التحويلات على مجموعة بيانات كاملة.

على سبيل المثال، أنشئ دالة [`Resize`](https://pytorch.org/vision/stable/generated/torchvision.transforms.Resize.html) أساسية:

```py
>>> def transforms(examples):
...     examples["pixel_values"] = [image.convert("RGB").resize((100,100)) for image in examples["image"]]
...     return examples
```

الآن استخدم دالة [map()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.map) لتغيير حجم مجموعة البيانات بأكملها، واضبط `batched=True` لتسريع العملية من خلال قبول دفعات من الأمثلة. تُعيد التحويلة `pixel_values` كائن `PIL.Image` قابل للتخزين المؤقت:

```py
>>> dataset = dataset.map(transforms, remove_columns=["image"], batched=True)
>>> dataset[0]
{'label': 6,
 'pixel_values': <PIL.PngImagePlugin.PngImageFile image mode=RGB size=100x100 at 0x7F058237BB10>}
```

يوفر ملف الكاش وقتًا لأنك لا تحتاج إلى تنفيذ نفس التحويل مرتين. يُعدّ دالة [map()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.map) الأنسب للعمليات التي تُنفَّذ مرة واحدة فقط لكل تدريب - مثل تغيير حجم صورة - بدلاً من استخدامها للعمليات التي تُنفَّذ في كل حقبة، مثل عمليات زيادة البيانات.

يتطلب [map()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.map) بعض الذاكرة، لكن يمكنك تقليل متطلباته من الذاكرة باستخدام المعلمات التالية:

- يحدد [`batch_size`](./package_reference/main_classes#datasets.DatasetDict.map.batch_size) عدد الأمثلة التي تتم معالجتها في كل استدعاء لدالة التحويل.
- يحدد [`writer_batch_size`](./package_reference/main_classes#datasets.DatasetDict.map.writer_batch_size) عدد الأمثلة المعالجة التي تُحفظ في الذاكرة قبل تخزينها.

تتخذ قيمتا المعاملين الافتراضية 1000، وهو ما قد يكون مكلفاً إذا كنت تخزّن الصور. خفّض هاتين القيمتين لتقليل استهلاك الذاكرة عند استخدام [map()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.map).

## تطبيق التحويلات

🤗 يطبّق Datasets عمليات زيادة البيانات من أي مكتبة أو حزمة على مجموعة بياناتك. يمكن تطبيق التحويلات على دفعات البيانات بشكل فوري باستخدام [set_transform()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.set_transform)، مما يستهلك مساحة أقراص أقل.

> [!TIP]
> يستخدم المثال التالي [torchvision](https://pytorch.org/vision/stable/index.html)، لكن يمكنك بحرية استخدام مكتبات أخرى لزيادة البيانات مثل [Albumentations](https://albumentations.ai/docs/) و[Kornia](https://kornia.readthedocs.io/en/latest/) و[imgaug](https://imgaug.readthedocs.io/en/latest/).

على سبيل المثال، إذا كنت ترغب في تغيير خصائص اللون بصورة عشوائية:

```py
>>> from torchvision.transforms import Compose, ColorJitter, ToTensor

>>> jitter = Compose(
...     [
...          ColorJitter(brightness=0.25, contrast=0.25, saturation=0.25, hue=0.7),
...          ToTensor(),
...     ]
... )
```

أنشئ دالةً لتطبيق تحويل `ColorJitter`:

```py
>>> def transforms(examples):
...     examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]]
...     return examples
```

طبّق التحويل باستخدام دالة [set_transform()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.set_transform):

```py
>>> dataset.set_transform(transforms)
```

