AutoML Vision Edge'i kullanarak kendi modelinizi eğittikten sonra resimlerdeki nesneleri algılamak için uygulamanızda kullanabilirsiniz.
AutoML Vision Edge'den eğitilen modelleri entegre etmenin iki yolu vardır: modelinizi uygulamanızın öğe klasörüne yerleştirerek gruplandırabilir veya Firebase'den dinamik olarak indirebilirsiniz.
Model paketleme seçenekleri | |
---|---|
Uygulamanızda paket olarak sunuluyor |
|
Firebase ile barındırılan |
|
Başlamadan önce
Bir model indirmek istiyorsanız şunu yaptığınızdan emin olun: Firebase'i Android projenize ekleyin, (onaylamadıysanız). Modeli paket haline getirirken bu işlem gerekli değildir.
TensorFlow Lite Görev kitaplığı için bağımlılıkları modülünüzün uygulama düzeyinde gradle dosyası vardır. Bu genellikle
app/build.gradle
olan:Bir modeli uygulamanızla gruplandırmak için:
dependencies { // ... // Object detection with a bundled Auto ML model implementation 'org.tensorflow:tensorflow-lite-task-vision:0.0.0-nightly-SNAPSHOT' }
Firebase'den dinamik olarak model indirmek için Firebase ML'yi de ekleyin. bağımlılık:
dependencies { // ... // Object detection with an Auto ML model deployed to Firebase implementation platform('com.google.firebase:firebase-bom:26.1.1') implementation 'com.google.firebase:firebase-ml-model-interpreter' implementation 'org.tensorflow:tensorflow-lite-task-vision:0.0.0-nightly' }
1. Modeli yükleme
Yerel model kaynağını yapılandırma
Modeli uygulamanızla paket haline getirmek için:
- Modeli şuradan indirdiğiniz zip arşivinden çıkarın: Google Cloud konsolunu kullanın.
- Modelinizi uygulama paketinize ekleyin:
- Projenizde bir öğe klasörü yoksa şu tarihe kadar bir klasör oluşturun:
app/
klasörünü sağ tıklayıp Yeni > Klasör > Öğeler klasörünü açın. - Yerleşik meta veriler içeren
tflite
model dosyanızı öğelere kopyalayın tıklayın.
- Projenizde bir öğe klasörü yoksa şu tarihe kadar bir klasör oluşturun:
Aşağıdakini uygulamanızın
build.gradle
dosyasına ekleyin: Gradle, uygulamayı oluştururken model dosyasını sıkıştırmaz:android { // ... aaptOptions { noCompress "tflite" } }
Model dosyası, uygulama paketine eklenir ve işlenmemiş bir öğe olarak görebiliriz.
Firebase tarafından barındırılan bir model kaynağını yapılandırma
Uzaktan barındırılan modeli kullanmak için bir RemoteModel
nesnesi oluşturun.
modeli yayınlarken atadığınız adı belirtin:
Java
// Specify the name you assigned when you deployed the model.
FirebaseCustomRemoteModel remoteModel =
new FirebaseCustomRemoteModel.Builder("your_model").build();
Kotlin
// Specify the name you assigned when you deployed the model.
val remoteModel =
FirebaseCustomRemoteModel.Builder("your_model_name").build()
Ardından, model indirme görevini başlatmak için model indirme işleminde indirmeye izin vermek istiyorsunuz. Model cihazda yoksa veya sürümü kullanılabiliyorsa görev, yeni bir sürümün yüklü olduğu modeliniz:
Java
DownloadConditions downloadConditions = new DownloadConditions.Builder()
.requireWifi()
.build();
RemoteModelManager.getInstance().download(remoteModel, downloadConditions)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(@NonNull Task<Void> task) {
// Success.
}
});
Kotlin
val downloadConditions = DownloadConditions.Builder()
.requireWifi()
.build()
RemoteModelManager.getInstance().download(remoteModel, downloadConditions)
.addOnSuccessListener {
// Success.
}
Birçok uygulama, indirme görevini başlatma kodunda başlatır, ancak bunu, modeli kullanmaya başlamadan önce istediğiniz zaman yapabilirsiniz.
Modelinizden nesne algılayıcısı oluşturma
Model kaynaklarınızı yapılandırdıktan sonraObjectDetector
sağlayabilir.
Yalnızca yerel olarak paketlenmiş bir modeliniz varsa model dosyasını seçin ve güven puanını (Modelinizi değerlendirme bölümüne bakın):
Java
// Initialization
ObjectDetectorOptions options = ObjectDetectorOptions.builder()
.setScoreThreshold(0) // Evaluate your model in the Google Cloud console
// to determine an appropriate value.
.build();
ObjectDetector objectDetector = ObjectDetector.createFromFileAndOptions(context, modelFile, options);
Kotlin
// Initialization
val options = ObjectDetectorOptions.builder()
.setScoreThreshold(0) // Evaluate your model in the Google Cloud console
// to determine an appropriate value.
.build()
val objectDetector = ObjectDetector.createFromFileAndOptions(context, modelFile, options)
Uzaktan barındırılan bir modeliniz varsa bu modelin
indiremezsiniz. Model indirme işleminin durumunu kontrol edebilirsiniz.
model yöneticisinin isModelDownloaded()
yöntemini kullanarak görevi tamamlayın.
Nesne algılayıcıyı çalıştırmadan önce bunu onaylamanız yeterli olsa da, hem uzaktan barındırılan hem de yerel olarak paketlenen nesne algılayıcıyı örneklendirirken şu kontrolü gerçekleştirmek mantıklıdır: nesne dedektöründen, indirilmişse uzak modelden ve yerel modelden modelini kullanmanız gerekir.
Java
FirebaseModelManager.getInstance().isModelDownloaded(remoteModel)
.addOnSuccessListener(new OnSuccessListener<Boolean>() {
@Override
public void onSuccess(Boolean isDownloaded) {
}
});
Kotlin
FirebaseModelManager.getInstance().isModelDownloaded(remoteModel)
.addOnSuccessListener { success ->
}
Yalnızca uzaktan barındırılan bir modeliniz varsa modelle ilgili ayarını devre dışı bırakmanız gerekir.
(örneğin, kullanıcı arayüzünüzün bir kısmını devre dışı bırakan veya gizleyen)
modelin indirildiğini onaylayın. Bunu bir dinleyici ekleyerek
model yöneticisinin download()
yöntemine.
Modelinizin indirildiğinden emin olduktan sonra, Google Etiket Yöneticisi'nden bir nesne model dosyası:
Java
FirebaseModelManager.getInstance().getLatestModelFile(remoteModel)
.addOnCompleteListener(new OnCompleteListener<File>() {
@Override
public void onComplete(@NonNull Task<File> task) {
File modelFile = task.getResult();
if (modelFile != null) {
ObjectDetectorOptions options = ObjectDetectorOptions.builder()
.setScoreThreshold(0)
.build();
objectDetector = ObjectDetector.createFromFileAndOptions(
getApplicationContext(), modelFile.getPath(), options);
}
}
});
Kotlin
FirebaseModelManager.getInstance().getLatestModelFile(remoteModel)
.addOnSuccessListener { modelFile ->
val options = ObjectDetectorOptions.builder()
.setScoreThreshold(0f)
.build()
objectDetector = ObjectDetector.createFromFileAndOptions(
applicationContext, modelFile.path, options)
}
2. Giriş resmini hazırlama
Ardından, etiketlemek istediğiniz her bir görüntü içinTensorImage
görüntüsüdür. Şu komutu kullanarak Bitmap
öğesinden TensorImage
nesnesi oluşturabilirsiniz:
fromBitmap
yöntemi:
Java
TensorImage image = TensorImage.fromBitmap(bitmap);
Kotlin
val image = TensorImage.fromBitmap(bitmap)
Resim verileriniz bir Bitmap
içinde değilse şu şekilde bir piksel dizisi yükleyebilirsiniz:
TensorFlow Lite belgelerine bakın.
3. Nesne algılayıcıyı çalıştırma
Bir görüntüdeki nesneleri algılamak için TensorImage
nesnesini
ObjectDetector
ürününün detect()
yöntemi.
Java
List<Detection> results = objectDetector.detect(image);
Kotlin
val results = objectDetector.detect(image)
4. Etiketli nesneler hakkında bilgi edinme
Nesne algılama işlemi başarılı olursa bir Detection
listesi döndürür.
nesneler'i tıklayın. Her Detection
nesnesi
görüntüsüdür. Her bir nesnenin sınırlayıcı kutusunu ve etiketlerini alabilirsiniz.
Örneğin:
Java
for (Detection result : results) {
RectF bounds = result.getBoundingBox();
List<Category> labels = result.getCategories();
}
Kotlin
for (result in results) {
val bounds = result.getBoundingBox()
val labels = result.getCategories()
}
Gerçek zamanlı performansı iyileştirmeye yönelik ipuçları
Görüntüleri gerçek zamanlı bir uygulamada etiketlemek isterseniz şu talimatları uygulayın:
- Görüntü etiketleyiciye yapılan çağrıları kısıtlayın. Yeni bir video karesi
resim etiketleyici çalışırken kullanılabilir, çerçeveyi bırakın. Bkz.
Örnek için hızlı başlangıç örnek uygulamasındaki
VisionProcessorBase
sınıfı. - Grafikleri üzerine bindirmek için görüntü etiketleyicinin çıkışını kullanıyorsanız
önce sonucu alın, sonra da resmi oluşturun
tek bir adımda yapabilirsiniz. Bu şekilde, öğeleri ekran yüzeyinde
her giriş karesi için yalnızca bir kez. Bkz.
CameraSourcePreview
ve Hızlı başlangıç örnek uygulamasındakiGraphicOverlay
sınıfındaki örneğine bakalım. -
Camera2 API'sini kullanıyorsanız görüntüleri şurada yakalayın:
ImageFormat.YUV_420_888
biçimindedir.Eski Kamera API'sini kullanıyorsanız görüntüleri şurada yakalayın:
ImageFormat.NV21
biçimindedir.