Proyek ini bertujuan untuk melakukan klasifikasi gambar motif batik menggunakan arsitektur MobileNetV2 sebagai feature extractor dan lapisan tambahan untuk prediksi multi-kelas. Semua eksperimen, parameter, dan metrik dicatat menggunakan MLflow untuk memudahkan pelacakan dan reproduksi.
- Membangun model deep learning untuk klasifikasi motif batik otomatis
- Melestarikan warisan budaya melalui teknologi AI
- Membuat sistem yang mudah diakses via web interface
- Dokumentasi reproducible dengan MLflow\
- Menerapkan alur MLOps end-to-end (deployment, inference, data logging)
Model dapat mengklasifikasikan 14 motif batik tradisional Indonesia:
| No | Nama Motif | Asal Daerah | Karakteristik |
|---|---|---|---|
| 1 | Barong | Bali | Motif mitologis berupa singa dengan mahkota |
| 2 | Celup | Berbagai daerah | Teknik pewarnaan dengan pencelupan |
| 3 | Cendrawasih | Papua | Burung cendrawasih dengan warna cerah |
| 4 | Ceplok | Jawa Tengah | Motif geometris berulang seperti bunga |
| 5 | Dayak | Kalimantan | Pola etnik dengan simbol budaya Dayak |
| 6 | Insang | Kalimantan | Motif seperti insang ikan dengan pola lengkung |
| 7 | Kawung | Jawa | Pola geometris bulatan seperti buah kawung |
| 8 | Lontara | Sulawesi Selatan | Berbasis aksara Lontara dengan pola simetris |
| 9 | Mataketeran | Sumbawa | Mata ketengan dengan pola detail rumit |
| 10 | Megamendung | Cirebon | Awan berwarna cerah dengan gradasi warna |
| 11 | Ondel-ondel | Betawi | Boneka besar Betami dengan wajah khas |
| 12 | Parang | Jawa Tengah | Motif diagonal seperti pedang (parang) |
| 13 | Pring | Yogyakarta | Motif bambu dengan pola vertikal |
| 14 | Rumah Minang | Sumatera Barat | Pola arsitektur rumah gadang dengan atap khas |
- Model: MobileNetV2 dengan lapisan GlobalAveragePooling, Dropout, dan Dense untuk klasifikasi.
- Pelacakan Eksperimen: MLflow digunakan untuk mencatat parameter (learning rate, jumlah epoch), metrik per epoch (akurasi dan loss), serta menyimpan model sebagai artifact.
- Pipeline Data: Menggunakan generator berbasis
ImageDataGeneratoruntuk normalisasi dan manajemen batch dataset. - Evaluasi Lengkap: Termasuk confusion matrix, classification report, dan pengukuran waktu inferensi rata-rata per sampel.
- Penyimpanan Model: Format
.kerasdan weights.h5untuk kemudahan deployment dan checkpointing.
1. Data Collection
β
2. Preprocessing (resize 224x224, normalization)
β
3. Data Splitting (Train 80%, Validation 15%, Test 5%)
β
4. Model Building (MobileNetV2 base + custom layers)
β
5. Model Training (with MLflow tracking)
β
6. Model Evaluation & Validation
β
7. Model Export (.h5 format)
β
8. Deployment (Hugging Face Spaces)
.
ββ README.md
ββ Kode/
β ββ klasifikasi_batik.ipynb
ββ src/
β ββ app.py
ββ requirements.txt
ββ artifacts/
ββ best_model_MobileNetV2.h5
ββ model_batik_mobilenetv2.keras
ββ mlruns/
Dataset tersedia di Kaggle Dataset: (https://www.kaggle.com/datasets/buyungsaloka/motif-batik-dataset)
- Total Gambar: ~1,400 gambar (14 kelas Γ ~100 gambar/kelas)
- Format: JPG/PNG
- Resolusi: Bervariasi (di-resize ke 224Γ224 untuk training)
Struktur dataset:
archive/
ββ train/
β ββ kelas_1/
β ββ kelas_2/
β ββ ...
ββ val/
β ββ kelas_1/
β ββ kelas_2/
β ββ ...
ββ test/
ββ kelas_1/
ββ kelas_2/
ββ ...
model_MobileNetV2.save("model_batik_mobilenetv2.keras")
FILENAME = "model_batik_mobilenetv2.weights.h5"
model_MobileNetV2.save_weights(FILENAME)
!pip install huggingface-hub -q
from huggingface_hub import notebook_login
notebook_login() # Masukkan Access Token Hugging Face
REPO_ID = "Nabiilah-Putri/Batik_Classification"
MODEL_FILENAME = "model_batik_mobilenetv2.keras"
CLASSES_FILENAME = "class_names.json"
model_MobileNetV2.save(MODEL_FILENAME)
print(f"Model disimpan sebagai: {MODEL_FILENAME}")
class_indices = test_generator.class_indices
index_to_class = {v: k for k, v in class_indices.items()}
with open(CLASSES_FILENAME, "w") as f:
json.dump(index_to_class, f)
print(f"Daftar kelas disimpan sebagai: {CLASSES_FILENAME}")
create_repo(REPO_ID, exist_ok=True, repo_type="model")
api = HfApi()
api.upload_file(
path_or_fileobj=MODEL_FILENAME,
path_in_repo=MODEL_FILENAME,
repo_id=REPO_ID,
repo_type="model",
)
print(f"File {MODEL_FILENAME} berhasil diunggah.")
api.upload_file(
path_or_fileobj=CLASSES_FILENAME,
path_in_repo=CLASSES_FILENAME,
repo_id=REPO_ID,
repo_type="model",
)
print(f"File {CLASSES_FILENAME} berhasil diunggah.")
%%writefile requirements.txt
tensorflow
gradio
numpy
pillow
huggingface-hub
π https://huggingface.co/spaces/Nabiilah-Putri/Klasifikasi-Motif-Batik
Tidak diperlukan instalasi atau konfigurasi tambahan bagi pengguna.
1. Unggah gambar motif batik Aplikasi mendukung beberapa metode unggah gambar:
- Upload File Mengunggah gambar dari perangkat (format .jpg, .jpeg, .png)
- Kamera / Webcam Mengambil foto motif batik secara langsung menggunakan kamera
- Paste Gambar Menempelkan gambar hasil salin (copyβpaste) langsung ke area unggah
2. Klik tombol Submit
3. Sistem akan menampilkan:
- Motif batik terdeteksi
- Tingkat kepercayaan model
- Top-5 probabilitas kelas
- Penjelasan singkat motif batik
- Gambar diproses (resize 224 Γ 224 dan normalisasi)
- Inferensi dilakukan menggunakan model MobileNetV2
- Hasil probabilitas dipetakan ke kelas motif batik
- Hasil prediksi dan penjelasan motif ditampilkan secara real-time ke pengguna
- Model diambil otomatis dari Hugging Face Model Hub
- Inferensi dijalankan langsung di server Hugging Face
- Setiap gambar pengguna dicatat dan diunggah ke Hugging Face Dataset sebagai bagian dari penerapan MLOps (continuous data collection)
- Python 3.8+
- TensorFlow/Keras
- scikit-learn
- pandas, numpy, matplotlib, seaborn
- mlflow
- Hugging Face (Spaces, Model Hub, Dataset Hub)
Kelompok 11 β MLOps RB :
| Nama Anggota | Peran / Kontribusi |
|---|---|
| Nabiilah Putri Karnaia | Integrasi Model ke HF Hub, Arsitektur App.py & Gradio UI |
| Azizah Kusumah Putri | Dataset Preparation & Training MobileNetV2 |
| Amalia Melani Putri | Augmentasi & Preprocessing |
| Fayyaza Aqila Syafitri Achjar | Optimasi Parameter, Implementasi MLFlow & Analisis Metrik Evaluasi |
