Huawei Machine Learning Kit Kullanımı — 2

Murat Çakır
Huawei Developers - Türkiye
7 min readJul 7, 2020

Herkese serinin 2. yazısından selamlar,

Serinin ilk yazısında Huawei Machine Learning Kit’in “Landmark Recognition”, “Text Translate” ve “Language Detection” özelliklerini kullanarak basit bir demo uygulama geliştirmiştik. Serinin ilk yazısını okumak isterseniz hemen aşağıdaki yazıya tıklayarak okuyabilirsiniz.

Serinin 2.yazısında ise yine Kotlin ile “Text Recognition”, “Image Classification”, “Face Detection” ve “Text to Speech” özelliklerini en basit şekilde kullanarak basit bir demo uygulama daha geliştireceğiz. Bu özellikleri kullanırken uygulamanın görsel tasarımını, mimarisini ve akışını çok ön planda olmayacak şekilde geliştireceğiz. Bunun yerine uygulamada 4 farklı özellik kullanacağız. Bu özellikleri öncesinde detaylı şekilde tanımlayıp her birinin kullanım özelliklerinden bahsedeceğiz. Sonrasında bulut üzerinden ve cihaz üzerinden çalışacak şekilde farklı fonksiyonlar ile teknik özellikleri ön planda olacak şekilde geliştirmeler yapacağız. Özellikleri test ederken eğik veya net olmayan farklı resimler kullanarak Huawei ML Kit’inin cihaz üzerinden ve bulut üzerinden çalışırken vereceği sonuçları göreceğiz. Serinin bir sonraki yazısında da bazı Machine Learning Kit özelliklerini anlık olarak kamera açık iken kullanacağız. Şimdiden herkese iyi okumalar.

İlk olarak kullanacağımız özellikleri tanımlayarak başlamak istiyorum.
Text Recognition: Text Recognition, dijital ortamdaki resim, makbuz, kağıt, kartvizit veya belge gibi nesnelerin üzerindeki yazıları analiz ederek metin olarak kullanmamızı sağlayan bir servistir. Bu özellik hem bulut üzerinden hem cihaz üzerinden çalışabilir.
Peki nedir bunların en önemli farkları?
En önemli fark bulut üzerinden çalışan sistemin görseli analiz edip metin haline getirme başarı oranı daha yüksek ve çok daha fazla dil desteği mevcut. Ancak cihaz üzerinden çalışan servis ise internet bağlantısına ihtiyaç duymuyor.
Huawei’nin bize sağladığı bu servis hangi dilleri destekliyor?
Desteklenen diller: Çince, İngilizce, İspanyolca, Portekizce, İtalyanca, Almanca, Fransızca, Rusça, Japonca, Korece, Lehçe, Fince, Norveççe, İsveççe, Danca, Türkçe, Tayca, Arapça, Hintçe ve Endonezyaca.
Buraya önemli bir not bırakmak istiyorum. “Huawei bu servisleri her geçen gün daha da geliştiriyor.” Mutlaka güncel dökümanları bu linkten kontrol etmenizi tavsiye ederim.

Image Classification: Image Classification, en kısa tabir ile görüntüleri kategorilere ayıran bir servis. Hem cihaz üzerinde hem de bulut ile çalışabiliyor. Eğer bulut üzerinden çalıştırırsak tanımlanabilen kategori sayımız yaklaşık olarak 30 kat artıyor. En güncel dökümanlara bu linkten ulaşabilirsiniz.

Face Detection:
* Yüz ifadelerini algılayarak kişinin sinirli mi mutlu mu üzgün mü şaşırmış mı olduğunu ve daha bir çok farklı ifadeyi analiz edebilir.
* Yüz özelliklerini algılarak sol gözün açılması, sağ gözün açılması, gözlük takma olasılığı, şapka takma olasılığı, sakallı olma olasılığı ve yaş tahmini gibi bir çok özelliği analiz edebilir.
* Yüz şeklimizi algılayarak, kaşlar, gözler, burun, ağız ve kulaklar dahil olmak üzere bir çok yüz koordinatlarını doğru bir şekilde analiz edebilir.
Face Detection özelliği cihaz üzerinden çalıştığı için her hangi bir internet bağlantısı bağımlılığı bulunmuyor.
En güncel dökümanlara bu linkten ulaşabilirsiniz.

Text to Speech: Text to Speech, bir metni sese dönüştüren servistir. Huawei bu servisi daha doğal sesler üretmek için zengin tonlar, ses ve hız seçenekleriyle zenginleştirdi ve biz geliştiricilere sundu. Bu özellik şu anda Çince, İngilizce, İspanyolca ve Fransızca dillerini destekliyor. Bulut üzerinden çalıştığı için internet bağlantısı gerektiriyor ve okunacak metin için en fazla 500 karakter olma sınırı var. Diğer Huawei ML Kit özelliklerinden en önemli farkı ise sadece Huawei cihazlarda çalışabilmesi.
En güncel dökümanlara bu linkten ulaşabilirsiniz.

Hadi şimdi kodlamaya başlayalım.

1- Gerekli izinleri Manifest dosyasından vererek başlayabiliriz. Uygulamada kamera, dosya okuma ve internet izinlerine ihtiyacımız olacak.

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

2- Kullancağımız Huawei ML Kit kütüphanelerini de ekleyelim.

implementation 'com.huawei.hms:ml-computer-vision-ocr:2.0.0.300'
implementation "com.huawei.hms:ml-computer-voice-tts:2.0.0.401"

3- Uygulama tasarımımızı yapalım. Tasarımsal olarak tek bir ekran kullanacağız ve tasarım üzerinde çok durmadan kotlin ile kullanacağımız özellikler için cihaz üzerinden veya bulut üzerinden olmak üzere farklı fonksiyonlar yazacağız ve bunların sonuçlarını birbiriyle karşılaştıracağız. Bu yüzden tasarımı hem bulut üzerinden yapılan analiz sonucunu hem de cihaz üzerinden yapılan analiz sonucunu kullanıcıya gösterecek şekilde yapacağız.

4- Uygulama başladığında kullanıcı galeriden resim seçebilir veya kamera ile resim çekebilir. Bunun için 2 tane ImageView kullandım ve bunlara listener ekleyerek tıklanma durumunu dinledim. Kullanıcı bu görsellere tıklayınca önce yapılacak işlem için izin gerekiyor mu onu kontrol edeceğiz. Sonrasında izin gerekiyorsa kullanıcıdan izin isteyeceğiz eğer gerekmiyorsa işleme başlayacağız. İşlem sonucunda görseli bitmap olarak aldıktan sonra da tüm fonksiyonları çağıracağız. Şimdi adım adım başlayalım.

5- İlk çağırdığımız fonksiyon performTextRecognitionOnCloud fonksiyonu. Kullandığımız görseli bitmap türünde bu fonksiyona parametre olarak yolladık. İlk olarak kullanmak istediğimiz dillere Çince ve İngilizceyi ekledik. Sonrasında ise “TextRecognition” işlemi için kullanacağımız servisin ayarlarını düzenledik. Burada dikkat edilmesi gereken nokta ise kullancağımız dil kodlarının ISO 639–1 standartlarına göre yazılması gerekiyor. Ayarları oluşturduktan sonra MLAnalyzerFactory nesnemiz üzerinden getRemoteTextAnalyzer fonksiyonunu kullanıyoruz. Sonrasında bitmap verimizi kullanarak asenkron olarak bulut üzerinden yapılan metin tanıma işlemini başlatıyoruz. Sonuç olarak bize dönen String değerini onSuccess fonksiyonu altında ekranda TextView’a ayarlıyoruz.

6- Bu sefer ise performTextRecognitionOnDevice() fonksiyonunu çağırıyoruz. Bu işlemde bulut üzerinden yaptığımız işlemden farklı olarak MLAnalyzerFactory nesnesinin getLocalTextAnalyzer fonksiyonunu kullanıyoruz. İşlem sonucunda elde ettiğimiz String değerini yine TextView’ımıza ayarlıyoruz.

7- “Text Recognition” servislerini kullandıktan sonra ise bir resmi kategorilerine ayıran servisimiz olan “Image Classification” servisini kullanacağız. Bulut üzerinden kullanacağımız servisin kullanımı “Text Recognition” ile oldukça benzer. Kullanımdaki fark getRemoteImageClassificationAnalyzer fonksiyonunu kullanmamız. Burada önemli bir nokta ise Huawei ML Kit’inin tanımladığı kategorilere bir tahmin olasılığı veriyor. Biz burada kullanacağımız nesnenin ayarlarını yaparken %80 ve üzerinde yapılan tahminleri görmek istediğimizi servise bildireceğiz. Bize dönen sonucu ise her bir kategoriyi yüzde(%) formatında kullanıcıya göstereceğiz.

8- “Image Classification” servisimiz için bulut üzerinden istek attıktan sonra ise cihaz üzerinden aynı isteği atarak ekranda kullanıcıya göstereceğiz. Bu yöntem ile yazının sonunda bulut ve cihaz üzerinden örnek yaptığımızda aradaki farkları daha iyi anlamamızı sağlayacağız.

9- “Face Detection” özelliği sadece cihaz üzerinden çalışan bir servistir. Bu yüzden internet gereksinimi yok dolayısıyla bulut üzerinden çalışan bir fonksiyonu da bulunmamaktadır. “Face Detection” özelliği için burada önemli nokta ise kullanmak istemediğimiz özellikleri devre dışı bırakabiliyoruz veya etkinleştirebiliyoruz. Diğer işlemler ise önceki servis isteklerine çok benzer. Elde ettiğimiz sonuçtan bazılarını ekranda göstereceğiz.

10- Son servisimiz ise aralarında en yeni diyebileceğimiz “Text to Speech” servisi. Şu an 4 farklı dil destekleyen bu serviste ayrıca bazı özelleştirmeler yapabiliyoruz. Örneğin konuşma hızını veya ses yüksekliğini ayarlayabiliyoruz. Dikkat etmemiz gereken bir nokta ise en fazla 500 karakter desteği var. O yüzden okunacak metin eğer 500 karakterden fazla ise sadece ilk 500 karakter okuncak şekilde bir kontrol koydum.

Uygulama geliştirme aşamalarını tamamladık. Servislerden, özelliklerden ve dikkat etmemiz gereken noktalardan bahsettik artık yaptığımız demo uygulamamızdan farklı durumlarda nasıl sonuçlar aldığımızı test ettiğimiz ekran görüntülerine bir bakalım.

  • İlk olarak Text Recognition servisini net bir ekran görüntüsüyle cihazdan ve buluttan test edelim.
Text Recognition on device
Anlaşılır bir ekran görüntüsüyle cihazdan ve buluttan yapılmış metin tanıma işlemi.

Gördüğünüz gibi net bir görüntü ile hem buluttan hem de cihazdan metin tanıma işlemi tamamen doğru bir sonuç verdi.

  • Şimdi ise biraz daha bulanık ve açılı çekilmiş bir resim üzerinden test edelim.
Bulanık ve açılı çekilmiş bir resim ile cihazdan ve buluttan yapılmış metin tanıma işlemi.

Bu işlemde çektiğimiz resim ile biraz daha metin tanıma işlemini zorlaştırdık. Sonuca baktığımızda ise cihaz üzerinden yapılan tanıma işleminde bulut üzerinden yapılan tanıma işlemine göre çok daha fazla hatalar olduğunu görebilirsiniz. Bulut üzerinden çalışan servisin metin tanıma işleminde başarı oranı daha yüksek.

  • Sıradaki servisimiz “Image Classification”. Bir sporcu görseliyle cihaz ve bulut üzerinden elde ettiğimiz sonuçlara bakalım.
Bulut ve cihaz üzerinden yapılmış resim sınıflandırma servisimiz

Farketceğiniz üzere servisi buluttan çağırdığımızda çok daha fazla kategori sonucu aldığımızı görebilirsiniz. Bunun en büyük sebebi yazının en başında belirttiğim gibi resim sınıflandırma işlemi bulut üzerinden yapıldığında yaklaşık 30 kat daha fazla kategori tanıyabiliyor.

  • Şimdi “Face Detection” servisimizi sinirli ve gülen olmak üzere 2 farklı resim ile test edelim.

Görsellerde aynı sporcunun 2 farklı resmini kullandım. İki resimde de yüz analiz işleminden elde ettiğimiz sonuç sizin de göreceğiniz üzere çok başarılı.

  • Son olarak ise basit bir yazıyı “Text to Speech” özelliği ile dinleyelim. Siz de yazıyı ses kaydıyla senkronize şekilde dinleyebilirsiniz.

Serinin 2.yazısında 4 farklı Machine Learning Kit özelliği ile beraber geliştirmeler yaptık. Bu servislerin özelliklerinden bahsettik. Farklı durumlar için servislerin bulut ve cihaz üzerinden elde ettiğimiz sonuçlarını analiz ettik. Serinin 3.yazısında ise bazı Machine Learning Kit özelliklerini anlık olarak kamera açık iken kullanacağız. Proje kaynak kodlarına buradan ulaşabilirsiniz.

Umarım sizler için faydalı bir yazı olmuştur.

Görüşmek dileğiyle.

--

--