1. Sebelum memulai
ML Kit adalah SDK seluler yang menghadirkan keahlian machine learning Google di perangkat untuk aplikasi Android dan iOS. Anda dapat menggunakan Vision dan Natural Language API yang canggih namun mudah digunakan untuk menyelesaikan tantangan umum dalam aplikasi atau membuat pengalaman pengguna baru. Semuanya didukung oleh model ML Google yang terbaik di kelasnya dan ditawarkan kepada Anda tanpa biaya.
Semua API ML Kit berjalan di perangkat, sehingga memungkinkan kasus penggunaan real-time di mana Anda ingin memproses live stream kamera. Ini juga berarti bahwa fungsionalitas tersebut tersedia secara offline.
Codelab ini akan memandu Anda melalui langkah-langkah sederhana untuk menambahkan Deteksi dan Pelacakan Objek (ODT) untuk gambar tertentu di aplikasi Android yang ada. Perlu diketahui bahwa codelab ini menggunakan beberapa pintasan untuk menyoroti penggunaan ODT ML Kit.
Yang akan Anda buat
Dalam codelab ini, Anda akan membuat aplikasi Android dengan ML Kit. Aplikasi Anda akan menggunakan ML Kit Object Detection dan Tracking API untuk mendeteksi objek pada gambar tertentu.Pada akhirnya, Anda akan melihat sesuatu yang mirip dengan gambar di sebelah kanan. |
Yang akan Anda pelajari
- Cara mengintegrasikan ML Kit SDK ke dalam aplikasi Android
- API Deteksi dan Pelacakan Objek ML Kit
Yang Anda butuhkan
- Versi terbaru Android Studio (v4.1.2+)
- Android Studio Emulator atau perangkat Android fisik
- Kode contoh
- Pengetahuan dasar tentang pengembangan Android di Kotlin
Codelab ini berfokus pada ML Kit. Konsep dan blok kode yang tidak-relevan akan dipoles dan disediakan sehingga Anda cukup salin dan tempel.
2. Memulai persiapan
Download Kode
Klik link berikut untuk mendownload semua kode untuk codelab ini:
Mengekstrak file zip yang didownload. Ini akan mengekstrak folder root (mlkit-android-main
) dengan semua resource yang Anda butuhkan. Untuk codelab ini, Anda hanya memerlukan sumber di subdirektori object-detection
.
Subdirektori deteksi objek di repositori mlkit-android berisi dua direktori:
- starter—Kode awal yang Anda build untuk codelab ini.
- final—Kode lengkap untuk aplikasi contoh yang sudah selesai.
3 Menambahkan API Deteksi dan Pelacakan Objek ML Kit ke project
Mengimpor aplikasi ke Android Studio
Mari mulai dengan mengimpor aplikasi awal ke Android Studio.
Buka Android Studio, pilih Import Project (Gradle, Eclipse ADT, etc.) lalu pilih folder starter
dari kode sumber yang telah Anda download sebelumnya.
Menambahkan dependensi untuk Deteksi dan Pelacakan Objek ML Kit
Dependensi ML Kit memungkinkan Anda mengintegrasikan ODT SDK ML Kit di aplikasi Anda. Tambahkan baris berikut ke akhir file app/build.gradle
project Anda:
build.gradle
dependencies {
// ...
implementation 'com.google.mlkit:object-detection:16.2.4'
}
Menyinkronkan project Anda dengan file gradle
Untuk memastikan bahwa semua dependensi tersedia untuk aplikasi Anda, Anda harus menyinkronkan project dengan file gradle pada tahap ini.
Pilih Sync Project with Gradle Files ( ) dari toolbar Android Studio.
(Jika tombol ini dinonaktifkan, pastikan Anda hanya mengimporstarter/app/build.gradle
, bukan seluruh repositori.)
4. Menjalankan aplikasi awal
Setelah Anda mengimpor project ke Android Studio dan menambahkan dependensi untuk Deteksi dan Pelacakan Objek ML Kit, Anda siap menjalankan aplikasi untuk pertama kalinya.
Hubungkan perangkat Android melalui USB ke host Anda, atau Start emulator Android Studio, dan klik Run ( ) di toolbar Android Studio.
Menjalankan dan menjelajahi aplikasi
Aplikasi akan diluncurkan di perangkat Android. Kode ini memiliki beberapa kode boilerplate untuk memungkinkan Anda mengambil foto atau memilih gambar preset, dan memberikannya ke pipeline deteksi dan pelacakan objek yang akan Anda buat dalam codelab ini. Mari jelajahi aplikasi sedikit sebelum menulis kode.
Pertama, terdapat Tombol ( ) di bagian bawah untuk:
- buka aplikasi kamera yang terintegrasi di perangkat/emulator Anda
- ambil foto di dalam aplikasi kamera Anda
- menerima gambar yang diambil di aplikasi awal
- tampilkan gambar
Coba tombol Ambil foto, ikuti petunjuk untuk mengambil foto, terima foto, dan amati foto yang ditampilkan di dalam aplikasi awal.
Ulangi beberapa kali untuk melihat cara kerjanya:
Kedua, ada 3 gambar preset yang dapat Anda pilih. Anda dapat menggunakan gambar ini nanti untuk menguji kode deteksi objek jika menjalankan pada emulator Android.
Pilih gambar dari 3 gambar preset. Perhatikan bahwa gambar muncul dalam tampilan yang lebih besar:
5. Menambahkan deteksi objek di perangkat
Pada langkah ini, Anda akan menambahkan fungsi ke aplikasi awal untuk mendeteksi objek dalam gambar. Seperti yang Anda lihat di langkah sebelumnya, aplikasi awal berisi kode boilerplate untuk mengambil foto dengan aplikasi kamera pada perangkat. Ada juga 3 gambar preset di aplikasi yang dapat Anda gunakan untuk mencoba deteksi objek jika Anda menjalankan codelab di emulator Android.
Setelah Anda memilih gambar, baik dari gambar preset atau mengambil foto dengan aplikasi kamera, kode boilerplate mendekode gambar tersebut menjadi instance Bitmap
, menampilkannya di layar dan memanggil metode runObjectDetection
dengan atribut gambar.
Pada langkah ini, Anda akan menambahkan kode ke metode runObjectDetection
untuk melakukan deteksi objek.
Menyiapkan dan menjalankan deteksi objek di perangkat pada gambar
Hanya ada 3 langkah mudah dengan 3 API untuk menyiapkan ODT ML Kit:
- siapkan gambar:
InputImage
- buat objek detektor:
ObjectDetection.getClient(options)
- hubungkan 2 objek di atas:
process(image)
Anda mencapai ini di dalam fungsi runObjectDetection(bitmap: Bitmap)
dalam file MainActivity.kt
.
/**
* ML Kit Object Detection Function
*/
private fun runObjectDetection(bitmap: Bitmap) {
}
Saat ini fungsi tersebut kosong. Lanjutkan ke langkah-langkah berikut untuk menerapkan ODT ML Kit. Seiring berjalannya waktu, Android Studio akan meminta Anda untuk menambahkan impor yang diperlukan:
com.google.mlkit.vision.common.InputImage
com.google.mlkit.vision.objects.ObjectDetection
com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions
Langkah 1: Buat InputImage
ML Kit menyediakan API sederhana untuk membuat InputImage
dari Bitmap
. Kemudian, Anda dapat memasukkan InputImage
ke dalam ML Kit API.
// Step 1: create ML Kit's InputImage object
val image = InputImage.fromBitmap(bitmap, 0)
Tambahkan kode di atas ke bagian atas runObjectDetection(bitmap:Bitmap)
.
Langkah 2: Buat instance pendeteksi
ML Kit mengikuti Pola Desain Builder. Anda akan meneruskan konfigurasi ke builder, lalu mendapatkan detector dari builder tersebut. Ada 3 opsi untuk mengonfigurasi (opsi dalam tebal digunakan dalam codelab ini):
- mode pendeteksi (gambar tunggal atau streaming)
- mode deteksi (satu atau beberapa deteksi objek)
- mode klasifikasi (aktif atau nonaktif)
Codelab ini untuk satu gambar - beberapa deteksi & klasifikasi objek. Tambahkan itu sekarang:
// Step 2: acquire detector object
val options = ObjectDetectorOptions.Builder()
.setDetectorMode(ObjectDetectorOptions.SINGLE_IMAGE_MODE)
.enableMultipleObjects()
.enableClassification()
.build()
val objectDetector = ObjectDetection.getClient(options)
Langkah 3: Feed gambar ke pendeteksi
Deteksi dan klasifikasi objek adalah pemrosesan asinkron:
- Anda mengirimkan gambar ke pendeteksi (melalui
process()
). - Pendeteksi bekerja dengan cukup baik.
- Pendeteksi akan melaporkan hasilnya kembali kepada Anda melalui callback.
Kode berikut melakukan hal tersebut (salin dan tambahkan ke kode yang ada di dalam fun runObjectDetection(bitmap:Bitmap)):
// Step 3: feed given image to detector and setup callback
objectDetector.process(image)
.addOnSuccessListener {
// Task completed successfully
debugPrint(it)
}
.addOnFailureListener {
// Task failed with an exception
Log.e(TAG, it.message.toString())
}
Setelah selesai, detektor memberi tahu Anda melalui:
- Jumlah total objek yang terdeteksi. Setiap objek yang terdeteksi dijelaskan dengan:
trackingId
: bilangan bulat yang digunakan untuk melacaknya lintas frame (TIDAK digunakan dalam codelab ini).boundingBox
: kotak pembatas objek.labels:
daftar label untuk objek yang terdeteksi (hanya ketika klasifikasi diaktifkan):index
(Dapatkan indeks label ini)text
(Dapatkan teks label ini termasuk "Perabotan Mode", "Makanan", "Perabot Rumah Tangga", "Tempat", "Tanaman")confidence
( float antara 0,0 sampai 1,0 dengan 1,0 berarti 100%)
Anda mungkin telah mengetahui bahwa kode tersebut melakukan proses cetak untuk hasil yang terdeteksi dengan debugPrint()
.
Tambahkan ke class MainActivity
:
private fun debugPrint(detectedObjects: List<DetectedObject>) {
detectedObjects.forEachIndexed { index, detectedObject ->
val box = detectedObject.boundingBox
Log.d(TAG, "Detected object: $index")
Log.d(TAG, " trackingId: ${detectedObject.trackingId}")
Log.d(TAG, " boundingBox: (${box.left}, ${box.top}) - (${box.right},${box.bottom})")
detectedObject.labels.forEach {
Log.d(TAG, " categories: ${it.text}")
Log.d(TAG, " confidence: ${it.confidence}")
}
}
}
Sekarang Anda siap menerima gambar untuk dideteksi.
Mari kita jalankan codelab dengan mengklik Run ( ) di toolbar Android Studio. Coba pilih gambar preset, atau ambil foto, lalu lihat jendela logcat() di dalam IDE.
Anda akan melihat sesuatu yang mirip dengan ini:
D/MLKit Object Detection: Detected object: 0
D/MLKit Object Detection: trackingId: null
D/MLKit Object Detection: boundingBox: (481, 2021) - (2426,3376)
D/MLKit Object Detection: categories: Food
D/MLKit Object Detection: confidence: 0.90234375
D/MLKit Object Detection: Detected object: 1
D/MLKit Object Detection: trackingId: null
D/MLKit Object Detection: boundingBox: (2639, 2633) - (3058,3577)
D/MLKit Object Detection: Detected object: 2
D/MLKit Object Detection: trackingId: null
D/MLKit Object Detection: boundingBox: (3, 1816) - (615,2597)
D/MLKit Object Detection: categories: Home good
D/MLKit Object Detection: confidence: 0.75390625
...yang berarti pendeteksi melihat 3 objek:
- Kategorinya adalah Makanan dan Kebaikan rumah.
- Tidak ada kategori yang ditampilkan untuk class ke-2 karena ini adalah class yang tidak diketahui.
- Tidak ada
trackingId
(karena ini adalah mode deteksi gambar tunggal). - Posisi di dalam persegi panjang
boundingBox
(misalnya (481, 2021) – (2426, 3376)) - Pendeteksi ini cukup yakin bahwa urutan pertama adalah Makanan (90% keyakinan—itu adalah salad).
Secara teknis, itulah yang Anda perlukan agar Deteksi Objek ML Kit dapat bekerja: Anda sudah mendapatkan semuanya saat ini! Selamat!
Di sisi UI, Anda masih berada di tahap saat memulai, tetapi Anda dapat memanfaatkan hasil yang terdeteksi di UI seperti menggambar kotak pembatas untuk membuat pengalaman yang lebih baik: mari kita lanjutkan ke langkah berikutnya – pasca-proses hasil yang terdeteksi!
6. Pascapemrosesan hasil deteksi
Pada langkah sebelumnya, Anda mencetak hasil yang terdeteksi ke logcat: sederhana dan cepat.
Di bagian ini, Anda akan memanfaatkan hasilnya ke dalam gambar:
- gambar kotak pembatas pada gambar
- gambar nama kategori dan keyakinan di dalam kotak pembatas
Memahami utilitas visualisasi
Terdapat beberapa kode boilerplate di dalam codelab untuk membantu Anda memvisualisasikan hasil deteksi. Manfaatkan utilitas ini untuk menyederhanakan kode visualisasi kami:
data class BoxWithText(val box: Rect, val text: String)
Ini adalah class data untuk menyimpan hasil deteksi objek untuk visualisasi.box
adalah kotak pembatas tempat objek ditemukan, dantext
adalah string hasil deteksi yang akan ditampilkan bersama dengan kotak pembatas objek.fun drawDetectionResult(bitmap: Bitmap, detectionResults: List<BoxWithText>): Bitmap
Metode ini menggambar hasil deteksi objek dalamdetectionResults
padabitmap
input dan menampilkan salinannya yang dimodifikasi.
Berikut adalah contoh output metode utilitas drawDetectionResult
:
Memvisualisasikan hasil deteksi ML Kit
Gunakan utilitas visualisasi untuk menggambar hasil deteksi objek ML Kit di atas gambar input.
Buka tempat Anda memanggil debugPrint()
dan tambahkan cuplikan kode berikut di bawahnya:
// Parse ML Kit's DetectedObject and create corresponding visualization data
val detectedObjects = it.map { obj ->
var text = "Unknown"
// We will show the top confident detection result if it exist
if (obj.labels.isNotEmpty()) {
val firstLabel = obj.labels.first()
text = "${firstLabel.text}, ${firstLabel.confidence.times(100).toInt()}%"
}
BoxWithText(obj.boundingBox, text)
}
// Draw the detection result on the input bitmap
val visualizedResult = drawDetectionResult(bitmap, detectedObjects)
// Show the detection result on the app screen
runOnUiThread {
inputImageView.setImageBitmap(visualizedResult)
}
- Anda dapat memulai dengan mengurai
DetectedObject
ML Kit dan membuat daftar objekBoxWithText
untuk menampilkan hasil visualisasi. - Lalu, Anda menggambar hasil deteksi di atas gambar input, menggunakan metode utilitas
drawDetectionResult
, dan menampilkannya di layar.
Menjalankan aplikasi
Sekarang klik Run ( ) di toolbar Android Studio.
Setelah aplikasi dimuat, tekan Tombol dengan ikon kamera, arahkan kamera ke sebuah objek, ambil foto, terima foto (di Aplikasi Kamera), atau Anda dapat dengan mudah mengetuk gambar preset. Anda akan melihat hasil deteksi; tekan Tombol lagi atau pilih gambar lain untuk mengulangi beberapa kali untuk menikmati ODT ML Kit terbaru!
7. Selamat!
Anda telah menggunakan ML Kit untuk menambahkan kemampuan Deteksi Objek ke aplikasi Anda:
- 3 langkah dengan 3 API
- Membuat Gambar Input
- Buat Pendeteksi
- Kirim Gambar ke Pendeteksi
Hanya itu yang Anda perlukan untuk mengaktifkan dan menjalankan!
Saat melanjutkan, Anda mungkin ingin menyempurnakan model tersebut: karena Anda dapat melihat bahwa model default hanya dapat mengenali 5 kategori— model tersebut bahkan tidak mengetahui pisau, garpu, dan botol. Lihat codelab lainnya di jalur machine learning On-device Learning - Deteksi Objek untuk mempelajari cara melatih model kustom.
Yang telah kita bahas
- Cara menambahkan Deteksi dan Pelacakan Objek ML Kit ke aplikasi Android Anda
- Cara menggunakan deteksi dan pelacakan objek di perangkat dalam ML Kit untuk mendeteksi objek dalam gambar
Langkah Berikutnya
- Jelajahi lebih banyak hal dengan ODT ML Kit dengan lebih banyak gambar dan video live untuk merasakan deteksi & akurasi klasifikasi dan performa
- Lihat Machine Learning Di Perangkat - Jalur pembelajaran Deteksi Objek untuk mempelajari cara melatih model kustom
- Terapkan ODT ML Kit di aplikasi Android Anda sendiri