Ön uç makine öğrenimi: İnsan yüzlerini tanıyın ve yanaklara çilek çizin

Yazar | Ön uç geliştirme danışmanı

Sorumlu Editör | Yu Yan

Üretildi | CSDN (ID: CSDNnews)

Son sonuç

Çevrimiçi deneyim:

Sabırsız doğrudan yemek yemek istiyorsa, şunu tıklayın: kaynak adresi https://github.com/usecodelee/mldrawberry

prensip

Kullanıcılar tarafından yüklenen yüzlere çilek çizmek için birkaç sorunla karşılaşacaksınız:

  • Nerede boyanır?
  • Resim ne kadar büyük?
  • Çileğin açısı, yüzün açısı ile aynı mıdır?
  • Bu problemlere dayanarak, bunları çözmek için makine öğrenimini kullanmalıyız!

    1. Ön uç makine öğrenimi

    Ön uç makine öğrenimi söz konusu olduğunda, akla gelen ilk şey Google'ın TensorFlow'udur:

    TensorFlow, uçtan uca açık kaynaklı bir makine öğrenimi platformudur. Çeşitli araçları, kitaplıkları ve topluluk kaynaklarını içeren, araştırmacıların makine öğrenimi alanında gelişmiş teknolojilerin geliştirilmesini teşvik etmesine ve geliştiricilerin makine öğrenimi tarafından desteklenen uygulamaları kolayca oluşturmasına ve dağıtmasına olanak tanıyan kapsamlı ve esnek bir ekosisteme sahiptir.

    İlgilenenler bir göz atmak için TensorFlow resmi web sitesine gidebilirler, çok eğlenceli şeyler var.

    Tabii ki, biz sadece yüz tanımayı kullanıyoruz. Birisi, yüz-api.js kitaplığını özellikle TensorFlow'a dayalı yüz tanıma için kapsülledi.

    2. Temel ilkeler

    Ben sadece genel olarak bundan bahsediyorum, sadece belirli içeriği görmeye gidebilecek ilgilenen biriyim.

    1. Adım: Tüm yüzleri bulun

    Çözüm HOG (Yönlendirilmiş Gradyanların Histogramı) oryantasyon gradyan histogramı, nesne konturlarını algılayabilen bir algoritma.

    Adım 2: Yüzün farklı pozları

    2014 yılında Vahid Kazemi ve Josephine Sullivan tarafından icat edilen bir yüz simgesi tahmin algoritması kullanın.

    Bu algoritmanın temel fikri, 68 yüz üzerinde ortak noktaları (yer işaretleri olarak adlandırılır) bulmaktır:

    onların arasında:

    Çene çevresi 17 nokta

    Sol kaşta 5 puan

    Sağ kaşta 5 puan

    Burun köprüsünde 4 nokta

    Burun ucunda 5 nokta

    Sol göz için 6 puan

    Sağ göz için 6 puan

    Dış dudaklarda 12 nokta

    İç dudakta 8 nokta

    Bu 68 nokta ile kaşların, gözlerin, burnun ve ağzın pozisyon bilgilerini rahatlıkla bilebiliriz.Bu pozisyon bilgilerinden hareketle başlangıçta bahsedilen sorulara bazı basit hesaplamalar sonrasında cevaplar alabiliyoruz. :

  • Nerede boyanır?
  • Resim ne kadar büyük?
  • Çileğin açısı, yüzün açısı ile aynı mıdır?
  • Vue-cli'ye dayalı bir tane yapın

    Face-api.js ile başlayabiliriz. Kabaca 4 adıma bölünmüştür:

  • Bir proje oluşturmak için vue-cli iskele kullanın
  • Yüz görüntülerini algılamak ve algılama sonuçları elde etmek için face-api.js kullanın
  • Hesaplama (çilek boyutu, konumu, dönüş açısı vb.)
  • Çilek çiz
  • 1. Projeyi inşa etmek için vue-cli iskele kullanın

    Hızlıca bir proje oluşturmak için vue-cli kullanın

    2. Yüz görüntülerini algılamak ve algılama sonuçları elde etmek için face-api.js kullanın

    (1) face-api.js yükleyin

    npm i face-api.js

    (2) Model verilerini yükleyin

    Face-api.js kullanmak, yavaş çalışmamızı gerektirmez, modelleri doğrudan kullanabiliriz.

    Uygulamanın gereksinimlerine göre ihtiyacınız olan belirli modeli yükleyebilirsiniz. Ancak eksiksiz bir uçtan uca örnek çalıştırmak istiyorsak, yüz algılama, yüz özelliği nokta algılama ve yüz tanıma modellerini de yüklememiz gerekir. İlgili model dosyaları kod havuzunda bulunabilir. Bunları public / models klasörünün altına koyup içe aktarıyoruz:

    const MODEL_URL = "/ models"; faceapi.loadSsdMobilenetv1Model (MODEL_URL); await faceapi.loadFaceLandmarkModel (MODEL_URL); await faceapi.loadFaceRecognitionModel (MODEL_URL);

    Face-api.js'yi bileşenimize aktarın:

    "face-api.js" den faceapi olarak içe aktar *;

    (3) Yüz görüntülerini algılamak ve algılama sonuçları elde etmek için face-api.js kullanın

    let input = this. $ refs.inputImg; // Algılanacak resim let canvas = this. $ refs.overlay; // Algılama sonucunun tuvalinin çizilmesini bekleyin const minConfidence = 0.8; fullFaceDescriptions = await faceapi .detectAllFaces (input) .withFaceLandmarks .withFaceDescriptors; // Resmi tespit edin faceapi.matchDimensions (canvas, input); // Tuvali resim const kadar büyük yapın displaySize = {width: input.width, height: input.height}; const resizedDetections = faceapi.resizeResults ( fullFaceDescriptions, displaySize); // Algılama sonuçlarını ve girdi görüntü piksellerini ayarlayın

    3. Hesaplama (çilek konumu, boyutu, eğim yayı vb.)

    (1) Yüz öğelerinin özellik noktası dizisini alın

    // Yanak soldan sağa 17 noktadır const jawOutline = resizedDetections.landmarks.getJawOutline; // Burun yukarıdan aşağıya doğru 9 nokta çizilir const burun = resizedDetections.landmarks.getNose; // Ağız 20 noktaya bölünür const mouth = resizedDetections.landmarks.getMouth; // Soldan sağa sol göz için 6 puan const leftEye = resizedDetections.landmarks.getLeftEye; // Sağ göz için soldan sağa 6 nokta const rightEye = resizedDetections.landmarks.getRightEye; // Sol kaş Soldan sağa 5 nokta const leftEyeBbrow = resizedDetections.landmarks.getLeftEyeBrow; // Sağ kaş Soldan sağa 5 nokta const rightEyeBrow = resizedDetections.landmarks.getRightEyeBrow; faceapi.draw.drawDetections (canvas, resizedDetections); / / Resim çerçevesi faceapi.draw.drawFaceLandmarks (canvas, resizedDetections); // noktaları çiz

    Çizimin sonucu aşağıdaki gibidir:

    (2) Çilek yerini alın

    Çileklerin yerini öğrenmek için önce aşağıdaki resme bakın:

    Önce sol ve sağ sarı ve yeşil çizgilerin uzunluklarını karşılaştırın, hangi tarafın uzun olduğunu çizin (fotoğrafın yüzü yanlamasına olabilir), belirli konum soldan sağa farklıdır, sağdaki yeşil çizgi doğrudan çizginin orta noktasından çizilir. , Ve soldaki sarı çizgi, çizginin orta noktasıdır ve çizime başlamak için çilek genişliğinin yarısını sola kaydırın.

    Muhtemelen gösterildiği gibi:

    Bu yüzden önce 32 ve 16. nokta arasındaki mesafeyi ve ardından orta noktayı alın:

    // İki nokta arasındaki mesafeyi alın const getDistance = (a, b) = > {return Math.sqrt (Math.pow (a.x-b.x, 2) + Math.pow (a.y-b.y, 2))) // İki nokta arasındaki orta noktayı alın const getMidPoint = (pa, pb) = > ({x: (pa.x + pb.x) / 2, y: (pa.y + pb.y) / 2})

    (3) Çilek boyutunu alın

    Çileğin boyutu tahmin edilebilir, tüm yüzün genişliğinin yaklaşık 1 / 6'sıdır:

    const size = {width: faceWidth / 6, height: faceWidth / 6}

    (4) Çilek eğimli radyan elde edin

    Yüzün eğriliğini kaşların orta noktasına ve çenenin en alt noktasına yani çileğin eğriliğine göre hesaplayabiliriz:

    // Yüz sabitinin açısını alın getFaceRadian = (jawPos, midPointOfEyebrows) = > Math.PI-Math.atan2 (jawPos.x-midPointOfEyebrows.x, jawPos.y-midPointOfEyebrows.y)

    4. çilek çizin

    Önceki içerikle çilek çizmek basittir. Önce orijinal resmi yükleyin ve ardından çileği orijinal resme göre çizin:

    // çilek fonksiyonu drawBerry (ctx, config, berryUrl) {const {angle, faceWidth, facePos} = config getImg (berryUrl, (img) = > {ctx.save // Kanvasın başlangıç noktasını çileğin çizildiği konuma taşıyın ctx.translate (facePos.point.x, facePos.point.y) // Çileğin döndürülme açısı ctx.rotate (açı) ile aynıdır Çilek konumu const {x, y, width, height} = transBerry (faceWidth, 0, 0, facePos.dir) ctx.drawImage (img, x, y, width, height) ctx.restore})} // Resmi alın function getImg (src, cb) {const img = new Image img.setAttribute ('crossOrigin', 'anonymous') img.src = src img.onload = = > cb (img)}

    Yer sınırlamaları nedeniyle makalede anahtar kodun sadece bir kısmından bahsedilmiştir.Kodu tam olarak görmeniz gerekiyorsa buraya tıklayabilirsiniz: https://github.com/usecodelee/mldrawberry

    Orijinal bağlantı:

    https://blog.csdn.net/caomage/article/details/103751111

    "Bir milyon insan yapay zekayı öğreniyor" un önemli bir parçası olarak, 2020 AIProCon Geliştirici Konferansı Olacak 26 Haziran Çevrimiçi canlı yayın aracılığıyla geliştiriciler, mevcut AI'nın en son teknoloji araştırması, temel teknolojisi ve uygulaması ve iş vakalarının pratik deneyimi hakkında tek durakta bilgi edinebilir ve ayrıca harika ve çeşitli geliştirici salonlarına ve programlama projelerine çevrimiçi olarak katılabilir. Bir dizi ileriye dönük aktiviteye ve çevrimiçi canlı yayın etkileşimlerine katılın. Yalnızca on binlerce geliştiriciyle iletişim kurmakla kalmaz, aynı zamanda özel canlı yayın hediyeleri kazanma ve teknik uzmanlarla bağlantı kurma fırsatına da sahip olursunuz.

    Yorum alanında seçilirseniz, 299 yuan değerinde "2020 AI Geliştiriciler Konferansı" için çevrimiçi canlı bir bilet alacaksınız. Parmaklarınızı hareket ettirin ve söylemek istediklerinizi yazın!

    Sıcak makale önerisi

    Temel programlama bilgisi gerçekten mucizevi bir beceri mi?

    Evde çalışıyorum ve talebi daha da azaltıyorum

    Teknoloji şirketleri COVID-19'a nasıl tepki veriyor?

    Luckin Coffee, 2,2 milyar yuan'lık sahte işlemleri açığa çıkardı ve Uygulama İLK 1'i geri aldı

    Kubernetes'te PaaS benzeri basit bir platform kurmak çok kolay!

    Megvii ikili şube ağı BBN'den bahsediyor: Uzun kuyruklu gerçek dünya görevinin üstesinden gelmek | CVPR 2020 Oral

    2020'de herkesin bildiği bu 20 kripto borsası nasıl gidiyor?

    Weihai Huancui Bölgesi: Yetenekler Çin'in "Silikon Yolu" nu yaratmak için bir araya geliyor
    önceki
    Programcıların% 99'u Lombok kullanıyor, prensip bu kadar basit mi?
    Sonraki
    Geçtiğimiz 15 yılda, bulut bilişim devrimini gerçekte ne tetikledi?
    Python ne zaman değiştirilecek?
    "Hey Siri" nin arkasındaki siyah teknoloji ortaya çıktı
    Terminal öykünücüsü büyük PK, kimi seçersiniz?
    Endüstriyel İnterneti iyice anlamanıza yardımcı olacak 11 soru
    Bilgisayar korsanları "öldürmek için bıçak ödünç alırlar", Alibaba'nın 14 yıllık deneyimi size DDoS saldırılarına karşı nasıl savunma yapacağınızı öğretecek
    C dili en ciddi güvenlik açıklarına sahiptir ve PHP en savunmasız olanıdır.Programcılar nasıl kod yazmalıdır?
    Alibaba Cloud uzmanları size BT mimarisini nasıl yeniden şekillendireceğinizi öğretiyor
    Luckin Coffee 2,2 milyarlık sahte işlemi açığa çıkarıyor ve Uygulama İLK 1'i geri alıyor
    Programcıların bilmesi gereken 89 temel işletim sistemi kavramı
    Yazdığım kod değil, ama ...
    İnternetin babasına yeni bir taç teşhisi kondu, bir efsane: Google'ın başkan yardımcısı ve NASA'da misafir bilim insanı olarak görev yaptı
    To Top