Cara membuat aplikasi seluler visi komputer di Flutter

Diterbitkan: 2020-04-22

Fitur Machine Learning telah menjadi keharusan dalam aplikasi saat ini. Mereka dapat meningkatkan kepuasan dan memberi audiens Anda pengalaman aplikasi luar biasa yang mereka inginkan. Berkat pengoptimalan perangkat keras dan perangkat lunak terbaru, eksekusi model Pembelajaran Mesin berpindah dari cloud ke perangkat seluler itu sendiri.

Ini memiliki dampak besar pada pengalaman pengguna, dengan menghapus latensi respons dan mengatasi masalah privasi. Ketika kami memutuskan untuk membangun Planter, sebuah aplikasi yang membantu pengguna merawat tanaman rumah mereka, kami tahu bahwa hal yang dapat membuatnya menonjol di pasar aplikasi adalah AI.

Ide kami adalah menambahkan fungsionalitas untuk mengenali jenis tanaman rumah dari sebuah gambar, menggunakan teknik computer vision. Berkat optimasi TensorFlow Lite dari kinerja di perangkat, aplikasi dapat menjalankan model klasifikasi kami hanya di perangkat pengguna. Dalam artikel ini, saya akan menjelaskan cara cepat menyiapkan model klasifikasi gambar, dan menerapkannya dalam aplikasi yang dikembangkan dengan Flutter.

Membangun Modul Pembelajaran Mesin di Flutter – Langkah demi Langkah

Menangani Masalah Data Kecil

Langkah pertama dalam membangun model Machine Learning adalah pengumpulan data. Untuk membuat kumpulan data pelatihan, kami menggunakan Pengunduh Gambar Google yang memungkinkan kami mengunduh gambar tanaman dari Google Penelusuran, dengan hak berlabel untuk penggunaan kembali komersial, dengan skrip singkat berikut:

 $ googleimagesdownload --kata kunci "Zamioculcas zamiifolia" --usage_rights berlabel-untuk-digunakan kembali

Dataset akhir kami terdiri dari sekitar 70-170 gambar per spesies. Akan sangat sulit untuk mempersiapkan model klasifikasi gambar yang berkinerja baik dari awal dengan data yang sangat sedikit.

Untungnya, ada beberapa jaringan saraf tiruan pra-terlatih yang kuat yang tersedia untuk umum yang dapat digunakan untuk membangun pengklasifikasi gambar dengan akurasi tinggi, bahkan jika kumpulan data Anda hanya terdiri dari sekitar seratus contoh untuk setiap kelas. Teknik menggunakan dan memodifikasi model pra-terlatih ke kasus penggunaan tertentu disebut transfer learning.

Augmentasi Data

Untuk mengambil keuntungan maksimal dari dataset kami, kami menggunakan paket preprocessing ImageDataGenerator keras', yang menghasilkan kumpulan gambar tensor, menambahnya dengan cepat. Kami menggunakan transformasi berikut:

  • Membalik input secara horizontal: horizontal_flip = True
  • Mengatur nilai pergeseran kecerahan dari rentang: brightness_range = (0.75, 1.25)
  • Geser dengan intensitas yang disediakan: shear_range = 15
  • Rescaling, dengan mengalikan dengan nilai yang ditentukan: rescale=1./255
  • Memperbesar dan memperkecil: zoom_range=0.4
  • Bergeser ke segala arah: width_shift_range = 0,1, height_shift_range = 0,15
 train_datagen_augment =

           ImageDataGenerator(rotation_range = 30,

           horizontal_flip = Benar,

           brightness_range = (0.75,1.25),

           rentang_geser = 15,

           skala ulang=1./255,

           rentang_zoom=0.4,

           lebar_shift_range = 0,1,

           tinggi_pergeseran_rentang = 0,15)

Pelatihan

Kami menggunakan NASNet-Mobile, jaringan saraf convolutional yang dilatih pada lebih dari satu juta gambar dari kumpulan data ImageNet. Arsitektur NasNetMobile terdiri dari satu set blok yang dibangun dengan sel jaringan saraf.

Block adalah modul operasional yang mencakup transformasi yang diketahui dari jaringan saraf pengklasifikasi gambar, termasuk: konvolusi normal, konvolusi yang dapat dipisahkan, max-pooling, average-pooling, pemetaan identitas, dll. Jaringan telah dilatih untuk menetapkan ke gambar 1 dari 1000 kategori yang mencakup hewan, bunga, dan furnitur. Akibatnya, jaringan telah 'mempelajari' representasi fitur yang kaya untuk berbagai gambar.

Kami membuat model kami dengan menyelesaikan langkah-langkah berikut:

  • Hapus lapisan terakhir dari jaringan pra-terlatih
  • Tambahkan model konvolusi di akhir jaringan
  • Bekukan semua lapisan dalam jaringan gabungan kecuali yang berasal dari model yang ditambahkan
  • Latih model sampai akurasi berhenti meningkat
  • Cairkan semua lapisan di blok konvolusi beku terakhir dari model pra-terlatih
  • Latih model sampai akurasi berhenti meningkat
  • Ulangi poin 5 dan 6 sebanyak lima kali
  • Cabut seluruh model, dan latih hingga akurasi berhenti meningkat

Evaluasi Model

Model klasifikasi Planter mencoba menetapkan jenis tanaman ke tanaman rumah, berdasarkan fotonya. Model mengembalikan tiga jenis yang diberi probabilitas tertinggi, dari mana pengguna dapat memilih satu. Selama evaluasi model, kami menggunakan dua metrik berikut:

  • kategori_akurasi,
  • top_k_categorical_accuracy (dengan k=3).

Grafik berikut menyajikan akurasi kategoris untuk setiap periode pelatihan model kami.

Akurasi kategoris untuk setiap zaman pelatihan

Akurasi kategoris akhir untuk set evaluasi adalah 0,870, dan akurasi kategoris 3 teratas adalah 0,916. Hasil ini sangat memuaskan, dengan mempertimbangkan kecilnya ukuran dataset pelatihan yang digunakan.

Konversi Model

Jika kita ingin model keras digunakan di aplikasi seluler, model itu perlu dikonversi ke objek TensorFlow Lite FlatBuffer. Ini dapat dilakukan dengan kode yang ditunjukkan pada contoh di bawah ini.

 impor tensorflow.lite sebagai lite

keras_model_path = "model/keras_model"

tflite_model_path = "model/model.tflite"

model.save(keras_model_path)

converter = lite.TFLiteConverter.from_keras_model_file(keras_model_path)

tflite_model = converter.convert()

buka(tflite_model_path, "wb").write(tflite_model)

Sekarang kami memiliki model yang dioptimalkan yang disimpan di jalur model/model.tflite, kami dapat dengan mudah menggunakannya di aplikasi seluler asli, menggunakan:

  • Core ML – untuk aplikasi iOS
  • Pustaka Dukungan Android TensorFlow Lite – untuk aplikasi Android

Sekarang saya akan menunjukkan kepada Anda, berdasarkan pengalaman kami dengan Planter, cara menggunakan model itu dengan Flutter.

Mengapa Berkibar?

Flutter adalah toolkit UI yang dimiliki oleh Google. Itu dibuat untuk membangun aplikasi yang dikompilasi secara asli untuk seluler, web, dan desktop dari satu basis kode. Jika Anda bertanya-tanya apakah Anda harus menggunakan Flutter, saya sarankan membaca artikel ini, yang merupakan studi kasus Topline oleh Abbey Road Studios yang dikembangkan di Flutter oleh Miquido.

Kita dapat memanfaatkan model kita dengan perpustakaan tflite. Ini adalah plugin Flutter untuk mengakses TensorFlow Lite API. Ini mendukung klasifikasi gambar, deteksi objek, Pix2Pix, Deeplab dan PoseNet pada platform iOS dan Android.

Ikon layanan pengembangan lintas platform

Ingin tahu tentang pengembangan Flutter?

Belajarlah lagi

Dalam proses pengembangan aplikasi kami, kami harus menyelesaikan langkah-langkah berikut:

  • Tambahkan tflite sebagai dependensi di file pubspec.yaml kami
  • Buat folder aset dan tempatkan file label dan file model di dalamnya.
  • Di pubspec.yaml, tambahkan:
 aktiva:

   - assets/labels.txt

   - assets/mobilenet_v1_1.0_224.tflite
  • Impor perpustakaan tflite:
 impor 'paket:tflite/tflite.dart';
  • Muat model dan label:
 String res = menunggu Tflite.loadModel(

  model: "assets/model.tflite",

  labels: "assets/labels.txt",

  numThreads: 1 // default ke 1

);
  • Jalankan model pada gambar (buat prediksi):
 var recognition = menunggu Tflite.runModelOnImage(

        jalur: tfResizedImage.path, 

        gambarStd: 255.0, 

        jumlahHasil: 3, 

        ambang batas: 0,00001, 

        asinkron: benar    

 );

Output prediksi memiliki format yang ditunjukkan pada contoh berikut:

 [{keyakinan: 0.03441339731216431, indeks: 46, label: Vriesea splendens}, {keyakinan: 2.086162567138672e-7, indeks: 7, label: Aphelandra squarrosa}, {keyakinan: 1.4901161193847656e-7, indeks: 19, label: Fern arum }]
  • Sumber daya rilis:
 menunggu Tflite.close();

Hasil Akhir

Planter memungkinkan Anda untuk menambahkan tanaman dengan gambar ke perpustakaan Anda. Anda bisa mendapatkan gambar dengan mengambil foto tanaman Anda, atau memilih salah satu dari galeri ponsel. Model klasifikasi tanaman rumah yang disertakan mengembalikan tiga spesies yang dikenali dengan probabilitas tertinggi, dan menyajikannya dalam daftar.

Mengklik spesies akan membawa Anda ke tampilan ringkasan tanaman, yang berisi formulir yang telah diisi sebelumnya dengan jadwal penyiraman dan pemupukan yang disarankan, dan beberapa informasi tambahan tentang tanaman. Dalam alur di bawah ini, Anda dapat melihat contoh di mana Zamioculcas zamiifolia dikenali dalam gambar yang diambil dengan telepon kamera.

Bagaimana Planter bekerja?
Penanam - sistem pengenalan
Bagaimana cara menambahkan tanaman di Planter

Pindahkan Pembelajaran Mesin Anda ke Seluler!

Dalam artikel ini, saya ingin meyakinkan Anda bahwa menambahkan fitur AI yang menyenangkan bagi pengguna di aplikasi seluler Anda bisa menjadi sederhana dan cepat. Terlebih lagi, memindahkan eksekusi model ke seluler memberi pengguna Anda pengalaman pengguna yang menyenangkan dengan menghapus latensi respons API. Ini juga membantu memastikan keamanan data, karena pengiriman data ke cloud tidak diperlukan.

Anda dapat memperoleh manfaat besar dari penggunaan Flutter dan kemampuannya untuk mengompilasi kode untuk aplikasi asli iOS dan Android secara bersamaan. Dengan sedikit usaha, Anda dapat membuat aplikasi Anda menonjol di pasar, dan memaksimalkan retensi audiens aplikasi Anda.

Siap untuk proyek Anda berikutnya? Jangan ragu dan hubungi kami!