# Görsel verilerini yükle

Görsel veri setleri, PIL nesneleri içeren [Image](/docs/datasets/v5.2.0/tr/package_reference/main_classes#datasets.Image) türünde sütunlara sahiptir.

> [!TIP]
> Görsel veri setleriyle çalışmak için `vision` bağımlılığının yüklü olması gerekir. Nasıl yükleneceğini öğrenmek için [kurulum](./installation#vision) kılavuzuna göz atın.

Bir görüntü veri seti yüklediğinizde ve görüntü sütununu çağırdığınızda, görüntüler PIL Images olarak çözümlenir:

```py
>>> from datasets import load_dataset, Image

>>> dataset = load_dataset("AI-Lab-Makerere/beans", split="train")
>>> dataset[0]["image"]
```

> [!WARNING]
> Görüntü veri setine, veri setindeki tüm görüntü nesnelerini çözmek ve yeniden örneklemek zorunda kalmamak için önce satır dizinine, ardından `image` sütununa erişin - `dataset[0]["image"]` - . Aksi takdirde, büyük bir veri setiniz varsa bu yavaş ve zaman alıcı bir işlem olabilir.

Herhangi bir tür veri setinin nasıl yükleneceğine dair bir kılavuz için genel yükleme kılavuzuna göz atın.

## Yerel dosyalar

Bir veri setini görüntü yolundan yükleyebilirsiniz. [cast_column()](/docs/datasets/v5.2.0/tr/package_reference/main_classes#datasets.Dataset.cast_column) fonksiyonunu kullanarak görüntü dosya yollarından oluşan bir sütunu kabul edin ve [Image](/docs/datasets/v5.2.0/tr/package_reference/main_classes#datasets.Image) özelliği ile bunu bir PIL görüntüsüne dönüştürün:
```py
>>> from datasets import Dataset, Image

>>> dataset = Dataset.from_dict({"image": ["path/to/image_1", "path/to/image_2", ..., "path/to/image_n"]}).cast_column("image", Image())
>>> dataset[0]["image"]
<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=1200x215 at 0x15E6D7160>]
```

Görsel nesnesini çözmek yerine yalnızca görsel veri setinin altta yatan yolunu yüklemek istiyorsanız, [Image](/docs/datasets/v5.2.0/tr/package_reference/main_classes#datasets.Image) özelliğinde `decode=False` olarak ayarlayın:

```py
>>> dataset = load_dataset("AI-Lab-Makerere/beans", split="train").cast_column("image", Image(decode=False))
>>> dataset[0]["image"]
{'bytes': None,
 'path': '/root/.cache/huggingface/datasets/downloads/extracted/b0a21163f78769a2cf11f58dfc767fb458fc7cea5c05dccc0144a2c0f0bc1292/train/bean_rust/bean_rust_train.29.jpg'}
```

## ImageFolder

Özel bir dataloader yazma gerektirmeyen bir `ImageFolder` veri seti oluşturucusu ile bir veri seti de yükleyebilirsiniz. Bu, `ImageFolder`'ın farklı görü görevleri için birkaç bin görüntü içeren görüntü veri setlerini hızlı bir şekilde oluşturmak ve yüklemek için ideal olmasını sağlar. Görüntü veri seti yapınız şu şekilde olmalıdır:

```
folder/train/dog/golden_retriever.png
folder/train/dog/german_shepherd.png
folder/train/dog/chihuahua.png

folder/train/cat/maine_coon.png
folder/train/cat/bengal.png
folder/train/cat/birman.png
```

Alternatif olarak, örneğin şu tür bir meta veriye sahip olmalıdır:

```
folder/train/metadata.csv
folder/train/0001.png
folder/train/0002.png
folder/train/0003.png
```

Veri kümesi `ImageFolder` yapısını izliyorsa, doğrudan [load_dataset()](/docs/datasets/v5.2.0/tr/package_reference/loading_methods#datasets.load_dataset) ile yükleyebilirsiniz:

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")
```

Yerel veri kümeleri için bu, [load_dataset()](/docs/datasets/v5.2.0/tr/package_reference/loading_methods#datasets.load_dataset) içinde `imagefolder`'ı ve `data_dir` içinde dizini manuel olarak geçmeye eşdeğerdir:

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

Ardından videolara `PIL.Image` nesneleri olarak erişebilirsiniz:

```
>>> dataset["train"][0]
{"image": <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=1200x215 at 0x15E6D7160>, "label": 0}

>>> dataset["train"][-1]
{"image": <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=1200x215 at 0x15E8DAD30>, "label": 1}
```

Üstveri dosyasındaki bilgileri yok saymak için [load_dataset()](/docs/datasets/v5.2.0/tr/package_reference/loading_methods#datasets.load_dataset) içinde `drop_metadata=True` değerini ayarlayın:

```py
>>> from datasets import load_dataset

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

Bir metadata dosyanız yoksa, `ImageFolder` etiket adını otomatik olarak dizin adından çıkarır. Otomatik olarak oluşturulan etiketleri kaldırmak istiyorsanız, `drop_labels=True` değerini ayarlayın. Bu durumda veri setiniz yalnızca bir görüntü sütunu içerecektir:

```py
>>> from datasets import load_dataset

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

Son olarak `filters` argümanı, etikete veya meta verilerdeki bir koşula dayalı olarak veri setinin yalnızca bir alt kümesini yüklemenizi sağlar. Bu, meta veriler Parquet formatındaysa özellikle faydalıdır, çünkü bu format hızlı filtrelemeyi mümkün kılar. Varsayılan olarak veri seti filtrelemeden önce tamamen indirildiği için, bu argümanı `streaming=True` ile kullanmanız da önerilir.

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

> [!TIP]
> Kendi `ImageFolder` veri setinizi oluşturma hakkında daha fazla bilgi için [Görsel veri seti oluşturma](./image_dataset) kılavuzuna göz atın.

## WebDataset

[WebDataset](https://github.com/webdataset/webdataset) biçimi, TAR arşivlerinden oluşan bir klasöre dayanır ve büyük görüntü veri kümeleri için uygundur. Boyutları nedeniyle WebDatasets genellikle akış modunda yüklenir (`streaming=True` kullanılarak).

Bir WebDataset'i şu şekilde yükleyebilirsiniz:

```python
>>> from datasets import load_dataset

>>> dataset = load_dataset("webdataset", data_dir="/path/to/folder", streaming=True)
```

## Lance

[Lance](https://lance.org), açık kaynaklı çok modlu bir lakehouse tablo biçimidir. Lance tabloları, tabular verilerinizin yanı sıra metin ve skaler değerlerin yanı sıra görüntü, ses ve video gibi büyük ikili nesneleri (blob) da yerel olarak depolayabilir.

Lance, metadata ve görüntü blob'larını tek bir yerde bir arada tutarken, görüntü baytlarını yüklemeye gerek kalmadan yalnızca ilgilendiğiniz metadata sütunlarını verimli bir şekilde taramanıza olanak tanır. Hazır olduğunuzda, satırların küçük bir alt kümesini (görüntü blob'ları dahil) alabilir ve bunları doğrudan yerel dosya sisteminizdeki dosyalara yazabilirsiniz.

```python
from datasets import load_dataset

# Return as a Hugging Face dataset
ds = load_dataset(
    "lance-format/laion-1m",
    split="train",
    streaming=True
)

dir_name = "laion_samples"
Path(dir_name).mkdir(exist_ok=True)

for idx, row in enumerate(ds.take(3)):
    with open(f"{dir_name}/{idx}.jpg", "wb") as f:
        f.write(row["image"])
```

Bu örnekte, `image` sütunu kodlanmış görüntü baytlarını içerdiğinden bunları doğrudan `.jpg` dosyalarına yazabilirsiniz.

> [!NOTE] `datasets` API'si şu anda işlemleri Lance tablosuna aktarmıyor, bu nedenle daha büyük veri kümelerinde yavaş olabilir. Şimdilik, `lance` Python paketini doğrudan kullanarak çok daha iyi performans elde edersiniz. Kullanım örnekleri için [Hub'daki](https://huggingface.co/docs/datasets-lance) belgelere bakın.

## Görsel kod çözme

Varsayılan olarak, bir veri setinde gezinirken görüntüler `PIL.Images` olarak sıralı biçimde çözümlenir. Ancak çoklu iş parçacıklı (multithreaded) çözümlenme kullanılarak veri setinin hızı önemli ölçüde artırılabilir:

```python
>>> import os
>>> num_threads = num_threads = min(32, (os.cpu_count() or 1) + 4)
>>> dataset = dataset.decode(num_threads=num_threads)
>>> for example in dataset:  # up to 20 times faster !
...     ...
```

Çok iş parçacıklı işlemi `num_threads` parametresiyle etkinleştirebilirsiniz. Bu, uzaktan veri akışını hızlandırmak için özellikle faydalıdır. Ancak hızlı disklerdeki yerel veriler için `num_threads=0` değerinden daha yavaş olabilir.

`PIL.Images` olarak çözümlenen görsellerle ilgilenmiyorsanız ve bunun yerine yol/baytlara erişmek istiyorsanız, çözümlenmeyi devre dışı bırakabilirsiniz:

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

Not: [IterableDataset.decode()](/docs/datasets/v5.2.0/tr/package_reference/main_classes#datasets.IterableDataset.decode) şu anda yalnızca akış veri setleri için kullanılabilir.

