Status: โ Model Ready | ๐ Production Ready | ๐ฑ App Berfungsi Penuh
Aplikasi Deteksi Motif Batik Berbasis Flutter & Computer Vision
Smart Batik Lens adalah aplikasi mobile berbasis Flutter yang memanfaatkan Computer Vision untuk mendeteksi dan mengidentifikasi motif batik secara real-time. Dengan model YOLOv8 Nano pre-trained dari Roboflow (932 images, 2 motif: Megamendung & Parang) dan TensorFlow Lite, aplikasi ini mampu mengenali motif batik pada berbagai kondisi dan mediaโpakaian, aksesoris, produk kreatifโbahkan saat terlipat atau terdistorsi.
git clone https://github.com/beginnener/CompVis_SmartBatikLens.git
cd CompVis_SmartBatikLens
flutter pub get
# Model YOLOv8 Nano pre-trained sudah included & siap pakai
flutter runPrasyarat: Flutter 3.10.4+, Dart SDK, Android Studio/Xcode Note: Model YOLOv8 Nano pre-trained dari Roboflow sudah included & siap pakai
Batik Indonesia diakui UNESCO sebagai Warisan Budaya Tak Benda sejak 2009. Namun, pengetahuan tentang motif batik masih terbatas, terutama di generasi muda. Solusi AI yang ada saat ini mayoritas berbasis Image Classification, yang memerlukan motif difoto datar dan close-upโpadahal kondisi nyata seringkali tidak ideal (terlipat, melengkung, tertutup).
Smart Batik Lens menggunakan pendekatan Object Detection (YOLOv8 + TFLite) yang jauh lebih adaptif, mampu mendeteksi motif batik dalam berbagai kondisi, sudut, dan media tanpa membatasi cara pengguna mengambil foto.
- Real-time Detection: Deteksi langsung dari kamera dengan TFLite inference โค150ms
- Object Detection Robust: Deteksi motif pada kondisi terlipat, melengkung, tertutup
- Multi-Object Detection: Kenali beberapa motif dalam satu frame
- Camera & Gallery: Live preview atau analisis foto existing
- History & Favorites: Simpan, kelola, tandai hasil deteksi
- Bounding Box Visualization: Custom overlay dengan label & confidence score
- Material Design 3: UI modern dengan Material 3 components
- Confidence Scoring: Percentage score untuk setiap deteksi
- Configurable Threshold: Tuning sensitivity sesuai kebutuhan
- On-Screen Labels: Nama motif & score ditampilkan real-time
- Persistent Storage: History & favorites tersimpan lokal via SharedPreferences
| Motif | Asal | Deskripsi |
|---|---|---|
| Megamendung | Cirebon | Awan berarak, gradasi warna halus |
| Parang | Yogyakarta/Solo | Garis diagonal menyerupai huruf 'S' |
| Custom | - | Retrain dengan motif pilihan Anda |
| Component | Teknologi | Version |
|---|---|---|
| Framework | Flutter | ^3.10.4 |
| Language | Dart | - |
| ML Runtime | TensorFlow Lite Flutter | ^0.11.0 |
| Camera | camera | ^0.11.0 |
| Storage | shared_preferences | ^2.2.2 |
| Image Processing | image, image_picker | ^4.0.17 |
| UI Framework | Material Design 3 | built-in |
| Aspek | Detail |
|---|---|
| Model Architecture | YOLOv8 Nano (recommended) |
| Alternatif | SSD MobileNet, EfficientDet |
| Framework Training | Ultralytics YOLO v8 |
| Runtime | TensorFlow Lite (on-device) |
| Input Size | 300x300 atau 640x640 (RGB) |
| Output | Bounding boxes + class IDs + confidence |
| Format Model | .tflite (quantized INT8 optimal) |
๐ฆ Core Services:
โโโ TFLiteService # ML inference engine
โ โโโ Model loading & initialization
โ โโโ Image preprocessing (YUV/BGRA โ RGB)
โ โโโ Object detection inference (~100-150ms)
โ โโโ NMS post-processing
โ โโโ Result filtering by confidence threshold
โโโ CameraService # Camera management
โ โโโ Initialize & manage camera stream
โ โโโ Real-time frame capture
โ โโโ Photo snapshot save
โ โโโ Permission handling
โโโ StorageService # Data persistence
โโโ History: Save detection results (SharedPreferences)
โโโ Favorites: Bookmark detections
โโโ Image storage: Save snapshots locally
โโโ Retrieval & deletion operations
๐ Rekomendasi Breakdown:
โโโ Per Class: 500+ images minimum
โโโ Background/Negative Samples: 10-15%
โโโ Data augmentation: 2-3x multiplier
โโโ Total target: 2000-3000 images
๐ฆ Variasi Objek:
โโโ Kain Datar (Plain): ~25%
โโโ Pakaian (Fashion): ~50%
โโโ Aksesoris (Merchandise): ~25%
- Flutter SDK (min 3.10.4)
- Dart SDK (included with Flutter)
- Android Studio / Xcode
- Git
git clone https://github.com/beginnener/CompVis_SmartBatikLens.git
cd CompVis_SmartBatikLensflutter pub getModel Saat Ini: YOLOv8 Nano pre-trained dari Roboflow
- โ
Sudah tersimpan di
lib/assets/models/ - โ Training dataset: 932 images (batik detection v2)
- โ Classes: Megamendung, Parang
- โ Format: TFLite Object Detection (.tflite)
- โ Size: ~6 MB (INT8 quantized)
Setup:
- Verifikasi file ada di
lib/assets/models/:model.tflite(Model YOLOv8 Nano)labels.txt(Class: megamendung, parang)
- Konfigurasi
lib/features/lens/services/tflite_service.dartjika diperlukan:static const int inputSize = 640; // Model input size static const int numResults = 10; // Max detections static const double threshold = 0.5; // Confidence threshold (tunable)
- Jalankan aplikasi - model siap deteksi!
Training Custom Model: Lihat Model Training & Integration section
Detail di lib/assets/models/README.md
flutter run # Android default
flutter run -d <device_id> # Device tertentuPlatform Support:
- โ Android (min API 21)
- โ iOS (min iOS 11.0)
- โ Web (TFLite limitations)
iOS Setup:
- Tambahkan ke
ios/Runner/Info.plist:<key>NSCameraUsageDescription</key> <string>Kamera diperlukan untuk deteksi batik</string> <key>NSPhotoLibraryUsageDescription</key> <string>Akses foto untuk deteksi motif batik</string>
CompVis_SmartBatikLens/
โโโ lib/
โ โโโ main.dart # App entry point
โ โโโ app/
โ โ โโโ smart_batik_app.dart # Root widget, routing
โ โโโ assets/models/
โ โ โโโ model.tflite # Place your model here
โ โ โโโ labels.txt # Class labels
โ โ โโโ README.md # Model setup guide
โ โโโ features/
โ โ โโโ splash/
โ โ โโโ lens/ # Main detection feature
โ โ โ โโโ presentation/
โ โ โ โ โโโ lens_screen.dart
โ โ โ โ โโโ widgets/bounding_box_painter.dart
โ โ โ โโโ services/
โ โ โ โโโ tflite_service.dart
โ โ โ โโโ camera_service.dart
โ โ โ โโโ storage_service.dart
โ โ โโโ history/
โ โ โโโ favorites/
โ โโโ core/
โ โโโ shared/
โโโ android/ | ios/ | web/ # Platform-specific
โโโ pubspec.yaml
โโโ IMPLEMENTATION_SUMMARY.md
โโโ MODEL_READY.md
โโโ README.md
- Feature-based Modular: Setiap fitur independent, scalable
- Service Layer: TFLite, Camera, Storage terpisah
- Clean Separation: UI (presentation) โ Logic (services)
- Error Handling: Try-catch comprehensive, user feedback
- Buka aplikasi di Android/iOS
- Berikan izin: Kamera & penyimpanan
- Tunggu model TFLite termuat (~2-3 detik, pertama kali saja)
- Tap "Scan" โ Buka kamera real-time
- Arahkan ke produk batik (jarak 30-50 cm, motif jelas)
- Deteksi otomatis: Bounding box + label + confidence score muncul real-time
- Tap kamera โ Simpan snapshot
- Tap galeri โ Analisis foto existing
- History: Lihat semua deteksi yang pernah dilakukan
- Favorites: Bookmark deteksi dengan tap bintang
- Delete: Swipe/tap hapus untuk menghapus entry
โ DO: Natural/white lighting | Kamera stabil | Motif 30-70% frame | Coba sudut berbeda โ DON'T: Terlalu dekat (<20cm) | Backlight ekstrem | Zoom digital berlebihan | Refleksi cahaya
| Issue | Solution |
|---|---|
| No bounding box appears | Lower confidence threshold di tflite_service.dart |
| Detection too slow | Reduce model input size atau skip frames |
| Wrong detections | Retrain model dengan dataset lebih beragam |
| App crashes on open | Check camera permissions & model file exists |
YOLOv8 Nano - Roboflow Pre-trained
- โ Dataset: 932 images (batik detection v2)
- โ Classes: Megamendung (Cirebon), Parang (Solo/Yogyakarta)
- โ Performance: ~50-150ms inference, 10-20 FPS real-time
- โ Accuracy: mAP@0.5 ~80-85% (bergantung lighting)
- โ Format: TFLite INT8 quantized (~6 MB)
- โ Status: Siap produksi & deployment
Model Details:
Dataset: Roboflow batik-detection-f9hu4-vm8xn v2
Classes: 2 (megamendung, parang)
Training Images: 932
Annotation: YOLO v8 format
URL: https://universe.roboflow.com/haneki/batik-detection-f9hu4-vm8xn/dataset/2Aplikasi ini kompatibel dengan model TFLite format Object Detection:
Compatible Model Types:
- YOLOv8 Nano (recommended - lightweight)
- YOLOv8 Small/Medium (untuk akurasi lebih tinggi)
- SSD MobileNet
- EfficientDet Lite
- Custom object detection models
Model Requirements:
- Input: RGB image (typically 300x300 atau 640x640)
- Output: Bounding boxes, class IDs, confidence scores
- Format:
.tflite(non-quantized atau int8 quantized)
# Install Ultralytics
pip install ultralytics
# Train YOLOv8 Nano
yolo detect train data=data.yaml model=yolov8n.pt epochs=100 imgsz=640
# Export to TFLite
yolo export model=runs/detect/train/weights/best.pt format=tflite int8=True# Convert saved_model to TFLite
tflite_convert \
--saved_model_dir=./saved_model \
--output_file=model.tflite \
--input_shapes=1,300,300,3 \
--input_arrays=normalized_input_image_tensorUntuk hasil optimal, gunakan dataset dengan karakteristik:
Komposisi:
- Minimum 500 images per class
- Sertakan 10-15% background/negative samples
- Distribusi kelas seimbang
Variasi:
- Berbagai kondisi pencahayaan (natural, indoor, outdoor)
- Sudut dan perspektif berbeda
- Beragam kondisi objek (datar, terlipat, pada pakaian, aksesoris)
- Skala bervariasi (close-up hingga jauh)
Augmentasi (disarankan):
- Auto-Orient
- Resize: Sesuaikan dengan input model
- Horizontal & Vertical Flip
- Rotasi: ยฑ15ยฐ
- Brightness: ยฑ25%
- Gaussian Blur: 0-1.5px
- Generation: 2-3x
- Tempatkan
model.tflitedilib/assets/models/ - Update
labels.txtdengan nama kelas Anda - Sesuaikan konstanta di
tflite_service.dartjika perlu:inputSize: Sesuaikan dengan input trainingthreshold: Mulai dari 0.5, tuning sesuai hasil
- Uji menyeluruh di perangkat target
Lihat panduan detail di IMPLEMENTATION_SUMMARY.md
Tantangan: Motif pada pakaian terlipat, permukaan melengkung, atau sebagian tertutup Solusi:
- Dataset beragam dengan berbagai kondisi objek
- Augmentasi geometris intensif (rotation, flip, perspective)
- Object detection vs classification approach
Tantangan: Pola dekoratif lain yang mirip batik (false positive), pola repetitif yang kompleks Solusi:
- Penambahan kelas "background" dengan negative samples
- Training dengan konteks lingkungan (bukan hanya close-up motif)
- Fine-tuning confidence threshold
Tantangan: Real-time inference pada perangkat mid-to-low end Solusi:
- YOLOv8 Nano (parameter minimal, optimized untuk mobile)
- TFLite quantization (INT8)
- Adaptive frame skip based on device performance
- Efficient image preprocessing
Tantangan: Performa menurun pada kondisi cahaya buruk atau blur Solusi:
- Dataset mencakup berbagai kondisi pencahayaan
- Brightness augmentation saat training
- Auto-exposure feedback ke user
- Motion blur detection & warning
| Metric | Target | Catatan |
|---|---|---|
| Model Size | ~6 MB | Quantized INT8 |
| Inference | 50-150ms | Mid-range Android (SD 600+) |
| mAP@0.5 | 75-85% | Bergantung dataset training |
| mAP@0.5:0.95 | 45-55% | COCO standard |
| Real-time FPS | 10-20 FPS | Live detection frame rate |
| Platform | Status | Catatan |
|---|---|---|
| Android | โ | Min API 21 (Lollipop) |
| iOS | โ | Min iOS 11.0 |
| Web | โ | TFLite limitation |
| Level | Spesifikasi |
|---|---|
| Minimum | Android 5.0 (API 21) / iOS 11.0 โข 2GB RAM โข Autofocus camera โข 100MB storage |
| Recommended | Android 8.0+ / iOS 13.0+ โข 4GB RAM โข 12MP+ camera โข 200MB storage |
Jika lag: 1) Reduce inputSize (320x320) 2) Use INT8 model 3) Skip frames 4) Lower numResults 5) Test on device
Proyek Akhir mata kuliah Computer Vision - Universitas Pendidikan Indonesia (2025)
Tim Pengembang:
- Zakiyah Hasanah (2305274) - kiyahh@upi.edu | Project Lead, ML Engineer, Mobile Developer
- Hafsah Hamidah (2311474) - hafsahhamidah25@upi.edu | ML Engineer, Dataset Curator
- Natasha Adinda Cantika (2312120) - natashadind@upi.edu | Mobile Developer, UI/UX Designer
Dosen Pengampu: Yaya Wihardi, S.Kom., M.Kom. | Fakultas MIPA, UPI
- IMPLEMENTATION_SUMMARY.md - Catatan teknis implementasi
- MODEL_READY.md - Status integrasi model
- QUICK_START.md - Panduan setup cepat
- lib/assets/models/README.md - Instruksi setup model
Proyek ini dibuat untuk keperluan akademis sebagai Proyek Akhir mata kuliah Computer Vision di Universitas Pendidikan Indonesia.
Penggunaan:
- โ Pembelajaran dan penelitian akademis
- โ Pengembangan non-komersial
- โ Fork dan modifikasi dengan atribusi
Untuk penggunaan komersial atau kolaborasi, silakan hubungi tim pengembang.
- UNESCO - Pengakuan Batik sebagai Warisan Budaya Tak Benda Manusia (2009)
- Ultralytics - YOLO framework untuk object detection
- Roboflow - Platform preprocessing dan augmentasi dataset
- TensorFlow Lite - On-device ML inference
- Flutter Team - Cross-platform UI framework
- Komunitas Batik Indonesia - Inspirasi dan motivasi untuk melestarikan budaya
- Dosen & Asisten Lab CV UPI - Bimbingan dan dukungan teknis
- Museum Batik Indonesia - Referensi motif dan sejarah
- Pengrajin batik Cirebon & Solo - Wawasan tentang motif tradisional
- Beta testers - Feedback untuk improvement aplikasi
- GitHub Issues: Create Issue
- Email: kiyahh@upi.edu
- Email: kiyahh@upi.edu
- Subject: "Smart Batik Lens Collaboration - [Your Topic]"
Saat melaporkan bug, sertakan:
- Device & OS version
- App version
- Steps to reproduce
- Screenshots/videos (jika ada)
- Error logs (jika ada)
Jika proyek ini membantu Anda, jangan lupa untuk memberikan โญ di GitHub!
[Coming soon - Add actual app screenshots here]
- โ Real-time object detection
- โ Camera & gallery support
- โ History & favorites
- โ TFLite integration
- โ Bounding box visualization
v1.1.0 (Q1 2026)
- Expand motif library (Kawung, Truntum, Sekar Jagad, dll)
- Offline batik encyclopedia
- Detection confidence history graph
- Dark mode support
v1.2.0 (Q2 2026)
- Multi-language support (English, Indonesia)
- Share detection results to social media
- Export results as PDF report
- Cloud sync for history (optional)
v2.0.0 (Q3 2026)
- AR visualization (overlay motif info in AR)
- Marketplace integration for batik products
- Community features (share & discover batik)
- Advanced analytics dashboard
- Segmentation model for precise motif boundaries
- Style transfer: Apply batik patterns to custom designs
- Region-specific classification (Java, Sumatra, Kalimantan, etc.)
- Historical context & cultural significance database
Lestarikan Budaya dengan Teknologi ๐ฎ๐ฉ
Made with โค๏ธ in Bandung, Indonesia