Uygulamanıza Özel Model Entegre Etme

1. Başlamadan önce

Bu serinin ilk Codelab'inde, bir resmin içeriğini ayrıştırmak için Resim Etiketleme'yi kullanan çok basit bir uygulama geliştirdiniz. Ona bir papatya resmi gönderdin ve o da taç taç veya gökyüzü gibi şeyleri gördü. Ardından ikinci Codelab'de beş farklı çiçek türünü tanıyan yeni ve özel bir model eğitmek için Python'a geçtiniz.

Bu codelab'de, ilk laboratuvardaki uygulamayı ikinci laboratuvardaki modelle güncelleyeceksiniz.

Bu depoyu klonlayarak bu kod laboratuvarı için tam kaynak kodunu edinebilirsiniz. Android ve iOS için alt dizinler gösterilir. Sonraki codelab'in kodu ImageClassifierStep1 olarak mevcuttur. Bu codelab için tamamlanmış kod, ImageClassifierStep2 olarak kullanılabilir.

Ön koşullar

  • Bu öğrenme rotasındaki ilk iki codelab'i tamamlamış olmanız gerekir

Neler geliştirip öğreneceksiniz?

  • Önceki laboratuvarda eğitilen özel modelleri Android veya iOS uygulamasına entegre etme

Gerekenler

  • Laboratuvarın Android bölümü için developer.android.com/studio adresinden Android Studio'ya erişebilirsiniz
  • Laboratuvarın iOS bölümü için Apple App Store'da sunulan Xcode

2. Başlangıç uygulamasını edinin

Öncelikle, Android veya iOS Codelab'de ilk Bilgisayar Görüşü Uygulamanızı Derleyin'deki uygulamaya ihtiyacınız vardır. Laboratuvarı tamamladıysanız laboratuvarın adı ImageClassifierStep1 olacaktır. Laboratuvarı tamamlamak istemiyorsanız depodan tamamlanmış sürümü klonlayabilirsiniz

Uygulamayı Android Studio'da açın, ihtiyacınız olan güncellemeleri yapın ve hazır olduğunda, çalıştığından emin olmak için uygulamayı çalıştırın. Aşağıdakine benzer bir tablo görürsünüz:

f3703d45d1332d1d.png

Oldukça basit bir uygulama olsa da sadece küçük bir kodla oldukça güçlü işlevler sunar. Ancak bu çiçeğin yalnızca bir çiçek olarak değil, papatya olarak tanınmasını istiyorsanız resim sınıflandırıcınız için özel model oluşturun codelab'inden özel modelinizi kullanacak şekilde uygulamayı güncellemeniz gerekir.

3. Özel Makine Öğrenimi Kiti Modellerini kullanmak için build.gradle dosyasını güncelleyin

  1. Android Studio'yu kullanarak uygulama düzeyindeki build.gradle dosyasını bulun. Bunu yapmanın en kolay yolu proje gezginini kullanmaktır. Üst tarafta Android'in seçili olduğundan emin olun, alt tarafta da Gradle Komut Dosyaları için bir klasör göreceksiniz.
  2. Modül için olanı açın ve uygulama adınızın ardından ".app" ifadesini ekleyin. burada gösterildiği gibi – (Modül: ImageClassifierStep1.app):

8fe1d04b40610047.png

  1. Dosyanın alt kısmında bağımlılıklar ayarını bulun. Burada şu satırı görürsünüz:
implementation 'com.google.mlkit:image-labeling:17.0.1'

Sürüm numarası farklı olabilir. En yeni sürüm numarasını her zaman şu adresteki ML Kit sitesinden bulabilirsiniz: https://developers.google.com/ml-kit/vision/image-labeling/android

  1. Bunu, özel resim etiketleme kitaplığı referansıyla değiştirin. Bu sürümün sürüm numarasını şu adreste bulabilirsiniz: https://developers.google.com/ml-kit/vision/image-labeling/custom-models/android
implementation 'com.google.mlkit:image-labeling-custom:16.3.1'
  1. Ayrıca, önceki laboratuvarda oluşturduğunuz bir .tflite modelini ekleyeceksiniz. Android Studio uygulamanızı derlerken bu modelin sıkıştırılmasını istemezsiniz, bu nedenle aynı build.gradle dosyasının Android bölümünde bu ayarı kullandığınızdan emin olun:
aaptOptions{
    noCompress "tflite"
}

Başka bir ayara girmediğinden emin olun. Doğrudan android etiketinin altına yerleştirilmelidir. Aşağıda bununla ilgili bir örnek verilmiştir:

62d546bff11d2a50.png

4. TFLite Modelini ekleme

Önceki codelab'de özel modelinizi oluşturdunuz ve model.tflite olarak indirdiniz.

Projenizde, şu anda flower1.jpg içeren assets klasörünüzü bulun. Modeli bu klasöre aşağıdaki şekilde kopyalayın:

  1. Android Studio'da Öğeler klasörünü sağ tıklayın. Açılan menüde Finder'da Göster'i seçin. (Windows'da "Gezgin'de göster", Linux'ta ise "Dosyalarda Göster".)

db30b47e419a326b.png

  1. Dosya sistemindeki dizine yönlendirilirsiniz. model.tflite dosyasını flower1.jpg. ile birlikte bu dizine kopyalayın.

36de0c51bec1c19e.png

Android Studio, her iki dosyayı da öğe klasörünüzde gösterecek şekilde güncellenir:

e9f4e9f394d9b357.png

Artık kodunuzu güncellemeye hazırsınız.

5. Özel model için kodunuzu güncelleme

İlk adım, özel modeli yüklemek için kod eklemektir.

  1. MainActivity dosyanızda, setContentView(R.layout.activity_main) yazan satırın hemen altında, onCreate öğenize şunu ekleyin:

Bu işlem, model.tflite öğesinden derleme yapmak için bir LocalModel kullanır. Android Studio "LocalModel"i döndürerek şikayetçiyse kütüphaneyi içe aktarmak için ALT + Enter tuşlarına basın. Sizin için com.google.mlkit.common.model.LocalModel'e bir içe aktarma eklemelidir.

val localModel = LocalModel.Builder()
        .setAssetFilePath("model.tflite")
        .build()

Önceden, btn.setOnClickListener işleyicinizde varsayılan modeli kullanıyordunuz. Aşağıdaki kodla ayarlanmıştır:

val labeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)

Özel modeli kullanmak için bunu değiştirin.

  1. Özel seçenekler nesnesi oluşturma:
val options = CustomImageLabelerOptions.Builder(localModel)
        .setConfidenceThreshold(0.7f)
        .setMaxResultCount(5)
        .build()

Bu işlem, varsayılan seçenekleri özelleştirilmiş bir grupla değiştirir. Güven eşiği, döndürülecek tahminlerin kalitesi için çıtayı belirler. Bu codelab'in üst kısmındaki örneğe geri dönerseniz, resmin papatya olduğu durumda 4 tahmin görürsünüz. Her birinin yanında "Gökyüzü" gibi bir değer bulunan 4 tahmin gösterilir. 0,7632'dir.

Yüksek bir güven eşiği kullanarak düşük kaliteli sonuçları etkili bir şekilde filtreleyebilirsiniz. Örneğin, bu değer 0,9 olarak ayarlandığında önceliği bundan daha düşük olan etiketler döndürülmez. setMaxResultCount(), çok sayıda sınıfa sahip modellerde kullanışlıdır. Ancak bu modelde yalnızca 5 sınıf olduğundan modeli 5 olarak bırakmanız yeterlidir.

Artık etiketleyici için seçeneklere sahip olduğunuza göre etiketleyicinin örneklendirmesini aşağıdaki şekilde değiştirebilirsiniz:

val labeler = ImageLabeling.getClient(options)

Kodunuzun geri kalanı değiştirilmeden çalışır. Mutlaka deneyin!

dd40c36c4edbb33.png

Burada, bu çiçeğin 0,959 olasılıkla papatya olarak tanımlandığını görebilirsiniz.

İkinci bir çiçek resmi eklediğinizi ve bu resimle tekrar yaptığınızı varsayalım:

8556a5fbea487842.png

Onu bir gül olarak tanımlar.

Sadece "gül" yerine neden güller yazdığını merak ediyor olabilirsiniz. Bunun nedeni veri kümesinde etiketlerin klasör adlarıyla verilmesi ve maalesef bu klasör adlarının bir miktar tutarsız olması, bazen tekil ("daisy" gibi) ve bazen çoğul ("güller" gibi) kullanılmasıdır. Bunu resimdeki öğeleri saymaya çalışan modelle karıştırmayın. Model bundan çok daha basittir ve yalnızca çiçek türlerini tanımlayabilir.

6. iOS Start Uygulamasını indirin

  1. Öncelikle, ilk Codelab'deki uygulamaya ihtiyacınız olacaktır. Laboratuvarı tamamladıysanız laboratuvarın adı ImageClassifierStep1 olacaktır. Laboratuvarı tamamlamak istemiyorsanız depodan tamamlanmış sürümü klonlayabilirsiniz. Kapsüller ve .xcworkspace depoda yoktur, bu nedenle bir sonraki adıma geçmeden önce "pod install" komutunu çalıştırdığınızdan emin olun. .xcproject ile aynı dizinden alınır.
  2. ImageClassifierStep1.xcworkspace öğesini Xcode'da açın. Paketlenmiş ML Kit'lerini kapsüller kullanarak paketlediğiniz için .xcproject yerine .xcworkspace'i kullanmanız gerektiğini ve çalışma alanının bunları yükleyeceğini unutmayın.

Bu laboratuvarın geri kalanında uygulamayı iPhone simülasyon aracında çalıştıracağım. Bu uygulama, codelab'deki derleme hedeflerini destekleyecek. Kendi cihazınızı kullanmak istiyorsanız proje ayarlarınızdaki derleme hedefini, iOS sürümünüzle eşleşecek şekilde değiştirmeniz gerekebilir.

Bu komutu çalıştırdığınızda şuna benzer bir şey görürsünüz:

9e151ed18f99fb98.png

Çok genel sınıflandırmalara dikkat edin: taç yaprak, çiçek, gökyüzü. Önceki codelab'de oluşturduğunuz model, bu çiçek de dahil 5 çiçek türünü algılamak üzere eğitildi: papatya.

Bu codelab'in geri kalanında, uygulamanızı özel modele yükseltmek için neler gerektiğine bakacaksınız.

7. Özel ML Kiti Görüntü Etiketleyici Kapsüllerini Kullanma

İlk uygulama, temel ML Kit Image Labeler kitaplıklarını ve modelini almak için bir kapsül dosyası kullandı. Özel görüntü etiketleme kitaplıklarını kullanmak için bunu güncellemeniz gerekir.

  1. Proje dizininizde podfile adlı dosyayı bulun. Açtığınızda, şuna benzer bir şey görürsünüz:
platform :ios, '10.0'

target 'ImageClassifierStep1' do
        pod 'GoogleMLKit/ImageLabeling'
end
  1. ImageLabeling olan kapsül beyanını ImageLabelingCustom olarak değiştirin. Örneğin:
platform :ios, '10.0'

target 'ImageClassifierStep1' do
        pod 'GoogleMLKit/ImageLabelingCustom'
end
  1. İşiniz bittiğinde terminali kullanarak podcast dosyasını (ve .xcworkspace) içeren dizine gidin ve pod install komutunu çalıştırın.

bb5d78eb7c7ab975.png

Birkaç dakika sonra MLKitImageLabeling kitaplıkları kaldırılır ve özel kitaplıklar eklenir. Artık .xcworkspace dosyanızı açarak kodunuzu düzenleyebilirsiniz.

8. TFLite modelini Xcode'a ekleme

Önceki codelab'de özel bir model oluşturdunuz ve bu modeli model.tflite olarak indirdiniz. Bu kod elinizde yoksa geri dönüp ilgili codelab'i çalıştırın veya buradaki colab kodunu inceleyin. Google Colab'e erişiminiz yoksa not defterini bu bağlantıdan bulabilirsiniz

  1. Çalışma alanı Xcode'da açıkken model.tflite'ı projenize sürükleyin. Dosya, ViewController.swift veya Main.storyboard gibi dosyalarınızın geri kalanıyla aynı klasörde olmalıdır.
  2. Dosyayı ekleme seçeneklerini içeren bir iletişim kutusu açılır. Hedeflere Ekle'nin seçildiğinden emin olun. Aksi takdirde, model bir cihaza dağıtıldığında uygulamayla paketlenmez.

"Hedeflere Ekle" seçeneğinin, Bu laboratuvara adım adım devam ediyorsanız ve bu laboratuvara adım adım devam ediyorsanız ImageClassifierStep1 girişinde, gösterilen koda ileri atlarsanız ImageClassifierStep2'i (gösterildiği gibi) görürsünüz.

5b6a7f40c73f0f1f.png

Bu sayede modeli yükleyebilirsiniz. Bunu nasıl yapacağınızı bir sonraki adımda öğreneceksiniz.

9. Özel Model için Kodunuzu Güncelleme

  1. ViewController.swift dosyanızı açın. "Import MLKitImageLabeling" bölümünde bir hata görebilirsiniz tıklayın. Bunun nedeni, kapsül dosyanızı güncellerken genel görüntü etiketleme kitaplıklarını kaldırmanızdır. Bu satırı silebilir ve aşağıdakilerle güncelleyebilirsiniz:
import MLKitVision
import MLKit
import MLKitImageLabelingCommon
import MLKitImageLabelingCustom

Bunları hızlı bir şekilde okurken aynı kodu tekrar ettiklerini düşünebilirsiniz! Ama "Yaygın" ve "Custom" (Özel) sona eriyor!

  1. Ardından, önceki adımda eklediğiniz özel modeli yüklersiniz. getLabels() işlevini bulun. visionImage.orientation = image.imageOrientation yazan satırın altına şu satırları ekleyin:
// Add this code to use a custom model
let localModelFilePath = Bundle.main.path(forResource: "model", ofType: "tflite")
let localModel = LocalModel(path: localModelFilePath!)
  1. Genel ImageLabeler seçeneklerini belirten kodu bulun. Şu kitaplıklar kaldırıldığı için büyük olasılıkla hata veriyordur:
let options = ImageLabelerOptions()

Yerel modeli belirten CustomImageLabelerOptions kullanmak için bunu bu kodla değiştirin:

let options = CustomImageLabelerOptions(localModel: localModel)

Hepsi bu kadar! Uygulamanızı hemen çalıştırmayı deneyin. Görüntüyü sınıflandırmaya çalıştığınızda resmin daha doğru olması ve yüksek olasılıkla bir papatyaya baktığınızı söylemesi gerekir.

238cd21748a97cf4.png

İkinci bir çiçek resmi eklediğinizi ve bu resimle tekrar yaptığınızı varsayalım:

75f3970a6b509bfe.png

Uygulama, bu resmin "güller" etiketiyle eşleştiğini başarıyla tespit etti.

10. Tebrikler!

Artık bir resmin içeriklerini tanımak için genel model kullanan bir uygulama geliştirdiniz, çiçekler gibi belirli şeyleri tanımak için kendi makine öğrenimi modelinizi oluşturdunuz ve ardından uygulamanızı özel modelinizi kullanacak şekilde güncellediniz.

Sonuçta ortaya çıkan uygulama, gruplanmış resim öğelerini kullandığından elbette çok sınırlıydı. Ama makine öğrenimi kısmı iyi çalışıyor. Örneğin, AndroidX Kamera'yı kullanarak canlı feed'den kareler alabilir ve telefonunuzun hangi çiçekleri tanıdığını görmek için bu kareleri sınıflandırabilirsiniz!

Bundan sonra olasılıklar sonsuzdur. Çiçek dışında bir şeyle ilgili kendi verileriniz varsa, Bilgisayar Görüşü'nü kullanarak onları tanıyan bir uygulama oluşturmak için neye ihtiyacınız olduğunu temel almış olursunuz. Bunlar daha geniş bir dünyaya açılan ilk adımlar. Umarız bu adımlarla çalışmaktan keyif almışsınızdır.