HMS ML Kit Image Classification

Önder
Huawei Developers - Türkiye
2 min readNov 13, 2020

Herkese merhaba, bu yazımda sizlere Image Classification nedir ve nasıl kullanılır, bunlardan bahsedeceğim.

Image Classification nedir?

Image Classification, HMS ML kit’in bizlere sunduğu özelliklerden biridir. Bu özelliği kullanarak resimlerdeki nesneleri sınıflandırabiliriz. Nesne sınıflarına yiyecek, çiçek, spor, vb. şeyleri örnek olarak verebiliriz.

Eğer resimleri dosyalayan bir uygulama oluşturmak istiyorsanız, resimleri Image Classification kullanarak sınıflandırıp kayıt edebilirsiniz.

Image Classification sadece resimlerdeki objeleri sınıflandırmak ile kalmaz (static image detection), bunun yanında cihazın kamerasını kullanırken anlık olarak da nesneleri sınıflandırabilir (camera stream detection).

Nesnelerin tanınması cihaz tabanlı olarak da bulut tabanlı olarak da gerçekleştirilebilir.

Cihaz tabanlı tanımlama:

  1. Daha verimli
  2. 400 nesne kategorisinden fazla destekliyor
  3. Hem static image detection hem de camera stream detection destekliyor

Bulut tabanlı tanımlama:

  1. Daha doğru sonuçlar
  2. 12.000 nesne kategorisinden fazla destekliyor
  3. Sadece static image detection destekliyor

Servisi etkinleştirme

Huawei Developer console’a giriş yaptıktan sonra, projemizi oluşturuyoruz. Image Classification’ı kullanabilmemiz için Manage API’s kısmında ML Kit’i aktif hale getirmemiz gerekmektedir.

Daha sonra agconnect-services.json dosyasını indirip projemizin app dizininin altına kopyalıyoruz. Ve build.gradle dosyasında maven repository’lerini ayarlıyoruz.

Image Classification SDK Entegrasyonu

SDK için iki seçenek bulunmaktadır: base sdk ve full sdk. Full sdk kullanılması tavsiye edilmektedir.

AndroidManifest.xml dosyasında izin ataması yapabilirsiniz. Eğer camera stream recognition kullanılacaksa kamera izni alınması gerekmektedir. Eğer cihazınızın depolama kısmından bir resim seçip bununla işlem yapmak istiyorsanız external storage izni almanız gerekmektedir.

Geliştirme Süreci

Yaptığım projede hem static image detection hem de camera stream detection kullandım. Static image detection kullanırken depodan bir resim aldım ve onun üzerinde nesne sınıflandırması yaptım. Camera stream detection’da ise kamerayı kullanırken o anki nesnelerin kategorisini anlık olarak gördüm.

Static Image Detection

Image classifiction analyzer oluşturmak için dört adet yöntemimiz bulunmaktadır.

İlk iki yöntem cihaz tabanlı tanımlama için kullanılmaktadır. Diğer iki yöntem ise bulut tabanlı tanımlama için kullanılmaktadır. İkinci ve dördüncü yöntem, varsayılan ayarlar ile analyzer oluşturmak için, birinci ve üçüncü yöntem ise, istediğimiz ayarlar ile anlayzer oluşturmak için kullanılmaktadır.

Daha sonra MLFrame nesnesi oluşturuyoruz. Bu nesne, resmin bilgisini içerecektir.

Resim bilgisini Bitmap formatında parametre olarak göndermemiz isteniyor. Bu yüzden öncelikle, resimlerimizi Bitmap formatına çevirmemiz gerekmektedir.

Daha sonra nesne sınıflandırması yapmak için asyncAnalyseFrame fonksiyonunu çağırıyoruz.

Eğer tanımlama başarılı olduysa bize MLImageClassification nesnelerinin listesini döndürmektedir. “name” değeri bize, nesnenin hangi sınıfa ait olduğunu belirtmektedir.

Tanımlama tamamlandıktan sonra kaynakları serbest bırakırız.

Camera Stream Detection

Tanımlama sonuçlarını işleyebilmek için ClassificationAnalyzerTransactor adlı bir sınıf oluşturuyoruz.

Daha sonra analyzer oluşturup, ClassificationAnalyzerTransactor sınıfımızı buna set ediyoruz.

Dinamik kamera akışını yakalamak ve bunu analyzer’a göndermek için LensEngine sınıfından bir obje oluşturuyoruz.

Daha sonra run fonksiyonunu çağırarak kamerayı başlatıp, akışı okuyoruz. Kamera çalıştığı sürece tanımlama her zaman devam eder. Eğer uygulamanız belli bir nesne sınıfını bulduktan sonra tanımlamayı durdurması gerekiyor ise yeni yöntemler entegre edilmesi gerekmektedir. Entegrasyon için buradan bilgi sahibi olabilirsiniz.

Tanımlama tamamlandıktan sonra kaynakları serbest bırakırız.

Image Classification’ın bu yöntemlerini kullanarak, resimlerdeki ve kamera akışındaki objelerin kategorilerine ulaşabilir ve bunları uygulamalarımızda kullanabiliriz.

Referanslar

--

--