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ümelerde 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 cihazda 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ükleyin.
Henüz yüklemediyseniz TensorFlow Lite modelinizi eğitirken Android Studio 4.1 veya sonraki bir sürümü indirip yükleyin.
Neler öğreneceksiniz?
- TensorFlow Lite Model Maker'ı kullanarak kendi özel görüntü sınıflandırıcınızı eğitme
- TensorFlow Lite modelini içe aktarmak için Android Studio'yu kullanma ve CameraX kullanarak özel modeli bir Android uygulamasına entegre etme.
- 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: Kullanımı ücretsizdir
2. Colab kullanarak çiçek tanıma aracı eğitme
Model eğitimini başlatmadan önce Android Studio 4.1 veya sonraki sürümlerini indirip yüklemeye başlayın.
TensorFlow Lite aktarımla öğrenme kullanarak çiçekleri tanımak için Keras ile sınıflandırıcı eğitmenin nasıl yapılacağını gösteren Colab'i açın.
3. Çalışma dizinini ayarlama
Git deposunu klonlama
Aşağıdaki komut, bu codelab için gereken dosyaları içeren Git deposunu klonlar:
git clone https://github.com/hoitab/TFLClassify.git
Ardından, 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ı ayarlama

Android Studio 4.1 veya sonraki bir sürümü yükleyin.
Yüklü değilse Android Studio 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 bu pop-up'tan "Open an Existing project" (Mevcut bir projeyi aç) seçeneğini belirleyin:

- Dosya seçicide, çalışma dizininizden
TFLClassify/build.gradleöğesini seçin.
- Projeyi ilk kez açtığınızda, Gradle sarmalayıcısının kullanılıp kullanılmayacağını soran bir "Gradle Sync" pop-up'ı gösterilir. "Tamam"ı tıklayın.

- Henüz yapmadıysanız telefonunuzda geliştirici modelini ve USB üzerinden hata ayıklamayı etkinleştirin. Bu tek seferlik bir kurulumdur. Bu talimatları uygulayın.
- Hem projeniz hem de telefonunuz hazır olduğunda
TFL_Classify.startsimgesini 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, gerçek sonuçların gösterileceği yerlerde rastgele sayıların yer aldığı aşağıdaki ekranı görürsünüz.

5. Android uygulamasına TensorFlow Lite'ı ekleme
- Sol taraftaki proje gezgininde
startmodülünü seçin:

startmodülünü sağ tıklayın veyaFile, ardındanNew>Other>TensorFlow Lite Modelsimgesini tıklayın.

- Daha önce özel olarak eğitilmiş
FlowerModel.tflitemodelini indirdiğiniz konumu seçin.

Finishsimgesini tıklayın.- En sonunda aşağıdakileri görürsünüz. FlowerModel.tflite başarıyla içe aktarılır ve giriş / çıkışın yanı sıra başlamanıza yardımcı olacak bazı örnek kodlar da dahil olmak üzere modelle ilgili üst düzey bilgiler gösterilir.

6. İsteğe bağlı: Yapılacaklar listesinin tamamını inceleme
Yapılacaklar listesi, codelab'i güncellemeniz gereken tam konuma gitmeyi kolaylaştırır. Gelecekteki işleri hatırlatmak için Android projenizde de kullanabilirsiniz. Kod yorumlarını kullanarak yapılacaklar öğeleri ekleyebilir ve TODO anahtar kelimesini yazabilirsiniz. Yapılacaklar listesine erişmek için:
- Ne yapacağımızı görmek için yapılacaklar listesine göz atabilirsiniz. Bunu yapmak için üst menü çubuğundan
View>Tool Windows>TODOsimgesini seçin.

- Varsayılan olarak, tüm modüllerdeki tüm yapılacaklar listelenir. Bu da biraz kafa karıştırıcı olabilir. Yapılacaklar panelinin yanındaki gruplandırma ölçütü düğmesini tıklayıp
Modulesseçeneğini belirleyerek yalnızca başlangıç yapılacaklarını ayırabiliriz.

- Başlangıç modüllerindeki tüm öğeleri genişletin:

7. Özel modeli TensorFlow Lite ile çalıştırma
- Yapılacaklar listesinde YAPILACAK 1'i tıklayın veya MainActivity.kt dosyasını açıp YAPILACAK 1'i bulun ve şu 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 Analyzer'ın analiz yönteminde, kamera girişini
ImageProxyBitmapbiçimine dönüştürmemiz ve çıkarım süreci için birTensorImagenesnesi oluşturmamız gerekir.
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 2: Convert Image to Bitmap then to TensorImage
val tfImage = TensorImage.fromBitmap(toBitmap(imageProxy))
...
}
- Görüntüyü işleyin ve sonuç üzerinde aşağıdaki işlemleri gerçekleştirin:
- Sonuçları, en yüksek olasılık önce gelecek şekilde
scoreözelliği altındaki olasılığa göre azalan sırada sıralayın. MAX_RESULT_DISPLAYsabitiyle tanımlanan ilk k sonuç alınır. İsteğe bağlı olarak, daha fazla veya daha az sonuç elde etmek 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ıralanmış ve filtrelenmiş sonuçları, veri bağlama yoluyla
Recognitiontarafından kullanılmaya hazırRecyclerViewveri 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))
}
...
}
- Daha önce gördüğümüz sahte sonuçların oluşturulmasına yardımcı olan aşağıdaki satırları yorum satırı yapı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.startsimgesini seçerek uygulamayı gerçek bir cihazda çalıştırın ve araç çubuğundaki çalıştır düğmesine
basın:

- Telefonunuzda, gerçek sonuçların gösterileceği yerlerde rastgele sayıların yer aldığı aşağıdaki ekranı görürsünüz:

8. İsteğe bağlı: GPU temsilcisiyle çıkarımı hızlandırma
TensorFlow Lite, mobil cihazınızda çıkarım hızını artırmak için çeşitli donanım hızlandırıcıları destekler. GPU, TensorFlow Lite'ın bir temsilci mekanizması aracılığıyla kullanabileceği hızlandırıcılardan biridir ve kullanımı oldukça kolaydır.
startmodülü altında build.gradle dosyasını açın veya TODO listesindeki TODO 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 yapılacaklar listesinde YAPILACAKLAR 6'yı tıklayın. flowerModel'in basit başlatma işlemini aşağıdakilerle 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
optionsekleyerek model başlatıcıyı bunu kullanacak şekilde 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.startsimgesini seçerek uygulamayı gerçek bir cihazda çalıştırın ve araç çubuğundaki çalıştır düğmesine
basın:

9. Sırada ne var?
Daha fazla bilgi için aşağıdaki bağlantılara göz atabilirsiniz:
- tfhub.dev'deki ML Model bağlama ile uyumlu diğer TFLite modellerini deneyin.
- TFLite hakkında daha fazla bilgiyi tensorflow.org adresindeki dokümanlardan ve kod deposundan edinebilirsiniz.
- Konuşma tetikleyici kelime algılayıcı ve akıllı yanıtın cihaz üzerinde sürümü gibi diğer bazı TFLite önceden eğitilmiş modellerini deneyin.
- Başlangıç belgelerimizden TensorFlow hakkında daha fazla bilgi edinin.