HMS ML Kit- Canlı Image Classification

Berk Özyurt
Huawei Developers - Türkiye
4 min readDec 24, 2021

Herkese merhaba,

Bu yazımda ML Kit Image Classification servisi hakkında bazı bilgiler verip, bu servisi canlı kamera ile nasıl kullanabileceğimizden bahsederek ufak kod örnekleri paylaşacağım. Huawei’nin geliştiricilere sunduğu mükemmel bir makine öğrenmesi örneği olan bu servisi kodlarken de, kullanırken de çok zevk alacağınıza eminim.

ML Kit Image Classification Nedir?

Image Classification servisi, görüntü temalarını ve uygulama senaryolarını tanımlamak için görüntülerdeki öğeleri insanlar, nesneler, ortamlar, etkinlikler gibi bir çok sezgisel kategorilerde sınıflandırır.

On-device ve on-cloud olmak üzere iki farklı tanıma modunu da desteklemektedir. On-device tanıma, arka plandaki yapay zeka ve makine öğrenmesi algoritmalarının cihaz üzerinde çalıştırılması ve tanıma sonucunun döndürülmesi sürecini ifade etmektedir ve 400'den fazla yaygın kategoriyi kapsamaktadır.

On-cloud tanıma, algılama için kullanılan yapay zeka ve makina öğrenmesi algoritmalarının çalıştığı, bulutta tutulan bir API çağırma sürecini ifade etmektedir. 12.000'den fazla görüntü kategorisini desteklemektedir. Ayrıca bu hizmet sayesinde görüntü sınıflandırma modellerini özelleştirebilirsiniz.

Image Classification servisi, görüntüleri kolaylıkla ve hassasiyetle sınıflandırabilen ve yönetebilen son derece işlevsel uygulamalar için özenle tasaralanmıştır. Fotoğraf galerinizden daha önce çektiğiniz bir fotoğrafı seçerek, anlık olarak kamera ile bir fotoğraf çekerek ya da az sonra örnekte görebileceğiniz gibi canlı kamera ile birlikte görselleri sınıflandırabilir, otomatik olarak kategorize edebilirsiniz. Üstelik tüm bunlar sizin için tasaralanmış özel yapay zeka ve makine öğrenmesi algoritmaları ile çok kolay bir şekilde projenize entegre edilebilir yapıdadır.

On-device tanıma ile karşılaştırıldığında, on-cloud tanıma daha doğru ancak daha az verimlidir ve yalnızca statik görüntü tanımayı desteklemektedir.

HMS ML Kit Image Classification hakkında daha fazla bilgi edinmek için bu bağlantıyı ziyaret edebilirsiniz.

Geliştirme Adımları

  1. Entegrasyon

Huawei Mobil Servislerini kullanmak için öncelikle bir geliştirici hesabı oluşturulmalı ve projeye HMS Core entegre edilmelidir. Bu adımlarla ilgili detaylı bilgiye aşağıdaki bağlantıdan ulaşabilirsiniz.

2. Bağımlılıkların Eklenmesi

HMS Core projeye entegre edildikten ve ML Kit konsol üzerinden aktif edildikten sonra gerekli kütüphane app dizinindeki build.gradle dosyasına aşağıdaki gibi eklenmelidir.

dependencies {
implementation "com.huawei.hms:ml-computer-vision-classification:$hmsImageClassificationVersion"
implementation "com.huawei.hms:ml-computer-vision-image-classification-model:$hmsImageClassificationVersion"
}

AndroidManifest.xml dosyasına aşağıdaki satırları ekleyin. Bu kod bloğu sayesinde, bir kullanıcı, uygulamanızı HUAWEI AppGallery’den yükledikten sonra, makine öğrenimi modeli, kullanıcının cihazına otomatik olarak güncellenir.

<manifest
...
<meta-data
android:name="com.huawei.hms.ml.DEPENDENCY"
android:value= "label"/>
...
</manifest>

targetSdkVersion 28 veya üzeriyse, uygulamanızın modeli indirmesine izin vermek için AndroidManifest.xml’e aşağıdaki kod satırını ekleyin.

<manifest>
...
<application
...
android:usesCleartextTraffic="true" >
...
</application>
...
</manifest>

3. İzinlerin Eklenmesi

Aşağıdaki iznleri AndroidManifest.xml dosyasına ekleyin.

<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

4.Application Sınıfı

Uygulama açılırken ML Kit’i başlatmak için bir Application sınıfı gereklidir. Bu sınıfta ML Kit’in proje ile birlikte başlaması sağlanır. Burada, ML Kiti başlatılırken parametre olarak App Id verilmelidir. BaseApplication sınıfı oluşturulduktan sonra Manifest dosyasında tanımlanmalıdır.

5. Transactor Sınıfı

Algılama sonuçlarını işlemek için ImageClassificationTransactor sınıfını oluşturun. Bu sınıf, MLAnalyzer.MLTransactor<T> API’sini uygular ve algılama sonuçlarını elde etmek, belirli hizmetleri uygulamak için bu API’de transactResult metodunu kullanır.

Bu sınıfta öncelikle setOverlay() metodu çağrılarak kamera görünümü ayarlanmalıdır. setOverlay() metodunun parametreleri, View sınıfından gelmelidir. Bir sonraki adımda, bu parametrelerin nasıl ayarlandığını bulabilirsiniz.

Ardından, analyzeImageAndGetResult() metodunu oluşturun. Bu metodun içinde image classification sonucu düzenlenmelidir. MLAnalyzer.Result<MLImageClassification?> nesnesi, olasılık değeriyle birlikte görüntüde algıladığı tüm sonuçların bir listesini döndürür. Burada en olası sonucu ayrıştırıp ekrana yazmamız gerekiyor.

Son olarak, transactResult() metodunu çağırın ve sonuçları alın. Bu metod ile sonucu ekrana yazdırmak için bir canvas nesnesi oluşturun. Bir resultString nesnesi oluşturun ve analizImageAndGetResult() metoduyla en olası sonucu alın. Ardından, canvas.drawText() nesnesi sonucu ekrana yazdırmak için gereken özellikleri ayarlayın. Böylece sonucu ekrana yazdırmış olacaksınız.

Transactor sınıfı aşağıdaki gibi olmalıdır.

6. SurfaceViews

Şimdi sonuçların kamerada ve kamera ekranında gösterilmesi için SurfaceView değerlerini ayarlamamız gerekiyor.

İlk olarak, surfaceViewCamera nesnesi oluşturun ve layout parametrelerini “MATCH_PARENT” olarak ayarlayın.

İkinci olarak, surfaceViewOverlay oluşturun ve layout parametrelerini “MATCH_PARENT” ve formatı “TRANSPARENT” olarak ayarlayın.

Ardından, yazı tipi ailenizi ayarlamak için bir TypeFace nesnesi oluşturun.

İşiniz bittiğinde, ImageClassificationTransactor sınıfından setOverlay() metodunu çağırın.

Son olarak, surfaceViews’leri root layout’a ekleyin ve call back metotlarını çağırın.

7. Lens Engine Ayarları

Bu adımda LensEngine’i sabit bir değerle ayarlamak yerine cihazın en boy oranını kullanmak daha sağlıklı bir sonuç verecektir. Bunun için öncelikle ekranın dikey mi yoksa yatay mı olduğunu kontrol etmemiz gerekiyor. Bu kontrolden sonra lens ayarlarını aşağıdaki gibi yapabilirsiniz.

8. Analyzer Ayarları

Şimdi ML Kit Image Classification değerlerini ayarlamamız gerekiyor. Buradaki en önemli nokta, sahne tipini TYPE_ALL olarak ayarlamanızdır. Son olarak, bu ayarları analayzer nesnesinde set edin ve transactor sınıfını çağırın.

9. CallBack

Son olarak, CallBack metotlarını override edin ve görüntü sınıflandırmasını başlatın.

Sonuç

Tips & Tricks

  • APP ID değerini Application sınıfında set etmeyi unutmayın. Eğer bu değer set edilmezse, ML Kit çalışmayı başlatamayacaktırç
  • Analize başlamadan önce gerekli olan tüm izinleri aldığınızdan emin olun.
  • Eğer LensEngine ayarları doğru yapılmazsa, görüntüde kaymalar meydana gelebilir.
  • Her zaman en yüksek değere sahip olan sonucu kullanın.

--

--