File size: 2,604 Bytes
a6eed2b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import os
from datasets import load_dataset
# PASTIKAN INI ADA: Kita tambahkan UnidentifiedImageError agar bisa ditangkap
from PIL import Image, UnidentifiedImageError
# Nama dataset dari Hugging Face Hub
dataset_name = "muhammadsalmanalfaridzi/Batik-Indonesia"
# Folder utama untuk menyimpan gambar JPG
output_dir = "Batik_Indonesia_JPG"
# Buat folder utama jika belum ada
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# Muat dataset (akan menggunakan cache jika sudah diunduh)
print("Memuat dataset...")
# Kita tambahkan parameter 'all' untuk split agar memuat semua data
dataset = load_dataset(dataset_name, split='train')
print("Dataset dimuat.")
# Ambil informasi nama kelas/label dari dataset
labels = dataset.features['label'].names
# Proses dan simpan setiap gambar dari split 'train'
print("Memulai proses ekstraksi gambar...")
skipped_files = 0
# Ganti loop untuk menggunakan 'dataset' langsung
for item in dataset:
# ---- INI BAGIAN PENTING (TRY...EXCEPT) ----
# Kita "coba" lakukan semua proses ini
try:
# Ambil gambar dan labelnya
gambar: Image.Image = item['image']
label_index = item['label']
# Dapatkan nama label (contoh: "Batik Parang")
label_name = labels[label_index]
# Buat folder untuk kelas ini jika belum ada
class_dir = os.path.join(output_dir, label_name)
if not os.path.exists(class_dir):
os.makedirs(class_dir)
# Ambil nama file asli (jika tersedia) atau buat nama file unik
num_existing_files = len(os.listdir(class_dir))
file_name = f"{label_name.replace(' ', '_')}_{num_existing_files + 1}.jpg"
# Gabungkan path untuk menyimpan
save_path = os.path.join(class_dir, file_name)
# Simpan gambar
if gambar.mode != 'RGB':
gambar = gambar.convert('RGB')
gambar.save(save_path)
# Jika terjadi error "UnidentifiedImageError" (file rusak),
# jalankan kode di bawah ini alih-alih crash.
except UnidentifiedImageError:
skipped_files += 1
# Kita bisa cetak file yang rusak jika mau
# print(f"WARNING: 1 file gambar terdeteksi rusak atau tidak valid. Melewati...")
# Tambahkan exception umum untuk error lain
except Exception as e:
skipped_files += 1
print(f"WARNING: Terjadi error lain ({e}). Melewati file...")
# -----------------------------------------------
print(f"Ekstraksi selesai!")
print(f"Total file yang dilewati (rusak/error): {skipped_files}") |