Hal yang akan Anda buat
Dalam tutorial ini, Anda akan mendownload model TensorFlow Lite kustom yang dieksporl dan dibuat menggunakan AutoML Vision Edge. Kemudian, Anda akan menjalankan aplikasi Android bawaan yang menggunakan model untuk mengidentifikasi gambar bunga.
![Screenshot seluler produk akhir](https://cloud-dot-devsite-v2-prod.appspot.com/static/vision/automl/docs/images/tflite-android-tutorial_what_you_will_build.png?hl=id)
Tujuan
Dalam panduan pengantar end-to-end ini, Anda akan menggunakan kode untuk:
- Jalankan model terlatih dalam aplikasi Android menggunakan jurus bahasa TFLite.
Sebelum memulai
Melatih model dari AutoML Vision Edge
Sebelum dapat men-deploy model ke perangkat edge, Anda harus melatih dan mengekspor model TF Lite dari AutoML Vision Edge dengan mengikuti panduan memulai model perangkat Edge.
Setelah menyelesaikan panduan memulai, Anda seharusnya telah mengekspor file model terlatih: file TF Lite, file label, dan file metadata, seperti yang ditunjukkan di bawah ini.
Menginstal TensorFlow
Sebelum memulai tutorial, Anda perlu menginstal beberapa software:
- instal tensorflow versi 1.7
- instal PILLOW
Jika Anda memiliki penginstalan Python yang berfungsi, jalankan perintah berikut untuk mendownload software ini:
pip install --upgrade "tensorflow==1.7.*" pip install PILLOW
Referensi dokumentasi TensorFlow resmi jika Anda mengalami masalah dengan proses ini.
Meng-clone repositori Git
Dengan menggunakan command line, clone repositori Git dengan perintah berikut:
git clone https://github.com/googlecodelabs/tensorflow-for-poets-2
Buka direktori clone lokal repositori
(direktori tensorflow-for-poets-2
). Anda akan menjalankan semua contoh kode berikut
dari direktori ini:
cd tensorflow-for-poets-2
Siapkan Aplikasi Android
Menginstal Android Studio
Jika perlu, instal Android Studio 3.0+ secara lokal.
Membuka project dengan Android Studio
Buka project dengan Android Studio dengan mengikuti langkah-langkah berikut:
Buka Android Studio
. Setelah dimuat, pilih
"Open an existing Android Studio project" dari pop-up ini:
Dalam pemilih file, pilih
tensorflow-for-poets-2/android/tflite
dari direktori kerja Anda.Saat pertama kali membuka project, Anda akan mendapatkan pop-up "Gradle Sync" yang menanyakan cara menggunakan wrapper Gradle. Pilih "Oke".
Menjalankan pengujian aplikasi
Aplikasi dapat berjalan di perangkat Android nyata atau di Emulator Android Studio.
Menyiapkan perangkat Android
Anda tidak dapat memuat aplikasi dari Android Studio ke ponsel kecuali jika mengaktifkan "mode developer" dan "Proses Debug USB".
Untuk menyelesaikan proses penyiapan satu kali ini, ikuti instructions ini.
Menyiapkan emulator dengan akses kamera (opsional)
Jika Anda memilih menggunakan emulator dan bukan perangkat Android sebenarnya, Android studio akan mempermudah penyiapan emulator.
Karena aplikasi ini menggunakan kamera, siapkan kamera emulator untuk menggunakan kamera komputer, bukan pola pengujian default.
Untuk menyiapkan kamera emulator, Anda perlu membuat perangkat baru di
"Pengelola Perangkat Virtual Android", layanan yang dapat Anda akses dengan tombol
ini.
Dari halaman AVDM utama, pilih "Bisa Perangkat Virtual":
Kemudian, pada halaman "Konfigurasi Verifikasi", di halaman terakhir penyiapan perangkat virtual, pilih "Tampilan Setelan Lanjutan":
Dengan menampilkan setelan lanjutan, Anda dapat menyetel kedua sumber kamera untuk menggunakan webcam komputer host:
Menjalankan aplikasi asli
Sebelum membuat perubahan apa pun pada aplikasi, jalankan versi yang disertakan dengan repositori.
Untuk memulai proses build dan penginstalan, jalankan sinkronisasi Gradle.
Setelah menjalankan sinkronisasi Gradle, pilih putar .
Setelah memilih tombol putar, Anda harus memilih perangkat dari pop-up ini:
Setelah memilih perangkat, Anda harus mengizinkan Demo Tensorflow untuk mengakses kamera dan file Anda:
Setelah aplikasi terinstal, klik ikon aplikasi untuk meluncurkannya. Versi aplikasi ini menggunakan MobileNet
standar, yang telah dilatih pada kategori 1000 ImageNet.
Ini akan terlihat seperti berikut:
Menjalankan aplikasi yang disesuaikan
Penyiapan aplikasi default yang mengklasifikasikan gambar ke dalam salah satu class 1000 ImageNet menggunakan MobileNet standar tanpa pelatihan ulang.
Sekarang, lakukan modifikasi sehingga aplikasi akan menggunakan model yang dibuat oleh AutoML Vision Edge untuk kategori gambar kustom Anda.
Tambahkan file model Anda ke project
Project demo dikonfigurasi untuk menelusuri graph.lite
, dan file
labels.txt
dalam direktori android/tflite/app/src/main/assets/
.
Ganti dua file asli dengan versi Anda menggunakan perintah berikut:
cp [Downloads]/model.tflite android/tflite/app/src/main/assets/graph.lite cp [Downloads]/dict.txt android/tflite/app/src/main/assets/labels.txt
Memodifikasi aplikasi
Aplikasi ini menggunakan model float, sedangkan model yang dibuat oleh AutoML Vision Edge adalah model terkuantisasi. Anda akan membuat beberapa perubahan kode agar aplikasi dapat menggunakan model.
Ubah jenis data labelProbArray
dan filterLabelProbArray
dari float
menjadi byte, dalam definisi anggota class, dan dalam melakukan inisialisasi ImageClassifier
.
private byte[][] labelProbArray = null;
private byte[][] filterLabelProbArray = null;
labelProbArray = new byte[1][labelList.size()];
filterLabelProbArray = new byte[FILTER_STAGES][labelList.size()];
Alokasikan imgData
berdasarkan jenis int8, dalam melakukan inisialisasi ImageClassifier
.
imgData =
ByteBuffer.allocateDirect(
DIM_BATCH_SIZE * DIM_IMG_SIZE_X * DIM_IMG_SIZE_Y * DIM_PIXEL_SIZE);
Transmisikan jenis data labelProbArray
dari int8 ke float, di
printTopKLabels()
:
private String printTopKLabels() {
for (int i = 0; i < labelList.size(); ++i) {
sortedLabels.add(
new AbstractMap.SimpleEntry<>(labelList.get(i), (float)labelProbArray[0][i]));
if (sortedLabels.size() > RESULTS_TO_SHOW) {
sortedLabels.poll();
}
}
String textToShow = "";
final int size = sortedLabels.size();
for (int i = 0; i < size; ++i) {
Map.Entry<String, Float> label = sortedLabels.poll();
textToShow = String.format("\n%s: %4.2f",label.getKey(),label.getValue()) + textToShow;
}
return textToShow;
}
Menjalankan aplikasi Anda
Di Android Studio, jalankan sinkronisasi Gradle sehingga sistem build dapat menemukan file Anda:
Setelah menjalankan sinkronisasi Gradle, pilih
putar
untuk memulai proses build dan penginstalan seperti sebelumnya.
Ini akan terlihat seperti berikut:
![Screenshot seluler produk akhir](https://cloud-dot-devsite-v2-prod.appspot.com/static/vision/automl/docs/images/tflite-android-tutorial_what_you_will_build.png?hl=id)
Anda dapat menahan tombol power dan turunkan volume secara bersamaan untuk mengambil screenshot.
Uji aplikasi yang telah diupdate dengan mengarahkan kamera ke berbagai gambar bunga untuk melihat apakah bunga tersebut diklasifikasikan dengan benar.
Bagaimana cara kerjanya?
Setelah aplikasi berjalan, periksa kode spesifik TensorFlow Lite.
AAR TensorFlow-Android
Aplikasi ini menggunakan TFLite Android Archive (AAR) yang telah dikompilasi sebelumnya. AAR ini dihosting di jcenter.
Baris berikut dalam file
build.gradle
modul menyertakan versi AAR terbaru dari repositori TensorFlow
bintray maven dalam project.
repositories { maven { url 'https://google.bintray.com/tensorflow' } } dependencies { // ... compile 'org.tensorflow:tensorflow-lite:+' }
Gunakan blok berikut untuk menginstruksikan Android Asset Packaging Tool
bahwa aset .lite
atau .tflite
tidak boleh dikompresi.
Hal ini penting, karena file .lite
akan
dipetakan memori, dan
file tidak akan berfungsi saat file dikompresi.
android { aaptOptions { noCompress "tflite" noCompress "lite" } }
Menggunakan TFLite Java API
Kode yang berinteraksi ke TFLite terdapat di ImageClassifier.java
.
Penyiapan
Blok pertama yang menarik adalah konstruktor untuk ImageClassifier
:
ImageClassifier(Activity activity) throws IOException { tflite = new Interpreter(loadModelFile(activity)); labelList = loadLabelList(activity); imgData = ByteBuffer.allocateDirect( 4 * DIM_BATCH_SIZE * DIM_IMG_SIZE_X * DIM_IMG_SIZE_Y * DIM_PIXEL_SIZE); imgData.order(ByteOrder.nativeOrder()); labelProbArray = new float[1][labelList.size()]; Log.d(TAG, "Created a Tensorflow Lite Image Classifier."); }
Ada beberapa garis minat tertentu.
Baris berikut akan membuat juru bahasa TFLite:
tflite = new Interpreter(loadModelFile(activity));
Baris ini membuat instance juru bahasa TFLite. Juru bahasa berfungsi mirip
dengan tf.Session
(untuk pengguna yang sudah dikenal dengan TensorFlow, di luar TFLite).
Anda meneruskan MappedByteBuffer
yang berisi model ke juru bahasa.
Fungsi lokal loadModelFile
membuat MappedByteBuffer
yang berisi file aset graph.lite
aktivitas.
Baris berikut membuat buffer data input:
imgData = ByteBuffer.allocateDirect( 4 * DIM_BATCH_SIZE * DIM_IMG_SIZE_X * DIM_IMG_SIZE_Y * DIM_PIXEL_SIZE);
Buffer byte ini diubah ukurannya untuk menampung data gambar setelah dikonversi menjadi float.
Juru bahasa dapat menerima array float secara langsung sebagai input, tetapi ByteBuffer
lebih efisien karena menghindari salinan tambahan dalam juru bahasa.
Baris berikut memuat daftar label dan membuat buffer output:
labelList = loadLabelList(activity); //... labelProbArray = new float[1][labelList.size()];
Buffer output adalah array float dengan satu elemen untuk setiap label tempat model akan menulis probabilitas output.
Menjalankan model
Blok minat kedua adalah metode classifyFrame
.
Metode ini mengambil Bitmap
sebagai input, menjalankan model, dan menampilkan teks
yang akan dicetak di aplikasi.
String classifyFrame(Bitmap bitmap) { // ... convertBitmapToByteBuffer(bitmap); // ... tflite.run(imgData, labelProbArray); // ... String textToShow = printTopKLabels(); // ... }
Metode ini melakukan tiga hal. Pertama, metode ini mengonversi dan menyalin
input Bitmap
ke imgData
ByteBuffer
untuk input ke model.
Kemudian, metode tersebut akan memanggil metode run penafsir, meneruskan buffer input
dan array output sebagai argumen. Penafsir menetapkan nilai dalam
array output ke probabilitas yang dihitung untuk setiap class.
Node input dan output ditentukan oleh argumen untuk langkah konversi toco
yang membuat file model .lite
sebelumnya.
Apa Selanjutnya:
Sekarang Anda telah menyelesaikan panduan aplikasi klasifikasi bunga Android menggunakan model Edge. Anda telah menguji aplikasi klasifikasi gambar sebelum memodifikasinya dan mendapatkan anotasi contoh. Anda kemudian memeriksa kode khusus TensorFlow Lite untuk memahami fungsionalitas yang mendasarinya.
- Pelajari TFLite lebih lanjut dari dokumentasi resmi dan repositori kode.
- Coba versi terkuantifikasi aplikasi demo ini, untuk model yang lebih canggih dalam paket yang lebih kecil.
- Coba beberapa Model siap TFLite lainnya, termasuk detektor kata kunci ucapan versi smart reply di perangkat.
- Pelajari lebih lanjut TensorFlow secara umum dengan dokumentasi memulai memulai TensorFlow.