HMS ML Kit ile Yüz Tanıma Uygulaması Geliştirme

Oğuzhan Demirci
Huawei Developers - Türkiye
4 min readNov 20, 2020

Herkese merhaba!

Günümüz mobil çağında avucumuzun içinden alışverişimizi yapıyor, banka işlemlerimizi takip ediyor, sevdiklerimizle görüşüyor, fotoğraf ve videolarımızı saklıyor ve daha birçok işimizi hallediyoruz. Ayrıca telefonlarımızın sahip olduğu kameraları kullanarak gayet kaliteli fotoğraf ve videolar çekebiliyoruz. Ancak, yine de, telefonlarımıza entegre edilen bu kameraları sadece fotoğraf ve video çekmek için kullanmak etkin bir kullanım olmazdı. Bu cihazlarla çok çok daha fazlasını yapabiliriz.

Yüz tanıma servisleri pek çok farklı sektörde kendisine uygulama alanı buluyor. Ancak, ekseriyetle güvenlik ve eğlence uygulamalarında kullanılıyor. Örneğin, bir taksi uygulamasında taksiyi çağıran müşterinin tespitinde kullanılabilir. Yine bir akıllı ev uygulamasında evimize gelen ziyaretçileri yüzünden tanıyıp kapıyı çalanın kim olduğunu evdekilere söyleyebilir. Bir eğlence uygulamasında yüz üzerine kaş, bıyık veya eğlenceli figürler çizmek için kullanılabilir. Araba uygulamasında sürücünün gözlerinin açık mı kapalı mı olduğunu algılayıp, uyursa sürücüyü uyandırmak için kullanılabilir.

Yüz tanımanın kullanım senaryosu çok çeşitli ve icra ettiği görevler çoğu senaryo için gayet kıymetli. Ancak tahmin ettiğinizin aksine, bir yüz tanıma uygulaması hazırlamak HMS ML Kit ile çok kolay. Ayrıca, bu hizmet Huawei tarafından cihaz tarafında sunulan bir hizmet olduğu için ücretsiz ve hızlı. ML Kit yüz tanıma servisi tüm ARM mimarili Android cihazlarla çalışıyor.

ML Kit yüz tanıma servisi, yüz şekli, özellikleri, duygusal ifadesi; kişinin yaşı, cinsiyeti ve şapka takıp takmadığı bilgilerini bize sağlıyor. Yüz üzerinde 855 nokta ile tanımlama yaparak bizlere yüzün resimdeki konumunu, kaş, göz, burun, ağız, kulakların önemli noktalarını, yüzün arzani ve tulani meyili ile azimut ile yaptığı açıyı bizlere sağlıyor. Ayrıca sağ gözün açık olması, sol gözün açık olması, gözlük takılmış olması, bıyık bulunması ve yaş ile ilgili olasılıkları da temin edebiliyoruz. Bütün bunlara ilaveten yüzün duygusal ifadesini de temin edebiliyoruz. Şu an tespit edilebilen ifadeler gülme, sakin duruş, sinirlenme, iğrenme, korkma, üzülme ve şaşkınlık yaşamadır.

ML Kit yüz tanıma servisinin özellikleri kısaca bu şekilde. developer.huawei.com üzerinden daha detaylı bilgi edinebilirsiniz. Biz çok beklemeden Android Studio’yu açıp projemizi oluşturmaya başlayalım. Demo uygulama üzerinde HMS ML Kit’i nasıl kullanacağımızı görmüş olalım.

  1. Öncelikle Empty Activity’yi seçerek yeni projemizi oluşturalım ve bu sayfada tarif edilen adımları takip ederek AppGallery Connect üzerinde de projemizi oluşturma işlemlerini tamamlayalım. Eğer, hala bir Huawei geliştirici hesabınız yoksa buradan oluşturabilirsiniz.
  2. Projemizi oluşturduktan sonra AppGallery Connect üzerinden Develop > Manage APIs bölümünden ML Kit servisinin aktive edilmiş olduğundan emin olmalıyız.

3. Şu ana kadar Android Studio üzerinde uygulamamızı oluşturup, AppGallery Connect üzerinden de gerekli işlemleri tamamlamış olduk. Şimdi developer.huawei.com üzerinden projemize ekleyeceğimiz SDK’yı nasıl entegre edeceğimize bakacağız ve dokümentasyonu kontrol edeceğiz. Açılan sayfada Developer > HMS Core > AI > ML Kit bölümüne ilerleyin. Bu bölümde ML Kit’in sunduğu servisler hakkında detaylı bilgi edinebilirsiniz. Daha sonra Android > Getting Started > Integrating HMS Core SDK > Adding Build Dependencies > Integrating the Face Detection SDK kısmında anlatılan şekilde SDK’mızın entegrasyonunu yapacağız. Gerekli paketleri ekledikten sonra modül seviyesi build.gradle dosyamız aşağıdaki şekilde olacak:

Proje seviyesi build.gradle dosyası:

ML Kit yüz tanıma işlemini hazır yüz tanıma modeliyle gerçekleştiriyor. Bu modelin otomatik olarak kendisini güncelleyebilmesi için AndroidManifest.xml içerisine aşağıdaki meta-data taglarını eklemeyi unutmayalım.

4. ML Kit yüz tanıma işlemini iki kaynak üzerinde yapabilir: statik resim veya video akışı. Bu projede gelen kamera görüntüsü üzerinden yüz tanıma yapacağız. Bunun için öncelikle MLFaceAnalyzer’ımızı oluşturacağız. Gelen görüntünün analizini MLFaceAnalyzer yapacak. Kolaylık olması açısından default değerlerde değişiklik yapmadan aşağıdaki şekilde oluşuyoruz.

5. Basit bir layout oluşturalım. Layout’umuzun içerisinde iki adet SurfaceView bulunacak. Bunlar üst üste duracak. Alttaki SurfaceView’da saf kamera görüntüsünü göstereceğiz. Üsttekinde de her gelen frame’de yüz ile ilgili çizimler yapacağız. Örnek layout:

6. Şimdi de view’larımızı nasıl kullanacağımızı belirleyelim. İki adet SurfaceHolder’a ihtiyacımız var. surfaceHolderCamera ve surfaceHolderOverlay adında iki surfaceHolder oluşturacağız. Daha sonra surfaceHolderCamera’mıza bir callback ekleyerek oluşturulma, değişme ve silinme olaylarında tetiklenmiş olacağız.

7. Şimdi de LensEngine’imizi oluşturalım. LensEngine kamera ile ilgili işlemlerimizi kolayca yapmamızı sağlar. Aşağıda LensEngine’imizi oluşturacağız. Ancak aşağıdak örnekte de gördüğünüz gibi width ve height değerlerini dikey/yatay ekranlara göre ayarlamamız gerekiyor. LensEngine’imizi surfaceChanged içerisinde oluşturacağız ve surfaceDestroyed içerisinde de serbest bırakacağız.

8. MLFaceAnalyzer tarafından yapılan analizlerin sonuçlarını toplayacağımız bir yere ihtiyacımız var. Burada gelen sonuçlar üzerinde ihtiyaç duyduğumuz işlemleri de yapmak istiyoruz. Bunun için FaceAnalyzerTransactor adında bir sınıf oluşturalım. Bu sınıf MLAnalyzer.MLTransactor<MLFace> interface’ini implement etmeli. Bu sınıfın içerisinde çizimi yapacağımız surfaceHolder’ımız bulunacak. Buradan canvas’ı alıp üzerinde çizimler yapacağız. Tespit edilen yüz ile ilgili verileri de transacResult metodu içinde temin edeceğiz. FaceAnalyzer transactor örneği:

9. Şimdi MainActivity’mizin içinde FaceAnalyzerTransactor nesnesi oluşturup bunu aşağıda olduğu gibi kullanacağız.

Ayrıca, transactor’ımızın üzerinde çizim yapması için gerekli olan SurfaceHolder’ı da set etmeyi unutmayalım. Bu işlemi surfaceChanged içerisinde yapabiliriz.

10. Neredeyse bitti gibi! Kullanıcılardan runtime izinlerini almayı unutmayalım. CAMERA ve WRITE_EXTERNAL_STORAGE izinlerini isteyeceğiz. Öncelikle gerekli izinleri AndroidManifest dosyasına ekliyoruz, daha sonra runtime’da kullanıcıya soruyoruz. Aşağıdaki örneği kullanabilirsiniz.

11. Projemiz tamamlandı! Tüm adımları bitirdik. Şimdi uygulamamızı biraz test edelim.

12. FaceApp’imizi tamamlamış olduk. Uygulamamızda gördüğünüz gibi yüz şekillerini ve yüz ifadelerini algılayabiliyoruz. ML Kit kullanarak buna benzer birçok farklı senaryo ile uygulama geliştirebilirsiniz. Sorularınızı yorum bölümüne yazabilirsiniz. Ayrıca projenin kaynak koduna buradan erişebilirsiniz.

Görüşmek üzere!

--

--