Model adalah sebuah file yang sudah dilatih dengan suatu algoritma tertentu untuk mengenali jenis pattern atau pola atas sekumpulan data yang disebut sebagai datasets. [1]
simplenya, model ini sama seperti otak manusia yang sudah pernah belajar pertambahan dengan soal latihan “1+1=2”.
“1+1=2” ini adalah datasets.
dan dari proses belajar itu otak kita gak cuma tau kalo “1+1=2″ kan? tapi bisa tahu juga kalo “2+2=4” dst.. kenapa? karena ada suatu pattern atau pola yang sama yaitu “pertambahan”.
Sebelum membuat model, hal pertama yang harus kita lakukan adalah menyiapkan datasets, silahkan kamu cari gambar “kucing dan anjing” di situs https://www.kaggle.com atau bisa juga cari di google images, terserah kamu.
setelah itu, pergi ke https://teachablemachine.withgoogle.com kemudian klik “Get Started” → “Image Project”.
kemudian ubah nama classnya menjadi “Kucing” dan “Anjing” seperti ini :
Jika kamu ingin menambahkan class baru, “Monyet” misalnya, klik button “Add a class”
lalu upload datasets yang telah didownload tadi dengan cara klik “Upload”, setelah berhasil terupload, silahkan klik “Train Model”, pada proses ini jangan pindah ke tab lain, tunggu aja sampai selesai (mungkin agak lama kalau datasetnya cukup banyak).
Setelah proses training selesai, kita akan Export model tersebut, tapi sebelum itu kamu bisa coba test modelnya dulu untuk mastiin aja apakah bisa berjalan dengan baik.
kalau dirasa sudah oke, silahkan export modelnya dengan cara klik “Export Model”
lalu klik tab “Tensorflow Lite” dan Model conversion type pilih yang “Floating Point”.
terakhir, klik “Download my model”
Saya asumsikan kamu sudah bisa membuat project baru di Flutter, jadi saya skip aja bagian tersebut.
setelah project selesai dibuat, tambahkan package berikut di file pubspec.yaml
:
image_picker: ^0.6.7+14tflite: ^1.1.1
untuk tujuan pembelajaran, saya sarankan kita menggunakan versi package yang sama saja, agar bisa berjalan dengan lancar.
kemudian, silahkan buat folder “assets” dan jangan lupa menambahkannya ke pubspec.yaml
supaya bisa diakses oleh aplikasi Flutter kita.
setelah itu extract file model yang telah didownload tadi, dan pindahkan semua isinya ke dalam folder assets.
Opsional : kamu bisa hapus angka-angka pada file
labels.txt
agar outputnya nanti lebih rapi :
Sebelum menggunakan kedua package tersebut, ada beberapa hal yang harus kita atur supaya tidak muncul error saat dicompile nanti.
A. tflite
buka file android/app/build.gradle
kemudian tambahkan kode berikut ke dalam block android
:
aaptOptions {
noCompress 'tflite'
noCompress 'lite'
}
dan pada block android
→ defaultConfig
ubah minSdkVersion
menjadi 19
jika kamu mendapatkan build error seperti ini “vector
file not found”, buka ios/Runner.xcworkspace
melalui Xcode, kemudian klik Runner → Targets → Runner → Build Settings.
cari “Compile Sources As” dan ubah valuenya menjadi “Objective-C++”
B. image_picker
untuk android, kita tidak perlu melakukan konfigurasi apapun.
buka file ios/Runner/Info.plist
dan tambahkan kode berikut di dalam block <dict>
:
<key>NSPhotoLibraryUsageDescription</key><string>Untuk ...</string><key>NSCameraUsageDescription</key><string>Untuk ...</string><key>NSMicrophoneUsageDescription</key><string>Untuk ...</string>
Silahkan copas kode berikut ke dalam file main.dart :
Logonya bisa kamu download terlebih dahulu di sini, dan pindahkan ke dalam folder assets!
Penjelasan kode :
- Kode di samping akan mengecek apakah user sudah upload gambar atau belum, jika sudah maka akan menampilkan gambar yang diupload oleh user, dan jika belum maka akan menampilkan logo aplikasi kita.
Kalau kita jalankan aplikasinya, maka hasilnya kira2 akan seperti ini :
Silahkan copas lagi kode berikut ke dalam file main.dart :
Penjelasan kode :
- Pertama, kita load model ML kita pada saat aplikasi pertama kali dibuka.
- Pertama, user akan memilih gambar dari galeri atau kamera, kalau sudah selesai, tampung di variabel image.
- kemudian convert image tersebut menjadi
File
agar bisa dipakai di widgetImage.File
(sebelumnya tipe datanyaPickedFile
) - lalu panggil method
classifyImage()
untuk memprediksi gambar apa yang diupload user.
- kode di samping adalah method untuk melakukan prediksi gambar apakah gambar yang diupload user itu gambar kucing atau anjing.
- yang perlu diperhatikan di sini adalah
numResults
, itu valuenya 2 karena di model yang kita buat ada 2 class yaitu class “Kucing” dan class “Anjing”.
- Terakhir, kita melakukan
close()
pada packagetflite
agar tidak terjadi Memory leak
Finally… ! 🥳 🎉
Silahkan kamu test sendiri apakah bisa berjalan dengan baik? atau justru hasilnya sama persis seperti meme di atas? :v
Full Source Code nya bisa diakses di sini : https://github.com/al-fin/kucing_anjing