Huawei Machine Learning Kit Kullanımı — 3

Murat Çakır
Huawei Developers - Türkiye
4 min readAug 14, 2020

Herkese serinin 3.yazısından selamlar,

Serinin ilk yazısında Huawei Machine Learning Kit’in “Landmark Recognition”, “Text Translate” ve “Language Detection” özelliklerini kullanarak Kotlin dili ile 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 kullanarak bir uygulama geliştirmiştik. Bu uygulamada kullandığımız özellikleri bulut üzerinden ve cihaz üzerinden çalıştırarak sonuçları karşılaştırmıştık. Bu yazıyı okumak isterseniz aşağıdan ulaşabilirsiniz.

Serinin 3.yazısında ise 2.yazıdan farklı olarak daha önceden çekilmiş statik resimler üzerinden değil anlık olarak kamerayı kullanarak Huawei Machine Learning Kit özelliklerinden Face Detection özelliğini kullandığımız bir proje geliştireceğiz.

İlk olarak kullancağımız aktivitenin tasarımını yaparak başlayalım. Ekranda kullanacağımız viewlardan custom olarak yazacağımız CameraSourcePreview ve CustomGraphicOverlayView sınıflarından birer view oluşturalım. Sonrasında ise bir de ToggleButton ile ön ve arka kamera kullanımını ayarlayabileceğimiz bir buton oluşturalım. CameraSourcePreview sınıfını kamera ile elde ettiğimiz görüntüyü önizlemek için kullanacağız. CustomGraphicOverlayView sınıfı ise yüz algılama özelliğinin sonuçlarını kamera özelliğinin üst katmanında göstermek için kullanacağız.

Tasarımımızı yaptıktan sonra aktiviteye başlamadan önce custom yazacağımız classlar ile başlayalım. Öncelikle LensEngine’i anlatarak başlamak istiyorum. LensEngine anlık olarak kamera özelliğini kullandığımız, kameradan elde ettiğimiz görüntünün üzerine frame ekleyebildiğimiz ve lojik işlemleri kontrol edebildiğimiz Huawei Machine Learning Kit kütüphanesinin bize sağladığı bir sınıf. Aktivitede oluşturduğumuz* -yazının devamında göreceğimiz- mLensEngine değişkenini CameraSourcePreview sınıfındaki start fonksiyonuna parametre olarak gönderdiğimiz “run” fonksiyonu ile başlamaktadır. Bu fonksiyon ile ​​LensEngine sınıfından oluşturduğumuz değişkenimiz, kullanıcının kare hızı ve önizleme görüntü boyutu gereksinimlerine göre uygun bir kamera seçer. Seçilen kameraya göre kare verilerini analiz edip işlemek için bir analizör dizisi başlatır. Kısacası LensEngine ile kameradan aldığımız görüntüleri önizleyerek ve algılayarak sonuçlarını bir view ile kullanabiliriz. CameraSourcePreview sınıfında onLayout methodunda kameradan aldığımız önizlemeyi ekranın yatay-dikey durumunu da kontrol ederek uygun boyutlar ile kullanıcıya gösteriyoruz. Yine bu sınıfta bir surfaceCallback ile önizlemede kullandığımız Surface yapısının hazır olup olmadığını kontrol ediyoruz ve hazır ise startIfReady() fonksiyonunu çalıştırıyoruz. Bu metod ile önizlemede kullandığımız view özelliklerini bir üst view katmanı olan overlay yapısına gönderiyoruz.

Kamera önizleme için yazdığımız custom sınıftan sonra bu seferde bir üst view katmanı olan yüz algılama sonuçlarını ekranda göstereceğimiz CustomGraphicOverlayView sınıfını yazalım. Huawei Machine Learning Kit ile yaptığımız Yüz algılama işleminin sonuçlarını bu viewda kullanıcının yüz hatlarını canvas yapısını kullanarak çizeceğiz. Bu işlemi yaparken scale ve transition gibi Android’in temel view hareket ettirme yapılarından da yararlanacağız.

Bu işlemle birlikte custom olarak yazdığımız view sınıflarını tamamlamış olduk. Şimdi aktiviteye başlayalım. Aktivitede öncelikle kamera izni kontrolü yapıyoruz ve izin alınmamışsa kullanıcıdan izin istiyoruz. Sonrasında MLFaceAnalyzerSetting sınıfını kullanarak yüz algılama işlemi ayarlarını temel seviyede yapıyoruz ve daha önce oluşturduğumuz MLFaceAnalyzer türündeki analyzer değişkenine bu ayarları atıyoruz. Burdaki en önemli nokta ise FaceAnalyzerTransactor sınıfını mOverlay view’ımızı parametre olarak göndererek çalıştırıyoruz. Yüz algılama işlemi sonucunda da DrawFaceGraphic sınıfımız çağrılıyor. DrawFaceGraphic sınıfı ise aslında sadece elde ettiğimiz sonucu ekranda kullanıcının görmesi için mOverlay view’ımıza çiziyor. Böylece kullanıcı yüz algılama işlemi sonucunu bu kronolojik işlem dizisinden sonra görmüş oluyor. Burda dikkat edilmesi gereken bir diğer nokta ise aslında bu işlemler anlık olarak yapıldığı için sadece aktivite açıldığında çalışan bir işlem dizisi değil. O yüzden FaceAnalyzerTransactor sınıfına mOverlay view’ımıza yolladıktan sonra bu sonucu analyzer değişkenimize atıyoruz. Daha önce de bahsettiğimiz* LensEngine sınıfından oluşturduğumuz mLensEngine değişkenimizi aktivitede createLensEngine fonksiyonunda oluşturuyoruz. Sonrasında ise her şeyi birbirine bağlayan en önemli işlemi yapmış oluyoruz startLensEngine() fonksiyonu mLensEngine ve mOverlay değişkenini parametre olarak alarak CameraSourceView sınıfında start() fonksiyonuna gönderiyor. Böylece FaceDetectionStreamActivity & CameraSourcePreview & CustomGraphicOverlayView yapılarını birbirine bağlamış oluyoruz. mOverlay view’ımıza çizim işlemini DrawFaceGraphic sınıfında yaptık. Huawei Machine Learning Kit’in Yüz algılama işlemini de FaceAnalyzerTransactor sınıfında yaptık.

Şimdi projeyi derleyerek testlerimizi yapalım.

İlk olarak gözlük ve şapka takarak net bir açıyla yapılmış yüz analiziyle başladım. Glass Probability analizinin (gözlük kullanma olasılığı) %100 olduğunu aldığım ekran görüntülerinden de görebilirsiniz. Moustache Probability’nin (bıyıklı olma olasılığı) de keza %100'e yakın bir doğruluk analizi yapılarak ekranda kullanıcıya gösterdik. 3. olarak ise Hat Probability (şapka takma olasılığı) yine açıya bağlı olarak büyük bir oranla doğru tahmin ediliyor. Duygu olarak ise 2. resim dışında herhangi bir duygu belirtisi gösteren mimik kullanmadım. İlk ve son resimde duygu olarak Neutral (nötr) analizini doğru şekilde yapıyor. Ortadaki resimde ise güldüğümü analiz ederek duygumu Smiling olarak analiz etti ve gülümesediğimi doğru şekilde algılamış oldu.

Gözlüklü & şapkalı — Gözlüklü & şapkalı & gülümseyerek— Gözlüklü & şapkalı & yan açı

Son olarak ise video olarak yaptığım testlerden bir kısmını görebilirsiniz. Tabi ki duygularınızı mimikler ile belirtebilirseniz daha bir çok mimik analizi yapıldığını görebilirsiniz. Bu video kaydıyla beraber bu yazının da sonuna gelmiş olduk.

Machine Learning Kit hakkında yazdığım tüm yazılardaki projelerin kaynak koduna buradan ulaşabilirsiniz.

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

Bir sonraki yazıda görüşmek dileğiyle.

Kaynaklar;

  • LensEngine dökümanı
  • Örnek yüz algılama kaynak kodları
  • Huawei Machine Learning Kit

--

--