1. Giriş
Not: Bu codelab'de test için fiziksel bir cihaz gerekir
TensorFlow çok amaçlı bir makine öğrenimi çerçevesidir. TensorFlow, buluttaki kümeler genelinde büyük modelleri eğitmekten telefonunuz gibi yerleşik bir sistemde modelleri yerel olarak çalıştırmaya kadar her yerde kullanılabilir.
Bu codelab'de, Android cihazlarda görüntü tanıma modeli çalıştırmak için TensorFlow Lite kullanılır.
Android Studio 4.1 veya sonraki bir sürümü yükleme
Henüz yüklemediyseniz TensorFlow Lite modelinizi eğitirken AndroidStudio 4.1 veya üstünü indirip yükleyin.
Neler öğreneceksiniz?
- TensorFlow Lite Model Maker'ı kullanarak kendi özel resim sınıflandırıcınızı nasıl eğitebilirsiniz?
- Özel modeli CameraX kullanarak bir Android uygulamasına entegre etmek için TensorFlow Lite modelini içe aktarmak üzere Android Studio'yu kullanma.
- Modelinizi hızlandırmak için telefonunuzda GPU'yu kullanma
Ne oluşturacaksınız?
Çiçekleri tanımlamak için TensorFlow görüntü tanıma programı çalıştıran basit bir kamera uygulaması.
Lisans: Ücretsiz kullanım
2. Colab'i kullanarak bir çiçek figürü eğitin
Model eğitimini başlatmadan önce Android Studio 4.1 veya sonraki bir sürümü indirip yüklemeye başlayın.
Çiçeklerin tanınması için Keras ile sınıflandırıcıyı TensorFlow Lite aktarım eğitimiyle nasıl eğiteceğinizi gösteren Colab dosyasını açın.
3. Çalışma dizinini ayarlama
Git deposunu klonlama
Aşağıdaki komut, bu codelab için gerekli olan dosyaları içeren Git deposunu klonlar:
git clone https://github.com/hoitab/TFLClassify.git
Şimdi, depoyu klonladığınız dizine gidin. Bu codelab'in geri kalanında üzerinde çalışacağınız yer:
cd TFLClassify
4. Android iskelet uygulamasını kurma
Android Studio 4.1 veya sonraki bir sürümü yükleme
Henüz yüklemediyseniz AndroidStudio 4.1 veya sonraki bir sürümünü yükleyin.
Projeyi Android Studio ile açma
Aşağıdaki adımları uygulayarak Android Studio ile bir proje açın:
- Android Studio'yu açın. Yüklendikten sonra "Mevcut projeyi aç"ı seçin şu pop-up'tan:
- Dosya seçicide, çalışma dizininizde
TFLClassify/build.gradle
öğesini seçin.
- "Gradle Senkronizasyonu" alırsınız pop-up ile birlikte gradle sarmalayıcısının kullanımıyla ilgili sorular sorabilirsiniz. "Tamam"ı tıklayın.
- Henüz etkinleştirmediyseniz telefonunuzda geliştirici modelini ve USB Hata Ayıklama özelliğini etkinleştirin. Bu tek seferlik bir kurulumdur. Bu talimatları uygulayın.
- Hem projeniz hem de telefonunuz hazır olduğunda,
TFL_Classify.start
uygulamasını seçip araç çubuğundaki çalıştır düğmesine basarak projeyi gerçek bir cihazda çalıştırabilirsiniz:
- Şimdi Tensorflow Demo'nun kameranıza erişmesine izin verin:
- Telefonunuzda aşağıdaki ekranda, gerçek sonuçların yerine rastgele sayılar gösterilir.
5. Android uygulamasına TensorFlow Lite'ı ekleme
- Sol taraftaki proje gezgininde
start
modülünü seçin:
start
modülünü sağ tıklayın veyaFile
öğesini, ardındanNew
>Other
TensorFlow Lite Model
- Daha önce özel olarak eğitilmiş
FlowerModel.tflite
öğesini indirdiğiniz model konumunu seçin.
Finish
simgesini tıklayın.- En sonda aşağıdakini göreceksiniz. FlowerModel.tflite başarıyla içe aktarılır ve başlamanıza yardımcı olacak bazı örnek kodların yanı sıra giriş / çıkış gibi modelle ilgili üst düzey bilgileri gösterir.
6. İsteğe bağlı: Tüm yapılacaklar listesini kontrol etme
YAPILACAKLAR listesi, codelab'i güncellemeniz gereken konuma tam olarak gitmenizi kolaylaştırır. Bunu kendinize gelecekteki çalışmalarınızı hatırlatmak için Android projenizde de kullanabilirsiniz. Kod yorumlarını kullanarak yapılacaklar öğeleri ekleyebilir ve TODO
anahtar kelimesini yazabilirsiniz. YAPILACAKLAR listesine erişmek için şunları yapabilirsiniz:
- Neler yapacağımızı görmenin en iyi yollarından biri YAPILACAKLAR listesine göz atmak. Bunu yapmak için üst menü çubuğundan seçim yapın
View
>Tool Windows
TODO
- Varsayılan olarak, tüm modüllerdeki tüm YAPILACAKLAR listelendiği için biraz kafa karıştırıcıdır. YAPILACAKLAR panelinin yan tarafında bulunan gruplandırma ölçütü düğmesini tıklayıp
Modules
seçeneğini tıklayarak sadece başlangıçtaki YAPILACAKLAR'ı sıralayabiliriz.
- Başlangıç modüllerindeki tüm öğeleri genişletin:
7. Özel modeli TensorFlow Lite ile çalıştırın
- YAPILACAKLAR listesindeki 1. YAPILACAKLAR'ı tıklayın veya MainActivity.kt dosyasını açıp YAPILACAKLAR 1'i bulun. Aşağıdaki satırı ekleyerek modeli başlatın:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
...
// TODO 1: Add class variable TensorFlow Lite Model
private val flowerModel = FlowerModel.newInstance(ctx)
...
}
- CameraX Analiz Aracı analiz yönteminde,
ImageProxy
adlı kamera girişiniBitmap
öğesine dönüştürmemiz ve çıkarım işlemi için birTensorImage
nesnesi oluşturmamız gerekiyor.
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 2: Convert Image to Bitmap then to TensorImage
val tfImage = TensorImage.fromBitmap(toBitmap(imageProxy))
...
}
- Resmi işleyin ve sonuç üzerinde aşağıdaki işlemleri gerçekleştirin:
- Sonuçları, ilk olarak en yüksek olasılığa sahip
score
özelliği altında olasılığa göre azalan düzende sıralayın. MAX_RESULT_DISPLAY
sabitiyle tanımlanan ilk k sonuçlarını alın. İsterseniz daha fazla veya daha az sonuç almak için bu değişkenin değerini değiştirebilirsiniz.
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 3: Process the image using the trained model, sort and pick out the top results
val outputs = flowerModel.process(tfImage)
.probabilityAsCategoryList.apply {
sortByDescending { it.score } // Sort with highest confidence first
}.take(MAX_RESULT_DISPLAY) // take the top results
...
}
- Sıralanan ve filtrelenen sonuçları, Veri Bağlama aracılığıyla
RecyclerView
tarafından kullanılmaya hazırRecognition
veri nesnelerine dönüştürün:
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 4: Converting the top probability items into a list of recognitions
for (output in outputs) {
items.add(Recognition(output.label, output.score))
}
...
}
- Önceden gördüğümüz sahte sonuçların oluşturulmasına yardımcı olmak için aşağıdaki satırları yorumlayın veya silin:
// START - Placeholder code at the start of the codelab. Comment this block of code out.
for (i in 0..MAX_RESULT_DISPLAY-1){
items.add(Recognition("Fake label $i", Random.nextFloat()))
}
// END - Placeholder code at the start of the codelab. Comment this block of code out.
TFL_Classify.start
uygulamasını seçip araç çubuğundaki çalıştır düğmesine basarak uygulamayı gerçek bir cihazda çalıştırın:
- Telefonunuzda aşağıdaki ekranı göreceksiniz. Bu ekranda, gerçek sonuçların yerine rastgele sayılar gösterilir:
8. İsteğe bağlı: GPU yetkilendirmesi ile çıkarımı hızlandırın
TensorFlow Lite, mobil cihazınızda çıkarımı hızlandırmak için çeşitli donanım hızlandırıcıları destekler. GPU, TensorFlow Lite'ın yetki verme mekanizması aracılığıyla yararlanabileceği hızlandırıcılardan biridir ve kullanımı oldukça kolaydır.
start
modülü altında build.gradle'ı açın veya YAPILACAKLAR listesinin altındaki YAPILACAKLAR 5'i tıklayıp aşağıdaki bağımlılığı ekleyebilirsiniz:
// TODO 5: Optional GPU Delegates
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
- MainActivity.kt dosyasına geri dönün veya YAPILACAKLAR listesindeki 6. YAPILACAKLAR'ı tıklayın. FlowerModel'in basit başlatılması işlemini şununla değiştirin: GPU uyumluluk listesinin bir örneğini alın ve listelenen uyumlu GPU'lardan biri olup olmadığına bağlı olarak GPU'yu başlatın. Aksi takdirde modeli çalıştırmak için 4 CPU iş parçacığı başlatın:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
...
// TODO 1: Add class variable TensorFlow Lite Model
// Initializing the flowerModel by lazy so that it runs in the same thread when the process
// method is called.
private val flowerModel: FlowerModel by lazy{
// TODO 6. Optional GPU acceleration
val compatList = CompatibilityList()
val options = if(compatList.isDelegateSupportedOnThisDevice){
Log.d(TAG, "This device is GPU Compatible ")
Model.Options.Builder().setDevice(Model.Device.GPU).build()
} else {
Log.d(TAG, "This device is GPU Incompatible ")
Model.Options.Builder().setNumThreads(4).build()
}
...
}
- Yöntem girişine
options
ekleyerek bunu kullanmak için model başlatıcıyı değiştirin:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
private val flowerModel: FlowerModel by lazy{
...
// Initialize the Flower Model
FlowerModel.newInstance(ctx, options)
}
}
TFL_Classify.start
uygulamasını seçip araç çubuğundaki çalıştır düğmesine basarak uygulamayı gerçek bir cihazda çalıştırın:
9. Sırada Ne Var?
Daha fazla bilgi edinmek için aşağıdaki bağlantılardan yararlanabilirsiniz:
- tfhub.dev'deki ML Modeli bağlamasıyla uyumlu diğer TFLite modellerini deneyin.
- TFLite hakkında daha fazla bilgiyi tensorflow.org ve kod deposundaki dokümanlardan edinebilirsiniz.
- Konuşma özel kelime dedektörü ve cihaz üzerinde akıllı yanıt sürümü gibi diğer TFLite önceden eğitilmiş modelleri deneyin.
- Başlarken belgelerimizle genel olarak TensorFlow hakkında daha fazla bilgi edinin.