Firebase'i TFLite destekli Android Uygulamanıza ekleyin

1. Genel Bakış

cd824ecfd05a2822.png

Firebase ML, modelinizi kablosuz olarak dağıtmanızı sağlar. Bu, uygulama boyutunu küçük tutmanıza ve yalnızca gerektiğinde ML modelini indirmenize, birden fazla modelle deneme yapmanıza veya tüm uygulamayı yeniden yayınlamak zorunda kalmadan ML modelinizi güncellemenize olanak tanır.

Bu kod laboratuvarında, statik bir TFLite modeli kullanan bir Android uygulamasını, Firebase'den dinamik olarak sunulan bir modeli kullanan bir uygulamaya dönüştüreceksiniz.

ne öğreneceksin

  • TFLite modellerini Firebase ML'ye dağıtın ve bunlara uygulamanızdan erişin
  • Firebase Analytics ile model doğruluğunu ölçmek için kullanıcı geri bildirimlerini izleyin
  • Firebase Performance aracılığıyla profil modeli performansı
  • Birden çok dağıtılan modelden hangisinin Remote Config aracılığıyla yüklendiğini seçin
  • Firebase A/B Testi ile farklı modellerle denemeler yapın

Neye ihtiyacın olacak

  • Android Studio sürüm 3.4+.
  • Basit kod.
  • Android 2.3+ ve Google Play hizmetleri 9.8 veya üstü olan bir test cihazı veya Google Play hizmetleri 9.8 veya üstü olan bir Emulator
  • Bir cihaz kullanıyorsanız, bir bağlantı kablosu.

Bu öğreticiyi nasıl kullanacaksınız?

Sadece baştan sona oku Okuyun ve alıştırmaları tamamlayın

Android uygulamaları oluşturma deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta düzey Yetkin

2. Örnek kodu alın

GitHub deposunu komut satırından klonlayın.

$ git clone https://github.com/FirebaseExtended/codelab-digitclassifier-android.git

Git yüklü değilse, örnek projeyi GitHub sayfasından veya bu bağlantıya tıklayarak da indirebilirsiniz.

3. Başlangıç ​​uygulamasını içe aktarın

Android Studio'dan codelab-digitclassifier-android dizinini seçin ( android_studio_folder.png ) örnek kod indirmesinden ( Dosya > > .../codelab-digitclassifier-android/start).

Artık Android Studio'da başlangıç ​​projesini açmış olmalısınız.

4. Başlangıç ​​uygulamasını çalıştırın

Projeyi Android Studio'ya aktardığınıza göre, uygulamayı ilk kez çalıştırmaya hazırsınız. Android cihazınızı bağlayın ve Çalıştır'a ( yürüt.png ) Android Studio araç çubuğunda.

Uygulama, cihazınızda başlamalıdır. Bu noktada, bir rakam çizmeyi denerseniz, uygulamanın onu tanıyabilmesi gerekir.

6e36e1b947b395f2.png

5. Firebase konsol projesi oluşturun

Firebase'i projeye ekleyin

  1. Firebase konsoluna gidin.
  2. Proje ekle'yi seçin.
  3. Bir Proje adı seçin veya girin.
  4. Firebase konsolunda kalan kurulum adımlarını izleyin, ardından Proje oluştur'u (veya mevcut bir Google projesi kullanıyorsanız Firebase Ekle'yi) tıklayın.

6. Firebase'i ekleyin

  1. Yeni projenizin genel bakış ekranından, kurulum iş akışını başlatmak için Android simgesine tıklayın.
  2. Codelab'in paket adını girin: org.tensorflow.lite.examples.digitclassifier

google-services.json dosyasını uygulamanıza ekleyin

Paket adını kaydettikten ve İleri'yi seçtikten sonra, Firebase Android yapılandırma dosyanızı almak için google-services.json'u indir'e tıklayın ve ardından google-services.json dosyasını projenizdeki app dizinine kopyalayın. Dosya indirildikten sonra konsolda gösterilen sonraki adımları atlayabilirsiniz (bunlar sizin için build-android-start projesinde zaten yapılmıştır).

Uygulamanıza google hizmetleri eklentisi ekleyin

google-services eklentisi, uygulamanızı Firebase'i kullanacak şekilde yapılandırmak için google-services.json dosyasını kullanır. Projenizin app dizinindeki build.gradle dosyasının en üstüne aşağıdaki satırı ekleyin:

uygulama/build.gradle

apply plugin: 'com.google.gms.google-services'

Ardından, projedeki build.gradle dosyanızın dependencies bölümüne aşağıdaki satırı ekleyin:

proje/build.gradle

classpath 'com.google.gms:google-services:4.3.13'

Projenizi gradle dosyalarıyla senkronize edin

Uygulamanızda tüm bağımlılıkların mevcut olduğundan emin olmak için bu noktada projenizi gradle dosyalarıyla senkronize etmelisiniz. Android Studio araç çubuğundan Dosya > Projeyi Gradle Dosyalarıyla Eşitle'yi seçin.

7. Uygulamayı Firebase ile çalıştırın

Artık google-services eklentisini JSON dosyanızla yapılandırdığınıza göre, uygulamayı Firebase ile çalıştırmaya hazırsınız. Android cihazınızı bağlayın ve Çalıştır'a ( yürüt.png ) Android Studio araç çubuğunda.

Uygulama, cihazınızda başlamalıdır. Bu noktada, uygulamanız yine de başarılı bir şekilde oluşturulmalıdır.

8. Firebase ML'ye bir model dağıtın

Firebase ML'ye bir model dağıtmak iki ana nedenden dolayı yararlıdır:

  1. Uygulama yükleme boyutunu küçük tutabilir ve yalnızca gerekirse modeli indirebiliriz
  2. Model düzenli olarak ve uygulamanın tamamından farklı bir sürüm döngüsüyle güncellenebilir

Uygulamamızdaki statik modeli, Firebase'den dinamik olarak indirilen bir modelle değiştirmeden önce, onu Firebase ML'ye dağıtmamız gerekiyor. Model, konsol aracılığıyla veya Firebase Admin SDK kullanılarak programlı olarak dağıtılabilir. Bu adımda konsol üzerinden dağıtım yapacağız.

İşleri basit tutmak için zaten uygulamamızda bulunan TensorFlow Lite modelini kullanacağız. İlk olarak, Firebase Konsolunu açın ve sol gezinme panelinde Makine Öğrenimi'ne tıklayın. Bunu ilk kez açıyorsanız, 'Başlayın'ı tıklayın. Ardından "Özel"e gidin ve "Özel model ekle" düğmesini tıklayın.

İstendiğinde, modele mnist_v1 gibi açıklayıcı bir ad verin ve dosyayı codelab proje dizininden start/app/src/main/assets/mnist.tflite . Ardından bu TF Lite model dosyasını Android projesinden silebilirsiniz.

3c3c50e6ef12b3b.png

9. Modeli Firebase ML'den indirin

TFLite modelleri nispeten büyüyebileceğinden, uzak modeli Firebase'den uygulamanıza ne zaman indireceğinizi seçmek zor olabilir. İdeal olarak, uygulama başlatıldığında modeli hemen yüklemekten kaçınmak istiyoruz, çünkü modelimiz yalnızca bir özellik için kullanılıyorsa ve kullanıcı bu özelliği hiç kullanmıyorsa, sebepsiz yere önemli miktarda veri indirmiş olacağız. Ayrıca sadece wifi'ye bağlıyken modelleri getirme gibi indirme seçeneklerini de ayarlayabiliyoruz. Modelin ağ bağlantısı olmadan da kullanılabilir olduğundan emin olmak istiyorsanız, onu yedek olarak uygulama olmadan da paketlemeniz önemlidir.

Basitlik adına, varsayılan paketlenmiş modeli kaldıracağız ve uygulama başladığında her zaman Firebase'den bir model indireceğiz. Bu şekilde, rakam tanımayı çalıştırırken, çıkarımın Firebase'den sağlanan modelle çalıştığından emin olabilirsiniz.

app/build.gradle dosyasında Firebase Machine Learning bağımlılığını ekleyin

uygulama/build.gradle

implementation 'com.google.firebase:firebase-ml-modeldownloader:24.0.4'

Ardından modeli Firebase'den indirmek için mantık ekleyin.

digitClassifier.initialize(loadModelFile()) downloadModel("mnist_v1") ile değiştireceğiz ve bu yöntemi uygulayacağız.

MainActivity.kt

  private fun downloadModel(modelName: String): Task<CustomModel> {
    val conditions = CustomModelDownloadConditions.Builder()
    .requireWifi()
    .build()
    return FirebaseModelDownloader.getInstance()
        .getModel(modelName, DownloadType.LOCAL_MODEL, conditions)
        .addOnCompleteListener {
          val model = it.result
          if (model == null) {
            showToast("Failed to get model file.")
          } else {
            showToast("Downloaded remote model: $modelName")
            digitClassifier.initialize(model)
          }
        }
      .addOnFailureListener {
        showToast("Model download failed for $modelName, please check your connection.")
      }
  }

Uygulamanızı yeniden çalıştırın ve rakam sınıflandırıcıya bir rakam çizin. İndirme işlemi bittiğinde, uzak modelin indirildiğini belirten bir Toast mesajı ve yeni modelinizin kullanıldığını gösteren bir günlük görmelisiniz.

10. Model doğruluğunu ölçmek için kullanıcı geri bildirimini ve dönüşümü izleyin

Firebase için Google Analytics, kullanıcıların uygulamanızda nasıl ilerlediklerini, nerede başarılı olduklarını ve nerede takıldıklarını ve geri döndüklerini anlamanız için bir yol sağlar. Uygulamanızın en çok kullanılan kısımlarını anlamak için de kullanılabilir.

Model tahminleriyle ilgili kullanıcı geri bildirimlerini izleyerek modelin doğruluğunu ölçeceğiz. Bir kullanıcı "EVET"i tıklarsa, bu tahminin doğru olduğunu gösterecektir.

Modelimizin doğruluğunu izlemek için bir Analytics olayı kaydedebiliriz. İlk olarak, projede kullanılmadan önce bağımlılığa Analytics eklemeliyiz:

Firebase Analytics bağımlılığı ekleyin

uygulama/build.gradle

implementation 'com.google.firebase:firebase-analytics-ktx:21.1.0'

Olayları Günlüğe Kaydet

Ardından onCreate işlevinde, onclick dinleyicisini correct_inference olayını Firebase'de günlüğe kaydetmesi için ayarlayacağız.

MainActivity.kt (onCreate)

// Setup YES button
yesButton?.setOnClickListener {
  Firebase.analytics.logEvent("correct_inference", null)
}

Uygulamayı tekrar çalıştırın ve bir rakam çizin. Çıkarımın doğru olduğuna dair geri bildirim göndermek için "Evet" düğmesine birkaç kez basın.

Hata ayıklama analizi

Genel olarak, uygulamanız tarafından günlüğe kaydedilen olaylar, yaklaşık bir saatlik bir süre içinde gruplandırılır ve birlikte yüklenir. Bu yaklaşım, pili son kullanıcıların cihazlarında korur ve ağ veri kullanımını azaltır. Ancak, analitik uygulamanızı doğrulama amacıyla (ve analitiklerinizi DebugView raporunda görüntülemek için), olayları minimum gecikmeyle yüklemek için geliştirme cihazınızda Hata Ayıklama modunu etkinleştirebilirsiniz.

Bir Android cihazda Analytics Hata Ayıklama modunu etkinleştirmek için aşağıdaki komutları yürütün:

adb shell setprop debug.firebase.analytics.app org.tensorflow.lite.examples.digitclassifier

Uygulamayı tekrar çalıştırın ve bir rakam çizin. Çıkarımın doğru olduğuna dair geri bildirim göndermek için "Evet" düğmesine birkaç kez basın. Artık Firebase konsolundaki hata ayıklama görünümü aracılığıyla günlük olaylarını neredeyse gerçek zamanlı olarak görüntüleyebilirsiniz. Sol gezinme çubuğundan Analytics > DebugView'a tıklayın.

5276199a086721fd.png

11. Modelin Performansını Analiz Edin

Firebase Performance Monitoring, iOS, Android ve web uygulamalarınızın performans özellikleri hakkında fikir edinmenize yardımcı olan bir hizmettir.

Uygulamanızdan performans verilerini toplamak için Performans İzleme SDK'sını kullanırsınız, ardından bu verileri Firebase konsolunda inceleyip analiz edersiniz. Performans İzleme, uygulamanızın performansının nerede ve ne zaman iyileştirilebileceğini anlamanıza yardımcı olur, böylece bu bilgileri performans sorunlarını gidermek için kullanabilirsiniz.

Burada çıkarım ve indirme etrafında mükemmel izler ekliyoruz

Bu önemlidir, çünkü derin öğrenmede kullanılan daha büyük modeller daha doğru olma potansiyeline sahiptir, ancak yanıt vermeleri daha uzun sürebilir. Deneyimizde doğruluk ve hız arasında doğru dengeyi bulmaya çalışıyoruz.

Firebase Performance bağımlılığı ekleyin

proje/build.gradle

buildscript {

  // ...

    dependencies {
      // ...

      // Add the dependency for the Performance Monitoring plugin
      classpath 'com.google.firebase:perf-plugin:1.4.1'  // Performance Monitoring plugin
    }
}

uygulama/build.gradle

// Apply the Performance Monitoring plugin
apply plugin: 'com.google.firebase.firebase-perf'

// ...

dependencies {
  // ...

  // Add the dependency for the Performance Monitoring library
  implementation 'com.google.firebase:firebase-perf:20.1.0'
}

Özel İzler Ekle

setupDigitClassifier() işlevinde yeni bir downloadTrace oluşturun ve modeli indirmeden hemen önce başlatın. Ardından, izlemeyi durduran bir başarı dinleyicisi ekleyin.

classifyDrawing() işlevinde yeni bir classifyTrace oluşturun ve sınıflandırmadan hemen önce başlatın. Ardından, onsuccess dinleyicisinde izlemeyi durdurun.

MainActivity.kt

class MainActivity : AppCompatActivity() {
  // ...
  
  private val firebasePerformance = FirebasePerformance.getInstance()
  
  // ...

  private fun setupDigitClassifier() {
    // Add these lines to create and start the trace
    val downloadTrace = firebasePerformance.newTrace("download_model")
    downloadTrace.start()
    downloadModel("mnist_v1")
      // Add these lines to stop the trace on success
      .addOnSuccessListener {
        downloadTrace.stop()
      }
  }

// ...

  private fun classifyDrawing() {
    val bitmap = drawView?.getBitmap()

    if ((bitmap != null) && (digitClassifier.isInitialized)) {
      // Add these lines to create and start the trace
      val classifyTrace = firebasePerformance.newTrace("classify")
      classifyTrace.start()
      digitClassifier
        .classifyAsync(bitmap)
        .addOnSuccessListener { resultText -> 
          // Add this line to stop the trace on success
          classifyTrace.stop()
          predictedTextView?.text = resultText
        }
        .addOnFailureListener { e ->
          predictedTextView?.text = getString(
            R.string.tfe_dc_classification_error_message,
            e.localizedMessage
          )
          Log.e(TAG, "Error classifying drawing.", e)
        }
    }
  }

Performans olayları için günlük mesajlarını görüntüleyin

  1. Uygulamanızın AndroidManifest.xml dosyasına aşağıdaki gibi bir <meta-data> öğesi ekleyerek Performans İzleme için hata ayıklama günlüğünü etkinleştirin:

AndroidManifest.xml

<application>
    <meta-data
      android:name="firebase_performance_logcat_enabled"
      android:value="true" />
</application>
  1. Herhangi bir hata mesajı için günlük mesajlarınızı kontrol edin.
  2. Performans İzleme, günlük mesajlarını FirebasePerformance ile etiketler. Logcat filtrelemeyi kullanarak, aşağıdaki komutu çalıştırarak özellikle süre izlemeyi ve HTTP/S ağ isteği günlüğünü görüntüleyebilirsiniz:
adb logcat -s FirebasePerformance
  1. Performans İzleme'nin performans olaylarını günlüğe kaydettiğini gösteren aşağıdaki günlük türlerini kontrol edin:
  • Logging TraceMetric
  • Logging NetworkRequestMetric

12. Firebase ML'ye ikinci bir model dağıtın

Modelinizin daha iyi bir model mimarisine sahip olan veya daha büyük veya güncellenmiş bir veri kümesi üzerinde eğitilmiş bir sürüm gibi yeni bir sürümünü bulduğunuzda, mevcut modelimizi yeni sürümle değiştirme konusunda cazip gelebiliriz. Bununla birlikte, testte iyi performans gösteren bir model, üretimde mutlaka eşit derecede iyi performans göstermez. Bu nedenle, orijinal modelimiz ile yenisini karşılaştırmak için üretimde A/B testi yapalım.

Firebase Model Management API'yi Etkinleştir

Bu adımda, Firebase Model Management API'nin Python kodunu kullanarak TensorFlow Lite modelimizin yeni bir sürümünü dağıtmasını sağlayacağız.

ML modellerinizi depolamak için bir paket oluşturun

Firebase Konsolunuzda Depolama'ya gidin ve Başlayın'a tıklayın. fbbea78f0eb3dc9f.png

Kovanızı kurmak için diyaloğu takip edin.

19517c0d6d2aa14d.png

Firebase ML API'sini etkinleştirin

Google Cloud Console'da Firebase ML API sayfasına gidin ve Etkinleştir'i tıklayın.

2414fd5cced6c984.png Sorulduğunda Rakam Sınıflandırıcı uygulamasını seçin.

Yeni bir model eğitin ve Firebase ML'de Yayınlayın

Şimdi daha büyük bir veri kümesi kullanarak modelin yeni bir sürümünü eğiteceğiz ve ardından onu Firebase Admin SDK'yı kullanarak doğrudan eğitim not defterinden programlı olarak dağıtacağız.

Hizmet hesabı için özel anahtarı indirin

Firebase Admin SDK'sını kullanmadan önce bir hizmet hesabı oluşturmamız gerekecek. Bu bağlantıyı tıklayarak Firebase konsolunun Hizmet Hesapları panelini açın ve Firebase Yönetici SDK'sı için yeni bir hizmet hesabı oluşturmak için düğmeyi tıklayın. İstendiğinde, Yeni Özel Anahtar Oluştur düğmesini tıklayın. Colab not defterinden isteklerimizin kimliğini doğrulamak için hizmet hesabı anahtarını kullanacağız.

c3b95de1e5508516.png

Artık yeni modeli eğitebilir ve dağıtabiliriz.

  1. Bu ortak çalışma not defterini açın ve kendi Drive'ınız altında bir kopyasını oluşturun.
  2. İlk hücreyi "Geliştirilmiş bir TensorFlow Lite modeli eğitin" solundaki oynat düğmesine tıklayarak çalıştırın. Bu yeni bir modeli eğitecek ve biraz zaman alabilir.
  3. İkinci hücreyi çalıştırmak, bir dosya yükleme istemi oluşturacaktır. Hizmet hesabınızı oluştururken Firebase Konsolundan indirdiğiniz json dosyasını yükleyin.

71e847c6a85423b3.png

  1. Son iki hücreyi çalıştırın.

Colab notebook'u çalıştırdıktan sonra Firebase konsolunda ikinci bir model görmelisiniz. İkinci modelin mnist_v2 olarak adlandırıldığından emin olun.

c316683bb4d75d57.png

13. Remote Config aracılığıyla bir model seçin

Artık iki ayrı modelimiz olduğuna göre, çalışma zamanında hangi modelin indirileceğini seçmek için bir parametre ekleyeceğiz. İstemcinin aldığı parametrenin değeri, istemcinin hangi modeli indireceğini belirleyecektir.

Firebase konsolunda Yapılandırma Kuralları ekleyin

İlk olarak, Firebase konsolunu açın ve sol gezinme menüsündeki Remote Config düğmesine tıklayın. Ardından, "Parametre Ekle" düğmesine tıklayın.

Yeni parametre model_name olarak adlandırın ve ona varsayılan bir "mnist_v1" değeri verin. Remote config parametresine modelin adını koyarak, test etmek istediğimiz her model için yeni bir parametre eklemeden birden fazla modeli test edebiliriz. Güncellemeleri uygulamak için Değişiklikleri Yayınla'ya tıklayın.

2949cb95c7214ca4.png

Firebase RemoteConfig bağımlılığı ekleyin

uygulama/build.gradle

implementation 'com.google.firebase:firebase-config-ktx:21.1.1'

Firebase Remote Config'i Yapılandır

MainActivity.kt

  private fun configureRemoteConfig() {
    remoteConfig = Firebase.remoteConfig
    val configSettings = remoteConfigSettings {
      minimumFetchIntervalInSeconds = 3600
    }
    remoteConfig.setConfigSettingsAsync(configSettings)
  }

Yapılandırmayı İste ve Kullan

Yapılandırma için bir getirme isteği oluşturun ve yapılandırma parametrelerini alıp kullanmak için bir tamamlama işleyicisi ekleyin.

MainActivity.kt

 private fun setupDigitClassifier() {
    configureRemoteConfig()
    remoteConfig.fetchAndActivate()
      .addOnCompleteListener { task ->
        if (task.isSuccessful) {
          val modelName = remoteConfig.getString("model_name")
          val downloadTrace = firebasePerformance.newTrace("download_model")
          downloadTrace.start()
          downloadModel(modelName)
            .addOnSuccessListener {
              downloadTrace.stop()
            }
        } else {
          showToast("Failed to fetch model name.")
        }
      }
  }

Uzaktan Yapılandırmayı Test Et

  1. Tıkla 98205811bbed9d74.png Çalıştır düğmesi.
  2. mnist_v1 modelinin indirildiğini belirten Toast mesajını gördüğünüzden emin olun.
  3. Firebase Konsoluna geri dönün, varsayılan değeri mnist_v2 olarak değiştirin ve güncellemeleri uygulamak için Değişiklikleri Yayınla'yı seçin.
  4. Uygulamayı yeniden başlatın ve bu sefer mnist_v2 modelinin indirildiğini belirten Toast mesajını kontrol edin.

14. A/B Test Modeli Etkinliği

Firebase A/B Testi, ürün ve pazarlama denemelerini çalıştırmayı, analiz etmeyi ve ölçeklendirmeyi kolaylaştırarak uygulama deneyiminizi optimize etmenize yardımcı olur. Son olarak, iki modelimizden hangisinin daha iyi performans gösterdiğini görmek için Firebase'in yerleşik A/B Testi davranışını kullanabiliriz.

Firebase konsolunda Analytics -> Etkinlikler'e gidin. correct_inference etkinliği gösteriliyorsa, bunu bir "Dönüşüm etkinliği" olarak işaretleyin, değilse, Analytics -> Dönüşüm Etkinlikleri'ne gidebilir ve "Yeni Bir Dönüşüm Etkinliği Oluştur"u tıklayabilir ve correct_inference.

Şimdi Firebase konsolunda "Remote Config"e gidin, az önce eklediğimiz "model_name" parametresindeki daha fazla seçenek menüsünden "A/B testi" düğmesini seçin.

fad5ea36969d2aeb.png

Aşağıdaki menüde varsayılan adı kabul edin.

d7c006669ace6e40.png

Açılır menüden uygulamanızı seçin ve hedefleme ölçütlerini etkin kullanıcıların %50'si olarak değiştirin.

cb72dcc7d2666bd3.png

correct_inference olayını daha önce bir dönüşüm olarak ayarlayabildiyseniz, bu olayı izlenecek birincil metrik olarak kullanın. Aksi takdirde, etkinliğin Analytics'te görünmesini beklemek istemiyorsanız, correct_inference manually olarak ekleyebilirsiniz.

1ac9c94fb3159271.png

Son olarak, Varyantlar ekranında, kontrol grubu varyantınızı mnist_v1 ve Varyant A grubunuzu mnist_v2 kullanacak şekilde ayarlayın.

e4510434f8da31b6.png

Sağ alt köşedeki Gözden Geçir düğmesini tıklayın.

Tebrikler, iki ayrı modeliniz için başarıyla bir A/B testi oluşturdunuz! A/B testi şu anda taslak durumundadır ve herhangi bir zamanda "Denemeyi Başlat" düğmesine tıklanarak başlatılabilir.

A/B testine daha yakından bakmak için A/B Testi belgelerine bakın.

15. Tebrikler!

Bu codelab'de, uygulamanızdaki statik olarak paketlenmiş bir tflite varlığını Firebase'den dinamik olarak yüklenmiş bir TFLite modeliyle nasıl değiştireceğinizi öğrendiniz. TFLite ve Firebase hakkında daha fazla bilgi edinmek için diğer TFLite örneklerine ve Firebase başlangıç ​​kılavuzlarına göz atın.

Neyi kapsadık

  • TensorFlow Lite
  • Firebase ML
  • Firebase Analytics
  • Firebase Performans İzleme
  • Firebase Uzaktan Yapılandırma
  • Firebase A/B Testi

Sonraki adımlar

  • Uygulamanızda Firebase ML Deployment'ı uygulayın.

Daha fazla bilgi edin

Sorunuz mu var?

Sorunları Bildir