Mengintegrasikan Model Kustom ke dalam Aplikasi Anda

1. Sebelum memulai

Pada Codelab pertama dalam seri ini, Anda membuat aplikasi yang sangat sederhana yang menggunakan Pelabelan Gambar untuk mengurai konten gambar. Anda meneruskan gambar bunga aster, dan gambar itu memberi Anda kembali bahwa itu melihat hal-hal seperti kelopak atau langit. Kemudian, dalam Codelab kedua Anda beralih ke Python untuk melatih model baru, kustom, yang mengenali lima jenis bunga yang berbeda.

Dalam codelab ini, Anda akan mengupdate aplikasi dari lab pertama dengan model dari lab kedua.

Anda bisa mendapatkan kode sumber lengkap untuk codelab ini dengan membuat clone repositori ini. Anda akan melihat sub-direktori untuk Android dan iOS. Kode codelab sebelumnya tersedia sebagai ImageClassifierStep1 jika Anda ingin mengikuti. Kode yang sudah selesai untuk codelab ini tersedia sebagai ImageClassifierStep2.

Prasyarat

  • Anda seharusnya sudah menyelesaikan dua codelab pertama di jalur pembelajaran ini

Yang akan Anda buat dan pelajari

  • Mengintegrasikan model kustom, yang dilatih di lab sebelumnya, ke dalam aplikasi Android atau iOS

Yang Anda butuhkan

  • Android Studio, tersedia di developer.android.com/studio untuk bagian Android dalam lab
  • Xcode, tersedia di Apple App Store, untuk bagian iOS lab

2. Dapatkan Aplikasi Awal

Pertama-tama, Anda memerlukan aplikasi dari Membuat Aplikasi Computer Vision pertama Anda di Android atau Codelab iOS. Jika Anda telah melalui lab, status tersebut akan disebut ImageClassifierStep1. Jika tidak ingin mengikuti lab, Anda dapat meng-clone versi yang sudah selesai dari repo

Buka aplikasi di Android Studio, lakukan update apa pun yang Anda perlukan, dan jika sudah siap, jalankan aplikasi untuk memastikannya berfungsi. Anda akan melihat yang seperti ini:

f3703d45d1332d1d.png

Ini adalah aplikasi yang sangat sederhana, tetapi menampilkan beberapa fungsi yang sangat canggih hanya dengan sedikit kode. Namun, jika Anda ingin bunga ini dikenali sebagai daisy, dan bukan hanya sebagai bunga, Anda harus mengupdate aplikasi agar menggunakan model kustom dari Membuat model kustom untuk codelab pengklasifikasi gambar Anda.

3 Mengupdate build.gradle untuk menggunakan Model ML Kit Kustom

  1. Menggunakan Android Studio, temukan file build.gradle tingkat aplikasi. Cara termudah untuk melakukannya adalah di penjelajah project. Pastikan Android dipilih di bagian atas, dan Anda akan melihat folder untuk Gradle Script di bagian bawah.
  2. Buka modul yang ditujukan untuk Module, dengan nama aplikasi diikuti dengan '.app' seperti yang ditunjukkan di sini – (Modul: ImageClassifierStep1.app):

8fe1d04b40610047.png

  1. Di bagian bawah file, temukan setelan dependensi. Di sana, Anda akan melihat baris ini:
implementation 'com.google.mlkit:image-labeling:17.0.1'

Nomor versi mungkin berbeda. Selalu temukan nomor versi terbaru dari situs ML Kit di: https://developers.google.com/ml-kit/vision/image-labeling/android

  1. Ganti ini dengan referensi library pelabelan gambar kustom. Nomor versi untuk ini dapat ditemukan di: https://developers.google.com/ml-kit/vision/image-labeling/custom-models/android
implementation 'com.google.mlkit:image-labeling-custom:16.3.1'
  1. Selain itu, Anda akan menambahkan model .tflite yang telah Anda buat di lab sebelumnya. Anda tidak ingin model ini dikompresi saat Android Studio mengompilasi aplikasi, jadi pastikan Anda menggunakan setelan ini di bagian Android dari file build.gradle yang sama:
aaptOptions{
    noCompress "tflite"
}

Pastikan file tidak berada di setelan lain. Tag tersebut harus ditempatkan secara langsung di bawah tag android. Berikut contohnya:

62d546bff11d2a50.png

4. Menambahkan Model TFLite

Pada codelab sebelumnya, Anda membuat model kustom dan mendownloadnya sebagai model.tflite.

Di project Anda, temukan folder assets yang saat ini berisi flower1.jpg. Salin model ke folder tersebut sebagai berikut:

  1. Klik kanan folder Assets di Android Studio. Pada menu yang terbuka, pilih Buka di Finder. ('Show in Explorer' di Windows, dan 'Show in Files' di Linux.)

db30b47e419a326b.png

  1. Anda akan diarahkan ke direktori di sistem file. Salin file model.tflite ke direktori tersebut, bersama flower1.jpg.

36de0c51bec1c19e.png

Android Studio akan diupdate untuk menampilkan kedua file dalam folder aset:

e9f4e9f394d9b357.png

Kini Anda siap untuk memperbarui kode.

5. Memperbarui kode untuk model kustom

Langkah pertama adalah menambahkan beberapa kode untuk memuat model kustom.

  1. Di file MainActivity, tambahkan kode berikut ke onCreate, tepat di bawah baris yang bertuliskan setContentView(R.layout.activity_main).

Tindakan ini akan menggunakan LocalModel untuk mem-build dari aset model.tflite. Jika Android Studio mengeluh dengan mengubah 'LocalModel' menjadi merah, tekan ALT + Enter untuk mengimpor library. File ini akan menambahkan impor ke com.google.mlkit.common.model.LocalModel untuk Anda.

val localModel = LocalModel.Builder()
        .setAssetFilePath("model.tflite")
        .build()

Sebelumnya, Anda menggunakan model default di pengendali btn.setOnClickListener. File ini disiapkan dengan kode ini:

val labeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)

Anda akan menggantinya untuk menggunakan model kustom.

  1. Menyiapkan objek opsi kustom:
val options = CustomImageLabelerOptions.Builder(localModel)
        .setConfidenceThreshold(0.7f)
        .setMaxResultCount(5)
        .build()

Tindakan ini akan menggantikan opsi default dengan kumpulan yang disesuaikan. Nilai minimum keyakinan menetapkan standar kualitas prediksi yang akan ditampilkan. Jika Anda melihat kembali sampel di bagian atas codelab ini, tempat gambar adalah daisy, Anda memiliki 4 prediksi, masing-masing dengan nilai di sampingnya, seperti 'Sky' adalah .7632.

Anda dapat memfilter hasil yang berkualitas lebih rendah secara efektif dengan menggunakan nilai minimum keyakinan yang tinggi. Misalnya, menetapkannya ke 0,9 tidak akan menampilkan label apa pun dengan prioritas yang lebih rendah dari label tersebut. setMaxResultCount() berguna dalam model dengan banyak class, tetapi karena model ini hanya memiliki 5, Anda akan membiarkannya di 5.

Setelah memiliki opsi untuk pemberi label, Anda dapat mengubah pembuatan instance pemberi label menjadi:

val labeler = ImageLabeling.getClient(options)

Kode Anda lainnya akan berjalan tanpa modifikasi. Cobalah!

dd40c36c4edbb33.png

Di sini Anda dapat melihat bahwa bunga ini sekarang diidentifikasi sebagai daisy dengan probabilitas 0,959.

Misalnya, Anda menambahkan gambar bunga kedua, lalu membukanya kembali:

8556a5fbea487842.png

Bunganya diidentifikasi sebagai bunga mawar.

Anda mungkin bertanya-tanya mengapa tertulis mawar, bukan hanya "mawar". Hal ini karena dalam set data, label diberikan oleh nama folder, dan sayangnya nama folder tersebut sedikit tidak konsisten, terkadang menggunakan bentuk tunggal (seperti 'daisy') dan terkadang menggunakan bentuk jamak (seperti 'mawar'). Jangan keliru memahami hal ini dengan model yang mencoba menghitung item pada gambar. Model ini jauh lebih sederhana dan hanya dapat mengidentifikasi jenis bunga!

6. Dapatkan Aplikasi Mulai iOS

  1. Pertama-tama, Anda memerlukan aplikasi dari Codelab pertama. Jika Anda telah melalui lab, status tersebut akan disebut ImageClassifierStep1. Jika tidak ingin mengikuti lab, Anda dapat meng-clone versi yang sudah selesai dari repo. Perlu diperhatikan bahwa pod dan .xcworkspace tidak ada dalam repo, jadi sebelum melanjutkan ke langkah berikutnya, pastikan untuk menjalankan'pod install' dari direktori yang sama dengan .xcproject.
  2. Buka ImageClassifierStep1.xcworkspace di Xcode. Perlu diperhatikan bahwa Anda harus menggunakan .xcworkspace dan bukan .xcproject karena telah memaketkan ML Kit menggunakan pod, dan ruang kerja akan memuatnya.

Untuk bagian selanjutnya di lab ini, saya akan menjalankan aplikasi dalam simulator iPhone yang akan mendukung target build dari codelab. Jika ingin menggunakan perangkat Anda sendiri, Anda mungkin perlu mengubah target build di setelan project agar sesuai dengan versi iOS Anda.

Jalankan Kartu dan Anda akan melihat tampilan seperti ini:

9e151ed18f99fb98.png

Perhatikan klasifikasi yang sangat umum – kelopak, bunga, langit. Model yang Anda buat di codelab sebelumnya dilatih untuk mendeteksi 5 jenis bunga, termasuk yang ini daisy.

Di sisa codelab ini, Anda akan melihat hal yang diperlukan untuk mengupgrade aplikasi dengan model kustom.

7. Menggunakan Pod Pelabel Gambar ML Kit Kustom

Aplikasi pertama menggunakan file pod untuk mendapatkan library dan model Pelabel Gambar ML Kit dasar. Anda harus memperbaruinya untuk menggunakan library pelabelan gambar kustom.

  1. Temukan file bernama podfile di direktori project Anda. Buka saja, dan Anda akan melihat tampilan seperti ini:
platform :ios, '10.0'

target 'ImageClassifierStep1' do
        pod 'GoogleMLKit/ImageLabeling'
end
  1. Ubah deklarasi pod dari ImageLabeling menjadi ImageLabelingCustom, seperti ini:
platform :ios, '10.0'

target 'ImageClassifierStep1' do
        pod 'GoogleMLKit/ImageLabelingCustom'
end
  1. Setelah selesai, gunakan terminal untuk membuka direktori yang berisi podfile (serta .xcworkspace) lalu jalankan pod install.

bb5d78eb7c7ab975.png

Setelah beberapa saat, library MLKitImageLabeling akan dihapus, dan library kustom yang ditambahkan. Sekarang Anda dapat membuka .xcworkspace untuk mengedit kode.

8 Menambahkan Model TFLite ke Xcode

Di codelab sebelumnya, Anda membuat model kustom dan mendownloadnya sebagai model.tflite. Jika Anda belum memilikinya, kembali dan jalankan codelab tersebut, atau lihat kode kolab di sini. Jika Anda tidak memiliki akses ke Google Colab, notebook tersedia di link ini

  1. Dengan ruang kerja terbuka di Xcode, tarik model.tflite ke project Anda. Folder harus berada di folder yang sama dengan file Anda lainnya, seperti ViewController.swift atau Main.storyboard.
  2. Dialog akan muncul dan menampilkan opsi untuk menambahkan file. Pastikan Tambahkan ke Target dipilih, atau model tidak akan dipaketkan dengan aplikasi saat di-deploy ke perangkat.

Perhatikan bahwa entri 'Add to Targets' akan memiliki ImageClassifierStep1 jika Anda memulai dari itu dan melanjutkan melalui lab ini langkah demi langkah atau ImageClassifierStep2 (seperti yang ditunjukkan) jika Anda melompat ke depan ke kode selesai.

5b6a7f40c73f0f1f.png

Tindakan ini akan memastikan bahwa Anda dapat memuat model. Anda akan melihat cara melakukannya pada langkah berikutnya.

9. Memperbarui Kode untuk Model Kustom

  1. Buka file ViewController.swift. Anda mungkin melihat error pada 'import MLKitImageLabeling' di bagian atas file. Hal ini dikarenakan Anda menghapus library pelabelan gambar generik saat mengupdate file pod. Jangan ragu untuk menghapus baris ini, dan perbarui dengan menyertakan hal-hal berikut:
import MLKitVision
import MLKit
import MLKitImageLabelingCommon
import MLKitImageLabelingCustom

Mungkin mudah untuk membaca informasi ini dengan cepat dan merasa bahwa mereka mengulangi kode yang sama. Namun, Anda dapat menggunakan "Common" dan "Custom" di bagian akhir.

  1. Berikutnya, Anda akan memuat model khusus yang Anda tambahkan di langkah sebelumnya. Cari fungsi getLabels(). Di bawah baris yang bertuliskan visionImage.orientation = image.imageOrientation, tambahkan baris berikut:
// Add this code to use a custom model
let localModelFilePath = Bundle.main.path(forResource: "model", ofType: "tflite")
let localModel = LocalModel(path: localModelFilePath!)
  1. Temukan kode untuk menentukan opsi bagi ImageLabeler generik. Anda mungkin mendapatkan error karena library tersebut telah dihapus:
let options = ImageLabelerOptions()

Ganti kode tersebut dengan kode ini, untuk menggunakan CustomImageLabelerOptions, dan yang menentukan model lokal:

let options = CustomImageLabelerOptions(localModel: localModel)

...dan selesai! Coba jalankan aplikasi Anda sekarang. Jika Anda mencoba mengklasifikasikan gambar, seharusnya gambar ini lebih akurat dan memberi tahu Anda bahwa Anda melihat daisy dengan probabilitas tinggi!

238cd21748a97cf4.png

Misalnya, Anda menambahkan gambar bunga kedua, lalu membukanya kembali:

75f3970a6b509bfe.png

Aplikasi berhasil mendeteksi bahwa gambar ini cocok dengan label 'mawar'.

10. Selamat!

Sekarang Anda telah beralih dari membuat aplikasi yang menggunakan model generik untuk mengenali konten gambar, lalu membuat model ML Anda sendiri untuk mengenali hal-hal tertentu, seperti bunga, lalu mengupdate aplikasi untuk menggunakan model kustom Anda.

Tentu saja, aplikasi yang dihasilkan sangat terbatas karena bergantung pada aset gambar yang dipaketkan. Namun, bagian ML berfungsi dengan baik. Anda dapat, misalnya, menggunakan Kamera AndroidX untuk mengambil frame dari feed live dan mengklasifikasikannya untuk melihat bunga yang dikenali ponsel Anda.

Dari sini, kemungkinan tidak terbatas – dan jika Anda memiliki data sendiri untuk sesuatu selain bunga, Anda memiliki dasar dari apa yang diperlukan untuk membuat aplikasi yang mengenalinya menggunakan Computer Vision. Ini hanyalah beberapa langkah pertama menuju dunia yang jauh lebih luas, dan mudah-mudahan Anda senang menggunakannya!