Skip to content

Alterkai/android-bubble-cleaner

 
 

Repository files navigation

Manga Bubble Cleaner — Flutter Edge AI

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.

Fitur

  • 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).

Pipeline

  1. Letterbox gambar input ke 640×640.
  2. TFLite inference menghasilkan tensor deteksi [1, 41, 8400] (atau transposed) + proto-mask [1, 160, 160, 32].
  3. NMS pada deteksi (IoU 0.5, confidence 0.65).
  4. Rakit instance mask dari kombinasi linear proto × coefficients per deteksi, lalu sigmoid + threshold 0.5.
  5. Un-letterbox mask ke koordinat gambar asli.
  6. Dilate (21) + Erode (5) → net ekspansi ~8px supaya outline bubble tercover.
  7. Cat semua piksel mask jadi putih, encode PNG.

Struktur

lib/
  main.dart            # UI + bootstrap + isolate plumbing
  bubble_cleaner.dart  # Inference engine + post-processing
assets/
  models/best_float16.tflite   # YOLOv8-seg (~45 MB)

Menjalankan

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

Catatan Implementasi

  • 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 jika Interpreter.fromAsset dipanggil di background isolate.
  • Layout output tensor TFLite Ultralytics dapat berupa [1, channels, anchors] atau [1, anchors, channels]. Loader meng-introspeksi shape via getOutputTensors() dan mengadaptasi parsing.
  • Penyimpanan galeri memakai package gal; permission Android (WRITE_EXTERNAL_STORAGE ≤ SDK 29, ACCESS_MEDIA_LOCATION) didefinisikan di AndroidManifest.xml.
  • Aset .tflite dikecualikan dari kompresi APK lewat androidResources { noCompress += "tflite" }.

Dependencies

Package Fungsi
tflite_flutter Runtime TFLite
image Decode/encode + morfologi
image_picker Pilih gambar dari galeri
gal Simpan hasil ke galeri sistem

Out of Scope

  • 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.

About

Yet Another Bubble Cleaner Inference for Android, locally, configurable.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Dart 38.5%
  • C++ 30.8%
  • CMake 24.1%
  • Swift 2.7%
  • HTML 1.9%
  • C 1.8%
  • Other 0.2%