Tarayıcınızda yüz tanıma yazılımını nasıl kullanacağınızı öğretin

Lei Feng Net Not: Bu makale, Lei Feng'in altyazı grubu tarafından derlenen teknik bir blogdur, orijinal başlık face-api.js'dir - Tarayıcıda Yüz Tanıma için JavaScript API'si tensorflow.js ile, yazar Vincent Mühler'dir.

Tercüme | Wang Fei Zhao Pengfei Bitti | MY

Tarayıcıda bir yüz tanıma programı çalıştırmanın nihayet mümkün olduğunu heyecanla söyleyebilirim! Bu yazıda, face-api.js olarak adlandırılan TensorFlow.js'nin çekirdeğini temel alan bir JavaScript modülünü tanıtacağım. Modül, yüz algılama, yüz tanıma ve yüz özelliği nokta algılamanın amacını gerçekleştirmek için üç tür evrişimli sinir ağı uygular.

Her zaman olduğu gibi, herkesin bu paketi doğrudan kullanmaya başlayabilmesi için birkaç satır kod içeren daha basit bir kod örneğine göz atalım. başlayalım!

İlk yüz-tanıma.js, şimdi başka paketler var mı?

Nodejs'de yüz tanıma ile ilgili diğer makalemi okuduysanız: Node.js + yüz-tanıma.js: Derin Öğrenme kullanarak Basit ve Sağlam Yüz Tanıma, bir süre önce fark etmişsinizdir, ben Benzer bir paket oluşturuldu. Örneğin, yüz tanıma işlevini nodej'lere tanıtan üç yüz tanıma.js.

İlk başta, javascript topluluğundaki yüz tanıma yazılım paketlerine olan talebin bu kadar yüksek olmasını beklemiyordum. Birçok kişi için face -cognition.js çok iyi bir özgür yazılım paketi gibi görünüyor ve ayrıca Microsoft ve Amazon gibi ücretli yazılım paketleri de var. Ancak insanlar bana tüm yüz tanıma sürecini bir tarayıcıda çalıştırıp çalıştıramayacağımı soruyorlar

Son cevap evet. Tensorflow.js sayesinde ve tfjs-core'dan iyi bir şekilde yararlanarak, bazı benzer araçları başarıyla uyguladım. Bu gadget'lar, yüz tanıma.js'yi kullanmakla neredeyse benzer sonuçlar elde etmenizi sağlayabilir ve Tarayıcıda. Ve en iyi yanı, herhangi bir bağımlılık kurmanıza gerek olmamasıdır, doğrudan çalışabilir. Ek bir avantajı, işlemleri WebGL'de çalıştırmak için GPU hızlandırmayı da desteklemesidir.

Bu beni JavaScript topluluğunun böyle bir tarayıcı paketine ihtiyacı olduğuna inandırıyor! Bir sonraki adım, kendi hayal gücünüzü kullanmaktır, bunu çeşitli uygulamalar oluşturmak için kullanabilirsiniz. :)

Yüz tanıma problemini çözmek için derin öğrenme nasıl kullanılır?

Bir an önce başlamak isteyen türden biriyseniz (veya kız), bu bölümü atlayabilir ve doğrudan kod kısmına geçebilirsiniz. Ancak face-api.js'de yüz tanımayı gerçekleştirmek için kullanılan yöntemi daha iyi anlamak için, adımları izlemenizi şiddetle tavsiye ederim, çünkü bana sıklıkla sorunun bu kısmı soruluyor.

Basitlik uğruna, aslında başarmak istediğimiz şey, bir kişinin yüz görüntüsünü tanımak ve sonra onu tanımaktır Verilen görüntü, girdi görüntüsüdür. Bu soruna çözümümüz, tanımlamak istediğimiz her kişi için bir (veya daha fazla) resim sağlamak ve bunları kişinin adı, yani referans verileriyle etiketlemektir. Şimdi giriş görüntüsünü referans verilerle karşılaştırıyoruz ve en benzer referans görüntüyü buluyoruz. İki görüntü yeterince benzerse, o zaman kişinin adını çıkarırız, aksi takdirde "bilinmeyen" sonucunu çıkarırız.

İyi bir plana benziyor! Ama burada hala iki sorun var. Her şeyden önce, ya birden fazla insanı gösteren bir resmimiz varsa ve tüm bu resimleri tanımak istiyorsak? İkinci olarak, karşılaştırma için iki yüz görüntüsünün benzerliğinin bir ölçüsünü de elde etmemiz gerekiyor.

Yüz tanıma

İlk sorunun cevabı yüz tanıma. Basitçe söylemek gerekirse, ilk olarak giriş görüntüsündeki tüm yüzleri buluruz. Yüz algılama için, face-api.js, temelde ağın üstüne eklenmiş bazı ek tahmin katmanları ile MobileNetV1 tabanlı bir CNN olan SSD'yi (Single Shot Multibox Detector) uygular.

Bu ağ, her yüzü çevreleyen sınırlayıcı kutuyu ve karşılık gelen puanı, yani her sınırlayıcı kutunun bir yüz içerme olasılığını döndürür. Buradaki puan, sınırlayıcı kutuyu filtrelemek için kullanılır, çünkü görüntü hiç insan yüzleri içermeyebilir. Unutulmaması gereken bir diğer nokta ise, görüntüde sadece bir kişi olsa bile, sınırlayıcı kutuyu elde etmek için önce yüz algılama adımının gerçekleştirilmesi gerektiğidir.

Yüz özelliği nokta algılama ve yüz hizalama

İlk sorun çözüldü Ancak, sınırlayıcı kutuları hizalamamız ve yüz tanıma ağına geçirmeden önce her kutu için yüz merkezli bir görüntü çıkarmamız gerektiğine dikkat çekmek istiyorum, çünkü bu yüz tanımayı daha doğru hale getirebilir!

Bu hedefi hedefliyoruz. face-api.js, belirli bir yüz görüntüsünün 68 yüz özelliği noktasını döndürebilen basit bir CNN uyguladı.

Özellik noktasının konumuna göre sınırlayıcı kutu yüzün merkezinde belirlenebilir. Aşağıda, yüz algılamanın (solda) ve yüz hizalamanın (sağda) sonucudur.

Yüz tanıma

Şimdi, ResNet-34'e benzer bir mimariye dayanan ve temelde dlib'de uygulanan mimariye karşılık gelen yüz tanıma ağına çıkarılmış ve hizalanmış yüz görüntülerini sağlayabiliriz. Ağ, bir yüzün özelliklerini bir yüz tanımlayıcısına (128 değerli bir özellik vektörü) eşlemeyi öğrenmek için eğitilmiştir. Bu işleme genellikle yüz gömme de denir.

Şimdi, iki yüzü karşılaştırma konusundaki orijinal problemimize geri dönelim: Çıkarılan her yüz görüntüsünün yüz tanımlayıcılarını kullanacağız ve bunları referans verilerinin yüz tanımlayıcılarıyla karşılaştıracağız. Daha kesin olarak, iki yüz tanımlayıcı arasındaki Öklid mesafesini hesaplayabilir ve eşik temelinde iki yüzün benzer olup olmadığına karar verebiliriz (150 × 150 boyutunda bir yüz görüntüsü için 0,6 daha iyi bir eşiktir). Öklid mesafesini kullanmanın etkisi çok iyidir, ancak elbette istediğiniz herhangi bir sınıflandırıcıyı da kullanabilirsiniz. Aşağıdaki gif, iki resmi Öklid mesafesine göre karşılaştırma sürecini görselleştirir.

Şimdi, yüz tanıma teorisini sindirelim ve sonra bir örnek yazmak için kodu kullanalım.

Kodlama zamanı!

Bu kısa örnekte, aşağıdaki giriş görüntüsünde birden fazla yüzün nasıl tanınacağını adım adım öğreneceğiz:

Komut dosyası ekle

İlk olarak, dist / face-api.js'den en son derlemeyi alın veya dist / face-api.min.js'den revize edilmiş sürümü alın ve komut dosyasını dahil edin:

Npm kullanıyorsanız:

Model verilerini yükle

Uygulamanızın ihtiyaçlarına göre, ihtiyacınız olan modeli özel olarak yükleyebilirsiniz, ancak eksiksiz bir uçtan uca örnek çalıştırmak için yüz algılama, yüz özelliği noktaları ve yüz tanıma modellerini yüklememiz gerekir. Model dosyaları depodan temin edilebilir veya buraya tıklayın.

Modelin ağırlığı, müşterilerinizin yalnızca gereken minimum verileri yüklemesine olanak sağlamak için orijinal modele kıyasla model dosyasının boyutunu% 75 azaltarak ölçülmüştür. Ek olarak, model ağırlıkları 4 MB'a kadar bloklara bölünerek tarayıcının bu dosyaları yalnızca bir kez yüklenmeleri için arabelleğe almasına izin verir.

Model dosyaları, tarayıcının statik kaynakları olarak ele alınabilir veya bunları başka bir yerde barındırabilir ve bu dosyaları belirli yollar veya URL'ler aracılığıyla yükleyebilirsiniz. Bunları model dizinindeki diğer kaynaklarınızla bir araya getirdiğinizi varsayalım (genel / modeller):

Veya sadece belirli bir modeli yüklemek istiyorsanız:

Giriş görüntüsünden tüm yüzlerin tam bir açıklamasını alın

Sinir ağı, HTML görüntüleri, tuvaller, videolar veya tensörler biçimindeki girdileri kabul eder. Puanı kullan > minScore, yüzün sınırlayıcı kutusunu algılar, basitçe şunu söyleriz:

Tam yüz tanımı, algılama sonuçlarını (sınırlayıcı kutu + puan), yüz özelliklerini ve hesaplanan tanımlayıcıları içerir. Gördüğünüz gibi, faceapi.allFaces önceki tartışmada arka planda tüm işi yapıyor. Bununla birlikte, yüz konumlarını ve özellik noktalarını manuel olarak da elde edebilirsiniz. Bunu hedefliyorsanız github deposunda pek çok örnek bulabilirsiniz.

Sınırlayıcı kutunun ve özellik noktalarının konumunun orijinal görüntünün / ortamın boyutuna bağlı olduğunu unutmayın. Görüntülenen resim boyutu orijinal resim boyutuyla eşleşmiyorsa, boyutu kolayca ayarlayabilirsiniz:

Tuvale sınırlayıcı kutuyu çizerek tespit sonuçlarını görselleştirebiliriz:

Yüz özelliği noktaları aşağıdaki gibi görüntülenebilir:

Genellikle yaptığım şey, img öğesinin üzerine kesinlikle yerleştirilmiş bir tuvali kaplamaktır, bunların genişliği ve yüksekliği aynıdır (daha fazla bilgi için github'daki örneğe bakın)

yüz tanıma

Artık giriş görüntüsündeki tüm yüzlerin konumunu ve açıklamasını nasıl alacağımızı bildiğimize göre, bazı görüntülerden her yüzü göstereceğiz ve yüz tanımlayıcısını hesaplayacağız. Bu tanımlayıcılar referans verilerimiz olacaktır.

Kullanılabilir bazı örnek görsellerimiz olduğunu varsayarsak, önce görüntüyü bir url'den alırız ve veri arabelleğinden bir HTML görüntü öğesi oluşturmak için faceapi.bufferToImage kullanırız:

Daha sonra, daha önce girdi görüntüsünde yaptığımız gibi, her görüntü için konuyu bulup yüz tanımlayıcısını hesaplıyoruz:

Şimdi, tek yapmamız gereken, girdi resmimizin yüz tanımlarında dolaşmak ve referans verilerinden en küçük mesafeye sahip tanımlayıcıyı bulmak:

Daha önce de belirtildiği gibi, benzerliği ölçmek için Öklid mesafesini kullanıyoruz ve etkili olduğu ortaya çıkıyor. Giriş görüntüsünde tespit edilen her yüz için en iyi eşleşmeyi elde ederiz.

Son olarak, sonucu görüntülemek için sınırlayıcı kutuları ve etiketlerini tuval üzerine çizebiliriz:

Tamam! Şimdiye kadar, bu API'nin nasıl kullanılacağını anlamışsınızdır umarım. Ayrıca depodaki diğer örneklere de göz atmanızı tavsiye ederim. Şimdi bu paketin tadını çıkarın!

Bu makaleyi beğendiyseniz, lütfen beğenin ve beni medyadan veya twitterdan takip edin. Ayrıca github deposu hakkında yorum yapmaya da hoş geldiniz. Lütfen daha fazla öğretici için bizi izlemeye devam edin!

Orijinal bağlantı: https://itnext.io/face-api-js-javascript-api-for-face-recognition-in-the-browser-with-tensorflow-js-bcc2a6c4cf07

Lei Feng Ağı Lei Feng Ağı

"Fantastik Hayvanlar 3" ün Çin'de çekilmesi mi bekleniyor? J.K. Rowlingin Twitter başlığı bir şeyi ima ediyor gibi görünüyor
önceki
Küçük ekranlı cep telefonu kullanıcılarının favorisi! Samsung Galaxy Stellar 2 pozlama: 699 yuan
Sonraki
Üç İnternet devi Magic2 platformunu onurlandırıyor, YOYO gelecekte yapay zekanın yeni dalgası olacak!
McLaren 650S halefi veya adı 720S, kilo kaybı 18kg
"Büyük" tanıtım afişleri iki kez yayınlanır ve Adalet Kadrosu Yeni Yıl Dövüşü'nü başlatmak için hazırdır
OnePlus Overseas, dünyanın en hızlı ekran parmak izi modelini piyasaya sürdü, kablosuz şarjın önümüzdeki yıl beklemesi gerekebilir!
5G ağı Guangzhou'da başladı, bu üç konuyu anlamalısınız
LOL: Netizenler RNG'yi yeniden organize etmek için çağırdı Miller, yalnızca Nosuke'nin eyalette olduğunu söyledi! Kime gitmek istiyorsun
Rolex tarafından resmi olarak tanınmadığı için Zenith, Bamford Saat Departmanı'nı resmi olarak yetkilendirmiştir.
2018'de kim cep telefonu satın alıyor? CCTV ağır verileri ortaya çıkarır
Samsung dört yeni teknolojiyi onayladı ve cep telefonu devi sonunda yenilik yapmaya başladı!
"Love 2" nin yeni fragmanı "tutuşturuyor", Wu Xiubo, Bai Bai ve He Xiaoyang kesinlikle bir şov yapıyor
Sonunda "ye": Meizu beta Android N, uyumlu 9 modelden oluşan ilk grup
LOL: İlk EDG playoff'larında, Haro ormana başlayacak! Seyirci baharatlı bir adamın ortaya çıkmasını dört gözle bekliyor
To Top