Aplikasi Flutter yang menjalankan model YOLOv8-seg (versi TFLite float16) secara on-device untuk mendeteksi speech bubble pada gambar manga dan mengecatnya putih. Port dari proyek Python Faralha/Bubble-Cleaner ke Flutter + TFLite agar bisa berjalan di Android tanpa koneksi internet.
- Pilih gambar dari galeri.
- Inference + masking + cleaning dijalankan di background isolate (UI tidak freeze).
- Hasil cleaning ditampilkan berdampingan dengan gambar asli.
- Simpan hasil ke galeri handphone (album
BubbleCleaner).
- Letterbox gambar input ke 640×640.
- TFLite inference menghasilkan tensor deteksi
[1, 41, 8400](atau transposed) + proto-mask[1, 160, 160, 32]. - NMS pada deteksi (IoU 0.5, confidence 0.65).
- Rakit instance mask dari kombinasi linear proto × coefficients per deteksi, lalu sigmoid + threshold 0.5.
- Un-letterbox mask ke koordinat gambar asli.
- Dilate (21) + Erode (5) → net ekspansi ~8px supaya outline bubble tercover.
- Cat semua piksel mask jadi putih, encode PNG.
lib/
main.dart # UI + bootstrap + isolate plumbing
bubble_cleaner.dart # Inference engine + post-processing
assets/
models/best_float16.tflite # YOLOv8-seg (~45 MB)
Prasyarat: Flutter SDK ≥ 3.11, Android device/emulator (API 24+).
flutter pub get
flutter run -d <android-device-id>Untuk release build:
flutter build apk --release- Model di-load sekali di main isolate via
rootBundle, lalu bytes-nya dikirim ke worker isolate untuk inference. Ini menghindari error "binding has not yet been initialized" yang muncul jikaInterpreter.fromAssetdipanggil di background isolate. - Layout output tensor TFLite Ultralytics dapat berupa
[1, channels, anchors]atau[1, anchors, channels]. Loader meng-introspeksi shape viagetOutputTensors()dan mengadaptasi parsing. - Penyimpanan galeri memakai package
gal; permission Android (WRITE_EXTERNAL_STORAGE≤ SDK 29,ACCESS_MEDIA_LOCATION) didefinisikan diAndroidManifest.xml. - Aset
.tflitedikecualikan dari kompresi APK lewatandroidResources { noCompress += "tflite" }.
| Package | Fungsi |
|---|---|
tflite_flutter |
Runtime TFLite |
image |
Decode/encode + morfologi |
image_picker |
Pilih gambar dari galeri |
gal |
Simpan hasil ke galeri sistem |
- Akselerasi GPU/NNAPI delegate.
- Persistent worker isolate (saat ini interpreter dibuat ulang per klik Clean — ~100 ms overhead).
- Native (C++) image-processing untuk loop letterbox & morfologi.