1. Giriş
Not: Bu codelab'in test edilmesi 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 yerel olarak model çalıştırmaya kadar her yerde kullanılabilir.
Bu kod laboratuvarında, 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.
- Özel modeli CameraX'i 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 telefonunuzdaki 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'ı kullanarak çiçek tanıyıcı eğitme
Model eğitimini başlatmadan önce Android Studio 4.1 veya sonraki bir sürümü indirip yüklemeye başlayın.
TensorFlow Lite aktarımla öğrenim özelliğini kullanarak çiçekleri tanıması için Keras ile sınıflandırıcının nasıl eğitileceğini gösteren Colab sayfasını açın.
3. Çalışma dizinini ayarlama
Git deposunu klonlama
Aşağıdaki komut, bu kod laboratuvarının çalışması için gereken dosyaları içeren Git deposunu klonlar:
git clone https://github.com/hoitab/TFLClassify.git
Ardından, deposu yeni klonladığınız dizine gidin. Bu codelab'in geri kalanında burada çalışacaksınız:
cd TFLClassify
4. Android iskelet uygulamasını ayarlama
Android Studio 4.1 veya sonraki bir sürümü yükleyin
Henüz yüklemediyseniz Android Studio 4.1 veya sonraki bir sürümü 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 "Mevcut bir projeyi aç"ı seçin:
- 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ılmasıyla ilgili bir "Gradle Senkronizasyonu" pop-up'ı görürsünüz. "Tamam"ı tıklayın.
- Henüz yapmadıysanız telefonunuzda geliştirici modunu ve USB Hata Ayıklama'yı etkinleştirin. Bu tek seferlik bir kurulumdur. Bu talimatları uygulayın.
- Hem projeniz hem de telefonunuz hazır olduğunda
TFL_Classify.start
simgesini seçip araç çubuğundaki çalıştır düğmesinebasarak gerçek bir cihazda çalıştırabilirsiniz:
- Ardından Tensorflow Demo'nun kameranıza erişmesine izin verin:
- Telefonunuzda, gerçek sonuçların gösterileceği yerin yerine 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
start
modülünü seçin:
start
modülünü sağ tıklayın veyaFile
'yi, ardındanNew
>Other
>TensorFlow Lite Model
'i tıklayın.
- Özel olarak eğitilmiş
FlowerModel.tflite
modelini daha önce indirdiğiniz model konumunu seçin.
Finish
simgesini tıklayın.- Sonunda aşağıdakileri görürsünüz. FlowerModel.tflite başarıyla içe aktarıldı. Bu model, giriş / çıkış ve başlamanıza yardımcı olacak bazı örnek kodlar da dahil olmak üzere modelle ilgili üst düzey bilgileri gösterir.
6. İsteğe bağlı: Tüm yapılacaklar listesini kontrol etme
TODO listesi, codelab'i güncellemeniz gereken tam konuma gitmenizi kolaylaştırır. Gelecekteki işlerinizi hatırlatmak için Android projenizde de kullanabilirsiniz. Kod yorumlarını kullanarak TODO
anahtar kelimesini yazarak yapılacaklar listesi öğeleri ekleyebilirsiniz. Yapılacaklar listesine erişmek için:
- Ne yapacağımızı öğrenmenin en iyi yolu TODO listesine göz atmaktır. Bunu yapmak için üst menü çubuğundan
View
>Tool Windows
>TODO
- Varsayılan olarak, tüm modüllerdeki tüm TODO'ları listeler. Bu da biraz kafa karıştırıcı olabilir. TODO panelinin yan tarafındaki grupla düğmesini tıklayıp
Modules
'ü seçerek yalnızca başlangıç TODO'larını sıralayabiliriz.
- Başlangıç modüllerinin altındaki tüm öğeleri genişletin:
7. Özel modeli TensorFlow Lite ile çalıştırma
- TODO listesinde TODO 1'i tıklayın veya MainActivity.kt dosyasını açıp TODO 1'i bulun, modeli şu satırı ekleyerek 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 analyze yönteminde, kamera girişi
ImageProxy
'üBitmap
'e dönüştürmemiz ve çıkarım süreci için birTensorImage
nesnesi oluşturmamız gerekir.
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çta aşağıdaki işlemleri yapın:
- Sonuçları,
score
özelliği altında olasılığa göre azalan düzende sıralayın. En yüksek olasılığa sahip sonuçlar önce gelir. MAX_RESULT_DISPLAY
sabitiyle tanımlanan ilk k sonucu alın. İ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ıralı ve filtrelenmiş 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))
}
...
}
- Daha önce gördüğümüz sahte sonuçların oluşturulmasına yardımcı olan aşağıdaki satırları yoruma alı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
simgesini seçip araç çubuğundaki çalıştırma düğmesinebasarak uygulamayı gerçek bir cihazda çalıştırın:
- Telefonunuzda, gerçek sonuçların gösterileceği yerin yerine rastgele sayıların yer aldığı aşağıdaki ekranı görürsünüz:
8. İsteğe bağlı: GPU temsilcisi ile çıkarım hızlandırma
TensorFlow Lite, mobil cihazınızda çıkarım işlemini hızlandırmak için çeşitli donanım hızlandırıcıları destekler. GPU, TensorFlow Lite'ın bir temsilci 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 dosyasını açın veya TODO listesinin altındaki 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 TODO listesinde TODO 6'yı tıklayın. flowerModel'in basit başlatma işlemini aşağıdakiyle 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()
}
...
}
- Model başlatıcıyı, yöntem girişine
options
ekleyerek 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.start
simgesini seçip araç çubuğundaki çalıştırma düğmesinebasarak uygulamayı gerçek bir cihazda çalıştırın:
9. Sırada ne var?
Daha fazla bilgi edinmek için şu bağlantılara göz atabilirsiniz:
- tfhub.dev'den ML Model bağlama ile uyumlu diğer TFLite modellerini deneyin.
- TFLite hakkında daha fazla bilgiyi tensorflow.org adresindeki dokümanlarda ve kod deposunda bulabilirsiniz.
- Konuşma anahtar kelimesi algılayıcı ve akıllı yanıtın cihaz üzerinde çalışan sürümü de dahil olmak üzere diğer TFLite önceden eğitilmiş modellerini deneyin.
- Başlangıç dokümanlarımızı inceleyerek TensorFlow hakkında daha fazla bilgi edinin.