Skip to content

Repository files navigation

Smart Batik Lens 🎨

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.


⚡ Quick Start

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 run

Prasyarat: Flutter 3.10.4+, Dart SDK, Android Studio/Xcode Note: Model YOLOv8 Nano pre-trained dari Roboflow sudah included & siap pakai


🎯 Latar Belakang

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.


✨ Fitur Utama (v1.0.0)

Core Features

  • 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

Detection Capabilities

  • 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 yang Didukung

MotifAsalDeskripsi
MegamendungCirebonAwan berarak, gradasi warna halus
ParangYogyakarta/SoloGaris diagonal menyerupai huruf 'S'
Custom-Retrain dengan motif pilihan Anda

🛠️ Tech Stack & Dependencies

Mobile Application

ComponentTeknologiVersion
FrameworkFlutter^3.10.4
LanguageDart-
ML RuntimeTensorFlow Lite Flutter^0.11.0
Cameracamera^0.11.0
Storageshared_preferences^2.2.2
Image Processingimage, image_picker^4.0.17
UI FrameworkMaterial Design 3built-in

Computer Vision & Model

AspekDetail
Model ArchitectureYOLOv8 Nano (recommended)
AlternatifSSD MobileNet, EfficientDet
Framework TrainingUltralytics YOLO v8
RuntimeTensorFlow Lite (on-device)
Input Size300x300 atau 640x640 (RGB)
OutputBounding boxes + class IDs + confidence
Format Model.tflite (quantized INT8 optimal)

App Services Architecture

📦 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

Dataset Composition (untuk Training)

📊 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%

🚀 Instalasi & Setup

Prerequisites

Clone Repository

git clone https://github.com/beginnener/CompVis_SmartBatikLens.git
cd CompVis_SmartBatikLens

Install Dependencies

flutter pub get

Setup Model TFLite (Pre-trained Ready ✅)

Model 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:

  1. Verifikasi file ada di lib/assets/models/:
    • model.tflite (Model YOLOv8 Nano)
    • labels.txt (Class: megamendung, parang)
  2. Konfigurasi lib/features/lens/services/tflite_service.dart jika diperlukan:
    staticconstint inputSize =640; // Model input sizestaticconstint numResults =10; // Max detectionsstaticconstdouble threshold =0.5; // Confidence threshold (tunable)
  3. Jalankan aplikasi - model siap deteksi!

Training Custom Model: Lihat Model Training & Integration section

Detail di lib/assets/models/README.md

Jalankan Aplikasi

flutter run # Android default
flutter run -d <device_id># Device tertentu

Platform 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>

📁 Project Structure

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

Architecture

  • 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

🎓 Penggunaan Aplikasi

Setup Pertama

  1. Buka aplikasi di Android/iOS
  2. Berikan izin: Kamera & penyimpanan
  3. Tunggu model TFLite termuat (~2-3 detik, pertama kali saja)

Alur Deteksi

  1. Tap "Scan" → Buka kamera real-time
  2. Arahkan ke produk batik (jarak 30-50 cm, motif jelas)
  3. Deteksi otomatis: Bounding box + label + confidence score muncul real-time
  4. Tap kamera → Simpan snapshot
  5. Tap galeri → Analisis foto existing

Manajemen Hasil

  • History: Lihat semua deteksi yang pernah dilakukan
  • Favorites: Bookmark deteksi dengan tap bintang
  • Delete: Swipe/tap hapus untuk menghapus entry

Tips Hasil Optimal

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

Troubleshooting

IssueSolution
No bounding box appearsLower confidence threshold di tflite_service.dart
Detection too slowReduce model input size atau skip frames
Wrong detectionsRetrain model dengan dataset lebih beragam
App crashes on openCheck camera permissions & model file exists

🧪 Model Training & Integration

Model Saat Ini (Production Ready ✅)

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 v2Classes: 2 (megamendung, parang)Training Images: 932Annotation: YOLO v8 formatURL: https://universe.roboflow.com/haneki/batik-detection-f9hu4-vm8xn/dataset/2

Mengganti dengan Model Lain

Aplikasi 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)

Training Model Sendiri (Custom Dataset)

Opsi 1: Ultralytics YOLO

# 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

Opsi 2: TensorFlow Object Detection API

# 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_tensor

Panduan Dataset

Untuk 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

Integrasi Setelah Training

  1. Tempatkan model.tflite di lib/assets/models/
  2. Update labels.txt dengan nama kelas Anda
  3. Sesuaikan konstanta di tflite_service.dart jika perlu:
    • inputSize: Sesuaikan dengan input training
    • threshold: Mulai dari 0.5, tuning sesuai hasil
  4. Uji menyeluruh di perangkat target

Lihat panduan detail di IMPLEMENTATION_SUMMARY.md


🎯 Tantangan dan Solusi

1. Variasi Objek dan Distorsi Geometris

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

2. Kemiripan Visual dan Pola Repetitif

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

3. Keterbatasan Resource Perangkat Mobile

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

4. Lighting & Image Quality Variations

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

📊 Performa Model & App

Model Performance (YOLOv8 Nano + TFLite INT8)

MetricTargetCatatan
Model Size~6 MBQuantized INT8
Inference50-150msMid-range Android (SD 600+)
mAP@0.575-85%Bergantung dataset training
mAP@0.5:0.9545-55%COCO standard
Real-time FPS10-20 FPSLive detection frame rate

Platform Support

PlatformStatusCatatan
AndroidMin API 21 (Lollipop)
iOSMin iOS 11.0
WebTFLite limitation

System Requirements

LevelSpesifikasi
MinimumAndroid 5.0 (API 21) / iOS 11.0 • 2GB RAM • Autofocus camera • 100MB storage
RecommendedAndroid 8.0+ / iOS 13.0+ • 4GB RAM • 12MP+ camera • 200MB storage

Optimization Tips

Jika lag: 1) Reduce inputSize (320x320) 2) Use INT8 model 3) Skip frames 4) Lower numResults 5) Test on device


🤝 Kontributor

Proyek Akhir mata kuliah Computer Vision - Universitas Pendidikan Indonesia (2025)

Tim Pengembang:

Dosen Pengampu: Yaya Wihardi, S.Kom., M.Kom. | Fakultas MIPA, UPI


📄 Dokumentasi Tambahan


📝 Lisensi

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.


🙏 Acknowledgments

  • 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

Special Thanks

  • Museum Batik Indonesia - Referensi motif dan sejarah
  • Pengrajin batik Cirebon & Solo - Wawasan tentang motif tradisional
  • Beta testers - Feedback untuk improvement aplikasi

📞 Kontak & Support

Untuk Pertanyaan Teknis

Untuk Kolaborasi

  • Email: kiyahh@upi.edu
  • Subject: "Smart Batik Lens Collaboration - [Your Topic]"

Bug Reports

Saat melaporkan bug, sertakan:

  1. Device & OS version
  2. App version
  3. Steps to reproduce
  4. Screenshots/videos (jika ada)
  5. Error logs (jika ada)

🌟 Star History

Jika proyek ini membantu Anda, jangan lupa untuk memberikan ⭐ di GitHub!


📸 Screenshots

[Coming soon - Add actual app screenshots here]


Current Version (v1.0.0)

  • ✅ Real-time object detection
  • ✅ Camera & gallery support
  • ✅ History & favorites
  • ✅ TFLite integration
  • ✅ Bounding box visualization

Planned Features

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

Research & Development

  • 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - beginnener/CompVis_SmartBatikLens · GitHub
Skip to content

Repository files navigation

Smart Batik Lens 🎨

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.


⚡ Quick Start

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 run

Prasyarat: Flutter 3.10.4+, Dart SDK, Android Studio/Xcode Note: Model YOLOv8 Nano pre-trained dari Roboflow sudah included & siap pakai


🎯 Latar Belakang

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.


✨ Fitur Utama (v1.0.0)

Core Features

  • 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

Detection Capabilities

  • 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 yang Didukung

MotifAsalDeskripsi
MegamendungCirebonAwan berarak, gradasi warna halus
ParangYogyakarta/SoloGaris diagonal menyerupai huruf 'S'
Custom-Retrain dengan motif pilihan Anda

🛠️ Tech Stack & Dependencies

Mobile Application

ComponentTeknologiVersion
FrameworkFlutter^3.10.4
LanguageDart-
ML RuntimeTensorFlow Lite Flutter^0.11.0
Cameracamera^0.11.0
Storageshared_preferences^2.2.2
Image Processingimage, image_picker^4.0.17
UI FrameworkMaterial Design 3built-in

Computer Vision & Model

AspekDetail
Model ArchitectureYOLOv8 Nano (recommended)
AlternatifSSD MobileNet, EfficientDet
Framework TrainingUltralytics YOLO v8
RuntimeTensorFlow Lite (on-device)
Input Size300x300 atau 640x640 (RGB)
OutputBounding boxes + class IDs + confidence
Format Model.tflite (quantized INT8 optimal)

App Services Architecture

📦 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

Dataset Composition (untuk Training)

📊 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%

🚀 Instalasi & Setup

Prerequisites

Clone Repository

git clone https://github.com/beginnener/CompVis_SmartBatikLens.git
cd CompVis_SmartBatikLens

Install Dependencies

flutter pub get

Setup Model TFLite (Pre-trained Ready ✅)

Model 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:

  1. Verifikasi file ada di lib/assets/models/:
    • model.tflite (Model YOLOv8 Nano)
    • labels.txt (Class: megamendung, parang)
  2. Konfigurasi lib/features/lens/services/tflite_service.dart jika diperlukan:
    staticconstint inputSize =640; // Model input sizestaticconstint numResults =10; // Max detectionsstaticconstdouble threshold =0.5; // Confidence threshold (tunable)
  3. Jalankan aplikasi - model siap deteksi!

Training Custom Model: Lihat Model Training & Integration section

Detail di lib/assets/models/README.md

Jalankan Aplikasi

flutter run # Android default
flutter run -d <device_id># Device tertentu

Platform 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>

📁 Project Structure

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

Architecture

  • 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

🎓 Penggunaan Aplikasi

Setup Pertama

  1. Buka aplikasi di Android/iOS
  2. Berikan izin: Kamera & penyimpanan
  3. Tunggu model TFLite termuat (~2-3 detik, pertama kali saja)

Alur Deteksi

  1. Tap "Scan" → Buka kamera real-time
  2. Arahkan ke produk batik (jarak 30-50 cm, motif jelas)
  3. Deteksi otomatis: Bounding box + label + confidence score muncul real-time
  4. Tap kamera → Simpan snapshot
  5. Tap galeri → Analisis foto existing

Manajemen Hasil

  • History: Lihat semua deteksi yang pernah dilakukan
  • Favorites: Bookmark deteksi dengan tap bintang
  • Delete: Swipe/tap hapus untuk menghapus entry

Tips Hasil Optimal

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

Troubleshooting

IssueSolution
No bounding box appearsLower confidence threshold di tflite_service.dart
Detection too slowReduce model input size atau skip frames
Wrong detectionsRetrain model dengan dataset lebih beragam
App crashes on openCheck camera permissions & model file exists

🧪 Model Training & Integration

Model Saat Ini (Production Ready ✅)

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 v2Classes: 2 (megamendung, parang)Training Images: 932Annotation: YOLO v8 formatURL: https://universe.roboflow.com/haneki/batik-detection-f9hu4-vm8xn/dataset/2

Mengganti dengan Model Lain

Aplikasi 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)

Training Model Sendiri (Custom Dataset)

Opsi 1: Ultralytics YOLO

# 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

Opsi 2: TensorFlow Object Detection API

# 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_tensor

Panduan Dataset

Untuk 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

Integrasi Setelah Training

  1. Tempatkan model.tflite di lib/assets/models/
  2. Update labels.txt dengan nama kelas Anda
  3. Sesuaikan konstanta di tflite_service.dart jika perlu:
    • inputSize: Sesuaikan dengan input training
    • threshold: Mulai dari 0.5, tuning sesuai hasil
  4. Uji menyeluruh di perangkat target

Lihat panduan detail di IMPLEMENTATION_SUMMARY.md


🎯 Tantangan dan Solusi

1. Variasi Objek dan Distorsi Geometris

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

2. Kemiripan Visual dan Pola Repetitif

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

3. Keterbatasan Resource Perangkat Mobile

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

4. Lighting & Image Quality Variations

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

📊 Performa Model & App

Model Performance (YOLOv8 Nano + TFLite INT8)

MetricTargetCatatan
Model Size~6 MBQuantized INT8
Inference50-150msMid-range Android (SD 600+)
mAP@0.575-85%Bergantung dataset training
mAP@0.5:0.9545-55%COCO standard
Real-time FPS10-20 FPSLive detection frame rate

Platform Support

PlatformStatusCatatan
AndroidMin API 21 (Lollipop)
iOSMin iOS 11.0
WebTFLite limitation

System Requirements

LevelSpesifikasi
MinimumAndroid 5.0 (API 21) / iOS 11.0 • 2GB RAM • Autofocus camera • 100MB storage
RecommendedAndroid 8.0+ / iOS 13.0+ • 4GB RAM • 12MP+ camera • 200MB storage

Optimization Tips

Jika lag: 1) Reduce inputSize (320x320) 2) Use INT8 model 3) Skip frames 4) Lower numResults 5) Test on device


🤝 Kontributor

Proyek Akhir mata kuliah Computer Vision - Universitas Pendidikan Indonesia (2025)

Tim Pengembang:

Dosen Pengampu: Yaya Wihardi, S.Kom., M.Kom. | Fakultas MIPA, UPI


📄 Dokumentasi Tambahan


📝 Lisensi

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.


🙏 Acknowledgments

  • 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

Special Thanks

  • Museum Batik Indonesia - Referensi motif dan sejarah
  • Pengrajin batik Cirebon & Solo - Wawasan tentang motif tradisional
  • Beta testers - Feedback untuk improvement aplikasi

📞 Kontak & Support

Untuk Pertanyaan Teknis

Untuk Kolaborasi

  • Email: kiyahh@upi.edu
  • Subject: "Smart Batik Lens Collaboration - [Your Topic]"

Bug Reports

Saat melaporkan bug, sertakan:

  1. Device & OS version
  2. App version
  3. Steps to reproduce
  4. Screenshots/videos (jika ada)
  5. Error logs (jika ada)

🌟 Star History

Jika proyek ini membantu Anda, jangan lupa untuk memberikan ⭐ di GitHub!


📸 Screenshots

[Coming soon - Add actual app screenshots here]


Current Version (v1.0.0)

  • ✅ Real-time object detection
  • ✅ Camera & gallery support
  • ✅ History & favorites
  • ✅ TFLite integration
  • ✅ Bounding box visualization

Planned Features

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

Research & Development

  • 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - beginnener/CompVis_SmartBatikLens · GitHub
Skip to content

Repository files navigation

Smart Batik Lens 🎨

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.


⚡ Quick Start

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 run

Prasyarat: Flutter 3.10.4+, Dart SDK, Android Studio/Xcode Note: Model YOLOv8 Nano pre-trained dari Roboflow sudah included & siap pakai


🎯 Latar Belakang

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.


✨ Fitur Utama (v1.0.0)

Core Features

  • 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

Detection Capabilities

  • 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 yang Didukung

MotifAsalDeskripsi
MegamendungCirebonAwan berarak, gradasi warna halus
ParangYogyakarta/SoloGaris diagonal menyerupai huruf 'S'
Custom-Retrain dengan motif pilihan Anda

🛠️ Tech Stack & Dependencies

Mobile Application

ComponentTeknologiVersion
FrameworkFlutter^3.10.4
LanguageDart-
ML RuntimeTensorFlow Lite Flutter^0.11.0
Cameracamera^0.11.0
Storageshared_preferences^2.2.2
Image Processingimage, image_picker^4.0.17
UI FrameworkMaterial Design 3built-in

Computer Vision & Model

AspekDetail
Model ArchitectureYOLOv8 Nano (recommended)
AlternatifSSD MobileNet, EfficientDet
Framework TrainingUltralytics YOLO v8
RuntimeTensorFlow Lite (on-device)
Input Size300x300 atau 640x640 (RGB)
OutputBounding boxes + class IDs + confidence
Format Model.tflite (quantized INT8 optimal)

App Services Architecture

📦 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

Dataset Composition (untuk Training)

📊 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%

🚀 Instalasi & Setup

Prerequisites

Clone Repository

git clone https://github.com/beginnener/CompVis_SmartBatikLens.git
cd CompVis_SmartBatikLens

Install Dependencies

flutter pub get

Setup Model TFLite (Pre-trained Ready ✅)

Model 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:

  1. Verifikasi file ada di lib/assets/models/:
    • model.tflite (Model YOLOv8 Nano)
    • labels.txt (Class: megamendung, parang)
  2. Konfigurasi lib/features/lens/services/tflite_service.dart jika diperlukan:
    staticconstint inputSize =640; // Model input sizestaticconstint numResults =10; // Max detectionsstaticconstdouble threshold =0.5; // Confidence threshold (tunable)
  3. Jalankan aplikasi - model siap deteksi!

Training Custom Model: Lihat Model Training & Integration section

Detail di lib/assets/models/README.md

Jalankan Aplikasi

flutter run # Android default
flutter run -d <device_id># Device tertentu

Platform 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>

📁 Project Structure

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

Architecture

  • 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

🎓 Penggunaan Aplikasi

Setup Pertama

  1. Buka aplikasi di Android/iOS
  2. Berikan izin: Kamera & penyimpanan
  3. Tunggu model TFLite termuat (~2-3 detik, pertama kali saja)

Alur Deteksi

  1. Tap "Scan" → Buka kamera real-time
  2. Arahkan ke produk batik (jarak 30-50 cm, motif jelas)
  3. Deteksi otomatis: Bounding box + label + confidence score muncul real-time
  4. Tap kamera → Simpan snapshot
  5. Tap galeri → Analisis foto existing

Manajemen Hasil

  • History: Lihat semua deteksi yang pernah dilakukan
  • Favorites: Bookmark deteksi dengan tap bintang
  • Delete: Swipe/tap hapus untuk menghapus entry

Tips Hasil Optimal

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

Troubleshooting

IssueSolution
No bounding box appearsLower confidence threshold di tflite_service.dart
Detection too slowReduce model input size atau skip frames
Wrong detectionsRetrain model dengan dataset lebih beragam
App crashes on openCheck camera permissions & model file exists

🧪 Model Training & Integration

Model Saat Ini (Production Ready ✅)

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 v2Classes: 2 (megamendung, parang)Training Images: 932Annotation: YOLO v8 formatURL: https://universe.roboflow.com/haneki/batik-detection-f9hu4-vm8xn/dataset/2

Mengganti dengan Model Lain

Aplikasi 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)

Training Model Sendiri (Custom Dataset)

Opsi 1: Ultralytics YOLO

# 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

Opsi 2: TensorFlow Object Detection API

# 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_tensor

Panduan Dataset

Untuk 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

Integrasi Setelah Training

  1. Tempatkan model.tflite di lib/assets/models/
  2. Update labels.txt dengan nama kelas Anda
  3. Sesuaikan konstanta di tflite_service.dart jika perlu:
    • inputSize: Sesuaikan dengan input training
    • threshold: Mulai dari 0.5, tuning sesuai hasil
  4. Uji menyeluruh di perangkat target

Lihat panduan detail di IMPLEMENTATION_SUMMARY.md


🎯 Tantangan dan Solusi

1. Variasi Objek dan Distorsi Geometris

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

2. Kemiripan Visual dan Pola Repetitif

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

3. Keterbatasan Resource Perangkat Mobile

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

4. Lighting & Image Quality Variations

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

📊 Performa Model & App

Model Performance (YOLOv8 Nano + TFLite INT8)

MetricTargetCatatan
Model Size~6 MBQuantized INT8
Inference50-150msMid-range Android (SD 600+)
mAP@0.575-85%Bergantung dataset training
mAP@0.5:0.9545-55%COCO standard
Real-time FPS10-20 FPSLive detection frame rate

Platform Support

PlatformStatusCatatan
AndroidMin API 21 (Lollipop)
iOSMin iOS 11.0
WebTFLite limitation

System Requirements

LevelSpesifikasi
MinimumAndroid 5.0 (API 21) / iOS 11.0 • 2GB RAM • Autofocus camera • 100MB storage
RecommendedAndroid 8.0+ / iOS 13.0+ • 4GB RAM • 12MP+ camera • 200MB storage

Optimization Tips

Jika lag: 1) Reduce inputSize (320x320) 2) Use INT8 model 3) Skip frames 4) Lower numResults 5) Test on device


🤝 Kontributor

Proyek Akhir mata kuliah Computer Vision - Universitas Pendidikan Indonesia (2025)

Tim Pengembang:

Dosen Pengampu: Yaya Wihardi, S.Kom., M.Kom. | Fakultas MIPA, UPI


📄 Dokumentasi Tambahan


📝 Lisensi

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.


🙏 Acknowledgments

  • 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

Special Thanks

  • Museum Batik Indonesia - Referensi motif dan sejarah
  • Pengrajin batik Cirebon & Solo - Wawasan tentang motif tradisional
  • Beta testers - Feedback untuk improvement aplikasi

📞 Kontak & Support

Untuk Pertanyaan Teknis

Untuk Kolaborasi

  • Email: kiyahh@upi.edu
  • Subject: "Smart Batik Lens Collaboration - [Your Topic]"

Bug Reports

Saat melaporkan bug, sertakan:

  1. Device & OS version
  2. App version
  3. Steps to reproduce
  4. Screenshots/videos (jika ada)
  5. Error logs (jika ada)

🌟 Star History

Jika proyek ini membantu Anda, jangan lupa untuk memberikan ⭐ di GitHub!


📸 Screenshots

[Coming soon - Add actual app screenshots here]


Current Version (v1.0.0)

  • ✅ Real-time object detection
  • ✅ Camera & gallery support
  • ✅ History & favorites
  • ✅ TFLite integration
  • ✅ Bounding box visualization

Planned Features

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

Research & Development

  • 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - beginnener/CompVis_SmartBatikLens · GitHub
Skip to content

Repository files navigation

Smart Batik Lens 🎨

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.


⚡ Quick Start

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 run

Prasyarat: Flutter 3.10.4+, Dart SDK, Android Studio/Xcode Note: Model YOLOv8 Nano pre-trained dari Roboflow sudah included & siap pakai


🎯 Latar Belakang

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.


✨ Fitur Utama (v1.0.0)

Core Features

  • 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

Detection Capabilities

  • 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 yang Didukung

MotifAsalDeskripsi
MegamendungCirebonAwan berarak, gradasi warna halus
ParangYogyakarta/SoloGaris diagonal menyerupai huruf 'S'
Custom-Retrain dengan motif pilihan Anda

🛠️ Tech Stack & Dependencies

Mobile Application

ComponentTeknologiVersion
FrameworkFlutter^3.10.4
LanguageDart-
ML RuntimeTensorFlow Lite Flutter^0.11.0
Cameracamera^0.11.0
Storageshared_preferences^2.2.2
Image Processingimage, image_picker^4.0.17
UI FrameworkMaterial Design 3built-in

Computer Vision & Model

AspekDetail
Model ArchitectureYOLOv8 Nano (recommended)
AlternatifSSD MobileNet, EfficientDet
Framework TrainingUltralytics YOLO v8
RuntimeTensorFlow Lite (on-device)
Input Size300x300 atau 640x640 (RGB)
OutputBounding boxes + class IDs + confidence
Format Model.tflite (quantized INT8 optimal)

App Services Architecture

📦 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

Dataset Composition (untuk Training)

📊 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%

🚀 Instalasi & Setup

Prerequisites

Clone Repository

git clone https://github.com/beginnener/CompVis_SmartBatikLens.git
cd CompVis_SmartBatikLens

Install Dependencies

flutter pub get

Setup Model TFLite (Pre-trained Ready ✅)

Model 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:

  1. Verifikasi file ada di lib/assets/models/:
    • model.tflite (Model YOLOv8 Nano)
    • labels.txt (Class: megamendung, parang)
  2. Konfigurasi lib/features/lens/services/tflite_service.dart jika diperlukan:
    staticconstint inputSize =640; // Model input sizestaticconstint numResults =10; // Max detectionsstaticconstdouble threshold =0.5; // Confidence threshold (tunable)
  3. Jalankan aplikasi - model siap deteksi!

Training Custom Model: Lihat Model Training & Integration section

Detail di lib/assets/models/README.md

Jalankan Aplikasi

flutter run # Android default
flutter run -d <device_id># Device tertentu

Platform 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>

📁 Project Structure

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

Architecture

  • 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

🎓 Penggunaan Aplikasi

Setup Pertama

  1. Buka aplikasi di Android/iOS
  2. Berikan izin: Kamera & penyimpanan
  3. Tunggu model TFLite termuat (~2-3 detik, pertama kali saja)

Alur Deteksi

  1. Tap "Scan" → Buka kamera real-time
  2. Arahkan ke produk batik (jarak 30-50 cm, motif jelas)
  3. Deteksi otomatis: Bounding box + label + confidence score muncul real-time
  4. Tap kamera → Simpan snapshot
  5. Tap galeri → Analisis foto existing

Manajemen Hasil

  • History: Lihat semua deteksi yang pernah dilakukan
  • Favorites: Bookmark deteksi dengan tap bintang
  • Delete: Swipe/tap hapus untuk menghapus entry

Tips Hasil Optimal

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

Troubleshooting

IssueSolution
No bounding box appearsLower confidence threshold di tflite_service.dart
Detection too slowReduce model input size atau skip frames
Wrong detectionsRetrain model dengan dataset lebih beragam
App crashes on openCheck camera permissions & model file exists

🧪 Model Training & Integration

Model Saat Ini (Production Ready ✅)

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 v2Classes: 2 (megamendung, parang)Training Images: 932Annotation: YOLO v8 formatURL: https://universe.roboflow.com/haneki/batik-detection-f9hu4-vm8xn/dataset/2

Mengganti dengan Model Lain

Aplikasi 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)

Training Model Sendiri (Custom Dataset)

Opsi 1: Ultralytics YOLO

# 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

Opsi 2: TensorFlow Object Detection API

# 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_tensor

Panduan Dataset

Untuk 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

Integrasi Setelah Training

  1. Tempatkan model.tflite di lib/assets/models/
  2. Update labels.txt dengan nama kelas Anda
  3. Sesuaikan konstanta di tflite_service.dart jika perlu:
    • inputSize: Sesuaikan dengan input training
    • threshold: Mulai dari 0.5, tuning sesuai hasil
  4. Uji menyeluruh di perangkat target

Lihat panduan detail di IMPLEMENTATION_SUMMARY.md


🎯 Tantangan dan Solusi

1. Variasi Objek dan Distorsi Geometris

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

2. Kemiripan Visual dan Pola Repetitif

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

3. Keterbatasan Resource Perangkat Mobile

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

4. Lighting & Image Quality Variations

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

📊 Performa Model & App

Model Performance (YOLOv8 Nano + TFLite INT8)

MetricTargetCatatan
Model Size~6 MBQuantized INT8
Inference50-150msMid-range Android (SD 600+)
mAP@0.575-85%Bergantung dataset training
mAP@0.5:0.9545-55%COCO standard
Real-time FPS10-20 FPSLive detection frame rate

Platform Support

PlatformStatusCatatan
AndroidMin API 21 (Lollipop)
iOSMin iOS 11.0
WebTFLite limitation

System Requirements

LevelSpesifikasi
MinimumAndroid 5.0 (API 21) / iOS 11.0 • 2GB RAM • Autofocus camera • 100MB storage
RecommendedAndroid 8.0+ / iOS 13.0+ • 4GB RAM • 12MP+ camera • 200MB storage

Optimization Tips

Jika lag: 1) Reduce inputSize (320x320) 2) Use INT8 model 3) Skip frames 4) Lower numResults 5) Test on device


🤝 Kontributor

Proyek Akhir mata kuliah Computer Vision - Universitas Pendidikan Indonesia (2025)

Tim Pengembang:

Dosen Pengampu: Yaya Wihardi, S.Kom., M.Kom. | Fakultas MIPA, UPI


📄 Dokumentasi Tambahan


📝 Lisensi

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.


🙏 Acknowledgments

  • 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

Special Thanks

  • Museum Batik Indonesia - Referensi motif dan sejarah
  • Pengrajin batik Cirebon & Solo - Wawasan tentang motif tradisional
  • Beta testers - Feedback untuk improvement aplikasi

📞 Kontak & Support

Untuk Pertanyaan Teknis

Untuk Kolaborasi

  • Email: kiyahh@upi.edu
  • Subject: "Smart Batik Lens Collaboration - [Your Topic]"

Bug Reports

Saat melaporkan bug, sertakan:

  1. Device & OS version
  2. App version
  3. Steps to reproduce
  4. Screenshots/videos (jika ada)
  5. Error logs (jika ada)

🌟 Star History

Jika proyek ini membantu Anda, jangan lupa untuk memberikan ⭐ di GitHub!


📸 Screenshots

[Coming soon - Add actual app screenshots here]


Current Version (v1.0.0)

  • ✅ Real-time object detection
  • ✅ Camera & gallery support
  • ✅ History & favorites
  • ✅ TFLite integration
  • ✅ Bounding box visualization

Planned Features

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

Research & Development

  • 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - beginnener/CompVis_SmartBatikLens · GitHub
Skip to content

Repository files navigation

Smart Batik Lens 🎨

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.


⚡ Quick Start

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 run

Prasyarat: Flutter 3.10.4+, Dart SDK, Android Studio/Xcode Note: Model YOLOv8 Nano pre-trained dari Roboflow sudah included & siap pakai


🎯 Latar Belakang

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.


✨ Fitur Utama (v1.0.0)

Core Features

  • 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

Detection Capabilities

  • 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 yang Didukung

MotifAsalDeskripsi
MegamendungCirebonAwan berarak, gradasi warna halus
ParangYogyakarta/SoloGaris diagonal menyerupai huruf 'S'
Custom-Retrain dengan motif pilihan Anda

🛠️ Tech Stack & Dependencies

Mobile Application

ComponentTeknologiVersion
FrameworkFlutter^3.10.4
LanguageDart-
ML RuntimeTensorFlow Lite Flutter^0.11.0
Cameracamera^0.11.0
Storageshared_preferences^2.2.2
Image Processingimage, image_picker^4.0.17
UI FrameworkMaterial Design 3built-in

Computer Vision & Model

AspekDetail
Model ArchitectureYOLOv8 Nano (recommended)
AlternatifSSD MobileNet, EfficientDet
Framework TrainingUltralytics YOLO v8
RuntimeTensorFlow Lite (on-device)
Input Size300x300 atau 640x640 (RGB)
OutputBounding boxes + class IDs + confidence
Format Model.tflite (quantized INT8 optimal)

App Services Architecture

📦 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

Dataset Composition (untuk Training)

📊 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%

🚀 Instalasi & Setup

Prerequisites

Clone Repository

git clone https://github.com/beginnener/CompVis_SmartBatikLens.git
cd CompVis_SmartBatikLens

Install Dependencies

flutter pub get

Setup Model TFLite (Pre-trained Ready ✅)

Model 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:

  1. Verifikasi file ada di lib/assets/models/:
    • model.tflite (Model YOLOv8 Nano)
    • labels.txt (Class: megamendung, parang)
  2. Konfigurasi lib/features/lens/services/tflite_service.dart jika diperlukan:
    staticconstint inputSize =640; // Model input sizestaticconstint numResults =10; // Max detectionsstaticconstdouble threshold =0.5; // Confidence threshold (tunable)
  3. Jalankan aplikasi - model siap deteksi!

Training Custom Model: Lihat Model Training & Integration section

Detail di lib/assets/models/README.md

Jalankan Aplikasi

flutter run # Android default
flutter run -d <device_id># Device tertentu

Platform 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>

📁 Project Structure

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

Architecture

  • 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

🎓 Penggunaan Aplikasi

Setup Pertama

  1. Buka aplikasi di Android/iOS
  2. Berikan izin: Kamera & penyimpanan
  3. Tunggu model TFLite termuat (~2-3 detik, pertama kali saja)

Alur Deteksi

  1. Tap "Scan" → Buka kamera real-time
  2. Arahkan ke produk batik (jarak 30-50 cm, motif jelas)
  3. Deteksi otomatis: Bounding box + label + confidence score muncul real-time
  4. Tap kamera → Simpan snapshot
  5. Tap galeri → Analisis foto existing

Manajemen Hasil

  • History: Lihat semua deteksi yang pernah dilakukan
  • Favorites: Bookmark deteksi dengan tap bintang
  • Delete: Swipe/tap hapus untuk menghapus entry

Tips Hasil Optimal

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

Troubleshooting

IssueSolution
No bounding box appearsLower confidence threshold di tflite_service.dart
Detection too slowReduce model input size atau skip frames
Wrong detectionsRetrain model dengan dataset lebih beragam
App crashes on openCheck camera permissions & model file exists

🧪 Model Training & Integration

Model Saat Ini (Production Ready ✅)

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 v2Classes: 2 (megamendung, parang)Training Images: 932Annotation: YOLO v8 formatURL: https://universe.roboflow.com/haneki/batik-detection-f9hu4-vm8xn/dataset/2

Mengganti dengan Model Lain

Aplikasi 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)

Training Model Sendiri (Custom Dataset)

Opsi 1: Ultralytics YOLO

# 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

Opsi 2: TensorFlow Object Detection API

# 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_tensor

Panduan Dataset

Untuk 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

Integrasi Setelah Training

  1. Tempatkan model.tflite di lib/assets/models/
  2. Update labels.txt dengan nama kelas Anda
  3. Sesuaikan konstanta di tflite_service.dart jika perlu:
    • inputSize: Sesuaikan dengan input training
    • threshold: Mulai dari 0.5, tuning sesuai hasil
  4. Uji menyeluruh di perangkat target

Lihat panduan detail di IMPLEMENTATION_SUMMARY.md


🎯 Tantangan dan Solusi

1. Variasi Objek dan Distorsi Geometris

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

2. Kemiripan Visual dan Pola Repetitif

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

3. Keterbatasan Resource Perangkat Mobile

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

4. Lighting & Image Quality Variations

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

📊 Performa Model & App

Model Performance (YOLOv8 Nano + TFLite INT8)

MetricTargetCatatan
Model Size~6 MBQuantized INT8
Inference50-150msMid-range Android (SD 600+)
mAP@0.575-85%Bergantung dataset training
mAP@0.5:0.9545-55%COCO standard
Real-time FPS10-20 FPSLive detection frame rate

Platform Support

PlatformStatusCatatan
AndroidMin API 21 (Lollipop)
iOSMin iOS 11.0
WebTFLite limitation

System Requirements

LevelSpesifikasi
MinimumAndroid 5.0 (API 21) / iOS 11.0 • 2GB RAM • Autofocus camera • 100MB storage
RecommendedAndroid 8.0+ / iOS 13.0+ • 4GB RAM • 12MP+ camera • 200MB storage

Optimization Tips

Jika lag: 1) Reduce inputSize (320x320) 2) Use INT8 model 3) Skip frames 4) Lower numResults 5) Test on device


🤝 Kontributor

Proyek Akhir mata kuliah Computer Vision - Universitas Pendidikan Indonesia (2025)

Tim Pengembang:

Dosen Pengampu: Yaya Wihardi, S.Kom., M.Kom. | Fakultas MIPA, UPI


📄 Dokumentasi Tambahan


📝 Lisensi

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.


🙏 Acknowledgments

  • 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

Special Thanks

  • Museum Batik Indonesia - Referensi motif dan sejarah
  • Pengrajin batik Cirebon & Solo - Wawasan tentang motif tradisional
  • Beta testers - Feedback untuk improvement aplikasi

📞 Kontak & Support

Untuk Pertanyaan Teknis

Untuk Kolaborasi

  • Email: kiyahh@upi.edu
  • Subject: "Smart Batik Lens Collaboration - [Your Topic]"

Bug Reports

Saat melaporkan bug, sertakan:

  1. Device & OS version
  2. App version
  3. Steps to reproduce
  4. Screenshots/videos (jika ada)
  5. Error logs (jika ada)

🌟 Star History

Jika proyek ini membantu Anda, jangan lupa untuk memberikan ⭐ di GitHub!


📸 Screenshots

[Coming soon - Add actual app screenshots here]


Current Version (v1.0.0)

  • ✅ Real-time object detection
  • ✅ Camera & gallery support
  • ✅ History & favorites
  • ✅ TFLite integration
  • ✅ Bounding box visualization

Planned Features

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

Research & Development

  • 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - beginnener/CompVis_SmartBatikLens · GitHub
Skip to content

Repository files navigation

Smart Batik Lens 🎨

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.


⚡ Quick Start

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 run

Prasyarat: Flutter 3.10.4+, Dart SDK, Android Studio/Xcode Note: Model YOLOv8 Nano pre-trained dari Roboflow sudah included & siap pakai


🎯 Latar Belakang

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.


✨ Fitur Utama (v1.0.0)

Core Features

  • 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

Detection Capabilities

  • 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 yang Didukung

MotifAsalDeskripsi
MegamendungCirebonAwan berarak, gradasi warna halus
ParangYogyakarta/SoloGaris diagonal menyerupai huruf 'S'
Custom-Retrain dengan motif pilihan Anda

🛠️ Tech Stack & Dependencies

Mobile Application

ComponentTeknologiVersion
FrameworkFlutter^3.10.4
LanguageDart-
ML RuntimeTensorFlow Lite Flutter^0.11.0
Cameracamera^0.11.0
Storageshared_preferences^2.2.2
Image Processingimage, image_picker^4.0.17
UI FrameworkMaterial Design 3built-in

Computer Vision & Model

AspekDetail
Model ArchitectureYOLOv8 Nano (recommended)
AlternatifSSD MobileNet, EfficientDet
Framework TrainingUltralytics YOLO v8
RuntimeTensorFlow Lite (on-device)
Input Size300x300 atau 640x640 (RGB)
OutputBounding boxes + class IDs + confidence
Format Model.tflite (quantized INT8 optimal)

App Services Architecture

📦 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

Dataset Composition (untuk Training)

📊 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%

🚀 Instalasi & Setup

Prerequisites

Clone Repository

git clone https://github.com/beginnener/CompVis_SmartBatikLens.git
cd CompVis_SmartBatikLens

Install Dependencies

flutter pub get

Setup Model TFLite (Pre-trained Ready ✅)

Model 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:

  1. Verifikasi file ada di lib/assets/models/:
    • model.tflite (Model YOLOv8 Nano)
    • labels.txt (Class: megamendung, parang)
  2. Konfigurasi lib/features/lens/services/tflite_service.dart jika diperlukan:
    staticconstint inputSize =640; // Model input sizestaticconstint numResults =10; // Max detectionsstaticconstdouble threshold =0.5; // Confidence threshold (tunable)
  3. Jalankan aplikasi - model siap deteksi!

Training Custom Model: Lihat Model Training & Integration section

Detail di lib/assets/models/README.md

Jalankan Aplikasi

flutter run # Android default
flutter run -d <device_id># Device tertentu

Platform 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>

📁 Project Structure

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

Architecture

  • 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

🎓 Penggunaan Aplikasi

Setup Pertama

  1. Buka aplikasi di Android/iOS
  2. Berikan izin: Kamera & penyimpanan
  3. Tunggu model TFLite termuat (~2-3 detik, pertama kali saja)

Alur Deteksi

  1. Tap "Scan" → Buka kamera real-time
  2. Arahkan ke produk batik (jarak 30-50 cm, motif jelas)
  3. Deteksi otomatis: Bounding box + label + confidence score muncul real-time
  4. Tap kamera → Simpan snapshot
  5. Tap galeri → Analisis foto existing

Manajemen Hasil

  • History: Lihat semua deteksi yang pernah dilakukan
  • Favorites: Bookmark deteksi dengan tap bintang
  • Delete: Swipe/tap hapus untuk menghapus entry

Tips Hasil Optimal

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

Troubleshooting

IssueSolution
No bounding box appearsLower confidence threshold di tflite_service.dart
Detection too slowReduce model input size atau skip frames
Wrong detectionsRetrain model dengan dataset lebih beragam
App crashes on openCheck camera permissions & model file exists

🧪 Model Training & Integration

Model Saat Ini (Production Ready ✅)

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 v2Classes: 2 (megamendung, parang)Training Images: 932Annotation: YOLO v8 formatURL: https://universe.roboflow.com/haneki/batik-detection-f9hu4-vm8xn/dataset/2

Mengganti dengan Model Lain

Aplikasi 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)

Training Model Sendiri (Custom Dataset)

Opsi 1: Ultralytics YOLO

# 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

Opsi 2: TensorFlow Object Detection API

# 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_tensor

Panduan Dataset

Untuk 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

Integrasi Setelah Training

  1. Tempatkan model.tflite di lib/assets/models/
  2. Update labels.txt dengan nama kelas Anda
  3. Sesuaikan konstanta di tflite_service.dart jika perlu:
    • inputSize: Sesuaikan dengan input training
    • threshold: Mulai dari 0.5, tuning sesuai hasil
  4. Uji menyeluruh di perangkat target

Lihat panduan detail di IMPLEMENTATION_SUMMARY.md


🎯 Tantangan dan Solusi

1. Variasi Objek dan Distorsi Geometris

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

2. Kemiripan Visual dan Pola Repetitif

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

3. Keterbatasan Resource Perangkat Mobile

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

4. Lighting & Image Quality Variations

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

📊 Performa Model & App

Model Performance (YOLOv8 Nano + TFLite INT8)

MetricTargetCatatan
Model Size~6 MBQuantized INT8
Inference50-150msMid-range Android (SD 600+)
mAP@0.575-85%Bergantung dataset training
mAP@0.5:0.9545-55%COCO standard
Real-time FPS10-20 FPSLive detection frame rate

Platform Support

PlatformStatusCatatan
AndroidMin API 21 (Lollipop)
iOSMin iOS 11.0
WebTFLite limitation

System Requirements

LevelSpesifikasi
MinimumAndroid 5.0 (API 21) / iOS 11.0 • 2GB RAM • Autofocus camera • 100MB storage
RecommendedAndroid 8.0+ / iOS 13.0+ • 4GB RAM • 12MP+ camera • 200MB storage

Optimization Tips

Jika lag: 1) Reduce inputSize (320x320) 2) Use INT8 model 3) Skip frames 4) Lower numResults 5) Test on device


🤝 Kontributor

Proyek Akhir mata kuliah Computer Vision - Universitas Pendidikan Indonesia (2025)

Tim Pengembang:

Dosen Pengampu: Yaya Wihardi, S.Kom., M.Kom. | Fakultas MIPA, UPI


📄 Dokumentasi Tambahan


📝 Lisensi

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.


🙏 Acknowledgments

  • 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

Special Thanks

  • Museum Batik Indonesia - Referensi motif dan sejarah
  • Pengrajin batik Cirebon & Solo - Wawasan tentang motif tradisional
  • Beta testers - Feedback untuk improvement aplikasi

📞 Kontak & Support

Untuk Pertanyaan Teknis

Untuk Kolaborasi

  • Email: kiyahh@upi.edu
  • Subject: "Smart Batik Lens Collaboration - [Your Topic]"

Bug Reports

Saat melaporkan bug, sertakan:

  1. Device & OS version
  2. App version
  3. Steps to reproduce
  4. Screenshots/videos (jika ada)
  5. Error logs (jika ada)

🌟 Star History

Jika proyek ini membantu Anda, jangan lupa untuk memberikan ⭐ di GitHub!


📸 Screenshots

[Coming soon - Add actual app screenshots here]


Current Version (v1.0.0)

  • ✅ Real-time object detection
  • ✅ Camera & gallery support
  • ✅ History & favorites
  • ✅ TFLite integration
  • ✅ Bounding box visualization

Planned Features

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

Research & Development

  • 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - beginnener/CompVis_SmartBatikLens · GitHub
Skip to content

Repository files navigation

Smart Batik Lens 🎨

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.


⚡ Quick Start

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 run

Prasyarat: Flutter 3.10.4+, Dart SDK, Android Studio/Xcode Note: Model YOLOv8 Nano pre-trained dari Roboflow sudah included & siap pakai


🎯 Latar Belakang

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.


✨ Fitur Utama (v1.0.0)

Core Features

  • 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

Detection Capabilities

  • 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 yang Didukung

MotifAsalDeskripsi
MegamendungCirebonAwan berarak, gradasi warna halus
ParangYogyakarta/SoloGaris diagonal menyerupai huruf 'S'
Custom-Retrain dengan motif pilihan Anda

🛠️ Tech Stack & Dependencies

Mobile Application

ComponentTeknologiVersion
FrameworkFlutter^3.10.4
LanguageDart-
ML RuntimeTensorFlow Lite Flutter^0.11.0
Cameracamera^0.11.0
Storageshared_preferences^2.2.2
Image Processingimage, image_picker^4.0.17
UI FrameworkMaterial Design 3built-in

Computer Vision & Model

AspekDetail
Model ArchitectureYOLOv8 Nano (recommended)
AlternatifSSD MobileNet, EfficientDet
Framework TrainingUltralytics YOLO v8
RuntimeTensorFlow Lite (on-device)
Input Size300x300 atau 640x640 (RGB)
OutputBounding boxes + class IDs + confidence
Format Model.tflite (quantized INT8 optimal)

App Services Architecture

📦 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

Dataset Composition (untuk Training)

📊 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%

🚀 Instalasi & Setup

Prerequisites

Clone Repository

git clone https://github.com/beginnener/CompVis_SmartBatikLens.git
cd CompVis_SmartBatikLens

Install Dependencies

flutter pub get

Setup Model TFLite (Pre-trained Ready ✅)

Model 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:

  1. Verifikasi file ada di lib/assets/models/:
    • model.tflite (Model YOLOv8 Nano)
    • labels.txt (Class: megamendung, parang)
  2. Konfigurasi lib/features/lens/services/tflite_service.dart jika diperlukan:
    staticconstint inputSize =640; // Model input sizestaticconstint numResults =10; // Max detectionsstaticconstdouble threshold =0.5; // Confidence threshold (tunable)
  3. Jalankan aplikasi - model siap deteksi!

Training Custom Model: Lihat Model Training & Integration section

Detail di lib/assets/models/README.md

Jalankan Aplikasi

flutter run # Android default
flutter run -d <device_id># Device tertentu

Platform 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>

📁 Project Structure

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

Architecture

  • 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

🎓 Penggunaan Aplikasi

Setup Pertama

  1. Buka aplikasi di Android/iOS
  2. Berikan izin: Kamera & penyimpanan
  3. Tunggu model TFLite termuat (~2-3 detik, pertama kali saja)

Alur Deteksi

  1. Tap "Scan" → Buka kamera real-time
  2. Arahkan ke produk batik (jarak 30-50 cm, motif jelas)
  3. Deteksi otomatis: Bounding box + label + confidence score muncul real-time
  4. Tap kamera → Simpan snapshot
  5. Tap galeri → Analisis foto existing

Manajemen Hasil

  • History: Lihat semua deteksi yang pernah dilakukan
  • Favorites: Bookmark deteksi dengan tap bintang
  • Delete: Swipe/tap hapus untuk menghapus entry

Tips Hasil Optimal

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

Troubleshooting

IssueSolution
No bounding box appearsLower confidence threshold di tflite_service.dart
Detection too slowReduce model input size atau skip frames
Wrong detectionsRetrain model dengan dataset lebih beragam
App crashes on openCheck camera permissions & model file exists

🧪 Model Training & Integration

Model Saat Ini (Production Ready ✅)

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 v2Classes: 2 (megamendung, parang)Training Images: 932Annotation: YOLO v8 formatURL: https://universe.roboflow.com/haneki/batik-detection-f9hu4-vm8xn/dataset/2

Mengganti dengan Model Lain

Aplikasi 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)

Training Model Sendiri (Custom Dataset)

Opsi 1: Ultralytics YOLO

# 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

Opsi 2: TensorFlow Object Detection API

# 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_tensor

Panduan Dataset

Untuk 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

Integrasi Setelah Training

  1. Tempatkan model.tflite di lib/assets/models/
  2. Update labels.txt dengan nama kelas Anda
  3. Sesuaikan konstanta di tflite_service.dart jika perlu:
    • inputSize: Sesuaikan dengan input training
    • threshold: Mulai dari 0.5, tuning sesuai hasil
  4. Uji menyeluruh di perangkat target

Lihat panduan detail di IMPLEMENTATION_SUMMARY.md


🎯 Tantangan dan Solusi

1. Variasi Objek dan Distorsi Geometris

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

2. Kemiripan Visual dan Pola Repetitif

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

3. Keterbatasan Resource Perangkat Mobile

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

4. Lighting & Image Quality Variations

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

📊 Performa Model & App

Model Performance (YOLOv8 Nano + TFLite INT8)

MetricTargetCatatan
Model Size~6 MBQuantized INT8
Inference50-150msMid-range Android (SD 600+)
mAP@0.575-85%Bergantung dataset training
mAP@0.5:0.9545-55%COCO standard
Real-time FPS10-20 FPSLive detection frame rate

Platform Support

PlatformStatusCatatan
AndroidMin API 21 (Lollipop)
iOSMin iOS 11.0
WebTFLite limitation

System Requirements

LevelSpesifikasi
MinimumAndroid 5.0 (API 21) / iOS 11.0 • 2GB RAM • Autofocus camera • 100MB storage
RecommendedAndroid 8.0+ / iOS 13.0+ • 4GB RAM • 12MP+ camera • 200MB storage

Optimization Tips

Jika lag: 1) Reduce inputSize (320x320) 2) Use INT8 model 3) Skip frames 4) Lower numResults 5) Test on device


🤝 Kontributor

Proyek Akhir mata kuliah Computer Vision - Universitas Pendidikan Indonesia (2025)

Tim Pengembang:

Dosen Pengampu: Yaya Wihardi, S.Kom., M.Kom. | Fakultas MIPA, UPI


📄 Dokumentasi Tambahan


📝 Lisensi

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.


🙏 Acknowledgments

  • 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

Special Thanks

  • Museum Batik Indonesia - Referensi motif dan sejarah
  • Pengrajin batik Cirebon & Solo - Wawasan tentang motif tradisional
  • Beta testers - Feedback untuk improvement aplikasi

📞 Kontak & Support

Untuk Pertanyaan Teknis

Untuk Kolaborasi

  • Email: kiyahh@upi.edu
  • Subject: "Smart Batik Lens Collaboration - [Your Topic]"

Bug Reports

Saat melaporkan bug, sertakan:

  1. Device & OS version
  2. App version
  3. Steps to reproduce
  4. Screenshots/videos (jika ada)
  5. Error logs (jika ada)

🌟 Star History

Jika proyek ini membantu Anda, jangan lupa untuk memberikan ⭐ di GitHub!


📸 Screenshots

[Coming soon - Add actual app screenshots here]


Current Version (v1.0.0)

  • ✅ Real-time object detection
  • ✅ Camera & gallery support
  • ✅ History & favorites
  • ✅ TFLite integration
  • ✅ Bounding box visualization

Planned Features

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

Research & Development

  • 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - beginnener/CompVis_SmartBatikLens · GitHub
Skip to content

Repository files navigation

Smart Batik Lens 🎨

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.


⚡ Quick Start

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 run

Prasyarat: Flutter 3.10.4+, Dart SDK, Android Studio/Xcode Note: Model YOLOv8 Nano pre-trained dari Roboflow sudah included & siap pakai


🎯 Latar Belakang

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.


✨ Fitur Utama (v1.0.0)

Core Features

  • 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

Detection Capabilities

  • 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 yang Didukung

MotifAsalDeskripsi
MegamendungCirebonAwan berarak, gradasi warna halus
ParangYogyakarta/SoloGaris diagonal menyerupai huruf 'S'
Custom-Retrain dengan motif pilihan Anda

🛠️ Tech Stack & Dependencies

Mobile Application

ComponentTeknologiVersion
FrameworkFlutter^3.10.4
LanguageDart-
ML RuntimeTensorFlow Lite Flutter^0.11.0
Cameracamera^0.11.0
Storageshared_preferences^2.2.2
Image Processingimage, image_picker^4.0.17
UI FrameworkMaterial Design 3built-in

Computer Vision & Model

AspekDetail
Model ArchitectureYOLOv8 Nano (recommended)
AlternatifSSD MobileNet, EfficientDet
Framework TrainingUltralytics YOLO v8
RuntimeTensorFlow Lite (on-device)
Input Size300x300 atau 640x640 (RGB)
OutputBounding boxes + class IDs + confidence
Format Model.tflite (quantized INT8 optimal)

App Services Architecture

📦 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

Dataset Composition (untuk Training)

📊 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%

🚀 Instalasi & Setup

Prerequisites

Clone Repository

git clone https://github.com/beginnener/CompVis_SmartBatikLens.git
cd CompVis_SmartBatikLens

Install Dependencies

flutter pub get

Setup Model TFLite (Pre-trained Ready ✅)

Model 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:

  1. Verifikasi file ada di lib/assets/models/:
    • model.tflite (Model YOLOv8 Nano)
    • labels.txt (Class: megamendung, parang)
  2. Konfigurasi lib/features/lens/services/tflite_service.dart jika diperlukan:
    staticconstint inputSize =640; // Model input sizestaticconstint numResults =10; // Max detectionsstaticconstdouble threshold =0.5; // Confidence threshold (tunable)
  3. Jalankan aplikasi - model siap deteksi!

Training Custom Model: Lihat Model Training & Integration section

Detail di lib/assets/models/README.md

Jalankan Aplikasi

flutter run # Android default
flutter run -d <device_id># Device tertentu

Platform 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>

📁 Project Structure

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

Architecture

  • 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

🎓 Penggunaan Aplikasi

Setup Pertama

  1. Buka aplikasi di Android/iOS
  2. Berikan izin: Kamera & penyimpanan
  3. Tunggu model TFLite termuat (~2-3 detik, pertama kali saja)

Alur Deteksi

  1. Tap "Scan" → Buka kamera real-time
  2. Arahkan ke produk batik (jarak 30-50 cm, motif jelas)
  3. Deteksi otomatis: Bounding box + label + confidence score muncul real-time
  4. Tap kamera → Simpan snapshot
  5. Tap galeri → Analisis foto existing

Manajemen Hasil

  • History: Lihat semua deteksi yang pernah dilakukan
  • Favorites: Bookmark deteksi dengan tap bintang
  • Delete: Swipe/tap hapus untuk menghapus entry

Tips Hasil Optimal

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

Troubleshooting

IssueSolution
No bounding box appearsLower confidence threshold di tflite_service.dart
Detection too slowReduce model input size atau skip frames
Wrong detectionsRetrain model dengan dataset lebih beragam
App crashes on openCheck camera permissions & model file exists

🧪 Model Training & Integration

Model Saat Ini (Production Ready ✅)

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 v2Classes: 2 (megamendung, parang)Training Images: 932Annotation: YOLO v8 formatURL: https://universe.roboflow.com/haneki/batik-detection-f9hu4-vm8xn/dataset/2

Mengganti dengan Model Lain

Aplikasi 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)

Training Model Sendiri (Custom Dataset)

Opsi 1: Ultralytics YOLO

# 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

Opsi 2: TensorFlow Object Detection API

# 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_tensor

Panduan Dataset

Untuk 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

Integrasi Setelah Training

  1. Tempatkan model.tflite di lib/assets/models/
  2. Update labels.txt dengan nama kelas Anda
  3. Sesuaikan konstanta di tflite_service.dart jika perlu:
    • inputSize: Sesuaikan dengan input training
    • threshold: Mulai dari 0.5, tuning sesuai hasil
  4. Uji menyeluruh di perangkat target

Lihat panduan detail di IMPLEMENTATION_SUMMARY.md


🎯 Tantangan dan Solusi

1. Variasi Objek dan Distorsi Geometris

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

2. Kemiripan Visual dan Pola Repetitif

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

3. Keterbatasan Resource Perangkat Mobile

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

4. Lighting & Image Quality Variations

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

📊 Performa Model & App

Model Performance (YOLOv8 Nano + TFLite INT8)

MetricTargetCatatan
Model Size~6 MBQuantized INT8
Inference50-150msMid-range Android (SD 600+)
mAP@0.575-85%Bergantung dataset training
mAP@0.5:0.9545-55%COCO standard
Real-time FPS10-20 FPSLive detection frame rate

Platform Support

PlatformStatusCatatan
AndroidMin API 21 (Lollipop)
iOSMin iOS 11.0
WebTFLite limitation

System Requirements

LevelSpesifikasi
MinimumAndroid 5.0 (API 21) / iOS 11.0 • 2GB RAM • Autofocus camera • 100MB storage
RecommendedAndroid 8.0+ / iOS 13.0+ • 4GB RAM • 12MP+ camera • 200MB storage

Optimization Tips

Jika lag: 1) Reduce inputSize (320x320) 2) Use INT8 model 3) Skip frames 4) Lower numResults 5) Test on device


🤝 Kontributor

Proyek Akhir mata kuliah Computer Vision - Universitas Pendidikan Indonesia (2025)

Tim Pengembang:

Dosen Pengampu: Yaya Wihardi, S.Kom., M.Kom. | Fakultas MIPA, UPI


📄 Dokumentasi Tambahan


📝 Lisensi

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.


🙏 Acknowledgments

  • 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

Special Thanks

  • Museum Batik Indonesia - Referensi motif dan sejarah
  • Pengrajin batik Cirebon & Solo - Wawasan tentang motif tradisional
  • Beta testers - Feedback untuk improvement aplikasi

📞 Kontak & Support

Untuk Pertanyaan Teknis

Untuk Kolaborasi

  • Email: kiyahh@upi.edu
  • Subject: "Smart Batik Lens Collaboration - [Your Topic]"

Bug Reports

Saat melaporkan bug, sertakan:

  1. Device & OS version
  2. App version
  3. Steps to reproduce
  4. Screenshots/videos (jika ada)
  5. Error logs (jika ada)

🌟 Star History

Jika proyek ini membantu Anda, jangan lupa untuk memberikan ⭐ di GitHub!


📸 Screenshots

[Coming soon - Add actual app screenshots here]


Current Version (v1.0.0)

  • ✅ Real-time object detection
  • ✅ Camera & gallery support
  • ✅ History & favorites
  • ✅ TFLite integration
  • ✅ Bounding box visualization

Planned Features

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

Research & Development

  • 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages