AutoML Vision Edge'i kullanarak kendi modelinizi eğittikten sonra bunu uygulamanızda görüntülerdeki nesneleri algılamak için kullanabilirsiniz.
AutoML Vision Edge'den eğitilen modelleri entegre etmenin iki yolu vardır: Modeli, uygulamanızın varlık klasörüne yerleştirerek paketleyebilir veya Firebase'den dinamik olarak indirebilirsiniz.
Model paketleme seçenekleri | |
---|---|
Uygulamanızda paketlenmiştir |
|
Firebase'de barındırılıyor |
|
Sen başlamadan önce
Bir model indirmek istiyorsanız , henüz yapmadıysanız Firebase'i Android projenize eklediğinizden emin olun. Modeli paketlediğinizde buna gerek yoktur.
TensorFlow Lite Görev kitaplığının bağımlılıklarını modülünüzün genellikle
app/build.gradle
olan uygulama düzeyindeki gradle dosyasına ekleyin:Bir modeli uygulamanızla birlikte paketlemek 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 bir model indirmek için Firebase ML bağımlılığını da ekleyin:
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ükleyin
Yerel bir model kaynağı yapılandırma
Modeli uygulamanızla paketlemek için:
- Modeli, Google Cloud konsolundan indirdiğiniz zip arşivinden çıkarın.
- Modelinizi uygulama paketinize ekleyin:
- Projenizde varlıklar klasörünüz yoksa,
app/
klasöre sağ tıklayıp ardından Yeni > Klasör > Varlıklar Klasörü seçeneğine tıklayarak bir tane oluşturun. - Gömülü meta veriler içeren
tflite
model dosyanızı varlıklar klasörüne kopyalayın.
- Projenizde varlıklar klasörünüz yoksa,
Gradle'ın uygulamayı oluştururken model dosyasını sıkıştırmadığından emin olmak için uygulamanızın
build.gradle
dosyasına aşağıdakileri ekleyin:android { // ... aaptOptions { noCompress "tflite" } }
Model dosyası uygulama paketine dahil edilecek ve ham varlık olarak kullanıma sunulacaktır.
Firebase tarafından barındırılan bir model kaynağı yapılandırma
Uzaktan barındırılan modeli kullanmak için, modeli yayınlarken atadığınız adı belirterek bir RemoteModel
nesnesi oluşturun:
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, indirmeye izin vermek istediğiniz koşulları belirterek model indirme görevini başlatın. Model cihazda yoksa veya modelin daha yeni bir sürümü mevcutsa görev, modeli Firebase'den eşzamansız olarak indirir:
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.
}
Çoğu uygulama, indirme görevini kendi başlatma kodunda başlatır, ancak bunu, modeli kullanmanız gerekmeden önce herhangi bir noktada yapabilirsiniz.
Modelinizden bir nesne algılayıcı oluşturun
Model kaynaklarınızı yapılandırdıktan sonra bunlardan birinden bir ObjectDetector
nesnesi oluşturun.
Yalnızca yerel olarak paketlenmiş bir modeliniz varsa, model dosyanızdan bir nesne algılayıcı oluşturmanız ve gerek duymak istediğiniz güven puanı eşiğini yapılandırmanız yeterlidir (bkz. Modelinizi değerlendirin ):
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, çalıştırmadan önce indirilip indirilmediğini kontrol etmeniz gerekecektir. Model yöneticisinin isModelDownloaded()
yöntemini kullanarak model indirme görevinin durumunu kontrol edebilirsiniz.
Bunu yalnızca nesne algılayıcıyı çalıştırmadan önce onaylamanız gerekse de, hem uzaktan barındırılan bir modeliniz hem de yerel olarak paketlenmiş bir modeliniz varsa, nesne algılayıcıyı başlatırken bu kontrolü gerçekleştirmek mantıklı olabilir: uzaktan kumandadan bir nesne algılayıcısı oluşturun indirilmişse modelden, aksi halde yerel modelden.
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, modelin indirildiğini onaylayana kadar modelle ilgili işlevleri (örneğin, kullanıcı arayüzünüzün grileştirilmesi veya bir kısmının gizlenmesi) devre dışı bırakmalısınız. Bunu, model yöneticisinin download()
yöntemine bir dinleyici ekleyerek yapabilirsiniz.
Modelinizin indirildiğini öğrendikten sonra model dosyasından bir nesne algılayıcı oluşturun:
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ş görüntüsünü hazırlayın
Ardından etiketlemek istediğiniz her görüntü için görüntünüzden bir TensorImage
nesnesi oluşturun. fromBitmap
yöntemini kullanarak bir Bitmap
TensorImage
nesnesi oluşturabilirsiniz:
Java
TensorImage image = TensorImage.fromBitmap(bitmap);
Kotlin
val image = TensorImage.fromBitmap(bitmap)
Görüntü verileriniz bir Bitmap
değilse TensorFlow Lite belgelerinde gösterildiği gibi bir piksel dizisi yükleyebilirsiniz.
3. Nesne dedektörünü çalıştırın
Bir görüntüdeki nesneleri algılamak için TensorImage
nesnesini ObjectDetector
detect()
yöntemine iletin.
Java
List<Detection> results = objectDetector.detect(image);
Kotlin
val results = objectDetector.detect(image)
4. Etiketli nesneler hakkında bilgi edinin
Nesne algılama işlemi başarılı olursa Detection
nesnelerinin bir listesini döndürür. Her Detection
nesnesi, görüntüde algılanan bir şeyi temsil eder. Her 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ı artırmaya yönelik ipuçları
Görüntüleri gerçek zamanlı bir uygulamada etiketlemek istiyorsanız en iyi kare hızlarına ulaşmak için şu yönergeleri izleyin:
- Görüntü etiketleyiciye çağrıları kısın. Görüntü etiketleyici çalışırken yeni bir video karesi kullanılabilir hale gelirse kareyi bırakın. Örnek için hızlı başlangıç örnek uygulamasında
VisionProcessorBase
sınıfına bakın. - Grafikleri giriş görüntüsüne yerleştirmek için görüntü etiketleyicinin çıkışını kullanıyorsanız, önce sonucu alın, ardından tek adımda görüntüyü oluşturun ve kaplayın. Bunu yaparak, her giriş karesi için ekran yüzeyini yalnızca bir kez görüntüleyebilirsiniz. Örnek için hızlı başlangıç örnek uygulamasındaki
CameraSourcePreview
veGraphicOverlay
sınıflarına bakın. Camera2 API'sini kullanıyorsanız görüntüleri
ImageFormat.YUV_420_888
formatında yakalayın.Eski Kamera API'sini kullanıyorsanız görüntüleri
ImageFormat.NV21
formatında yakalayın.