2013-03-20 20 views
9

Şu anda android yüz tanıma üzerinde çalışıyorum. İnternette makul bir zaman geçirdim ve Android'de FaceDetector.Face sınıfını buldum.Yüz tanıma android sdk değil opencv kullanarak

sorundur
Constants 
float CONFIDENCE_THRESHOLD 
int EULER_X The x-axis Euler angle of a face. 
int EULER_Y The y-axis Euler angle of a face. 
int EULER_Z The z-axis Euler angle of a face. 

Public Methods 
float confidence() 
float eyesDistance() 
void getMidPoint(PointF point) 
float pose(int euler) 

, ben bu yöntemleri kullanmak ve bunun için herhangi bir öğretici veya örnek kaynak kodunu bulamıyorum nasıl bilmiyorum: Ve bunlar bu sınıfın araçtır. Soru şu ki, insanları farklılaştırmak için eyesDistance() kullanmalı mıyım? Örneğin, Sarah'nın gözleriDistance = 6.51 cm ve John's = 6.82'dir. Kod, bir kişinin göz mesafesini hesapladığında ve 6.82 olduğu zaman, "bu john'dur", insanları tanımlamanın yolu bu mu? Ya da bunun için algoritma nedir? Ya da EULER sabitlerini kullanmalı mıyım? Ne şekilde? Yüz tanıma için bu yöntemleri kullanacağımı düşünüyorum, ama nasıl kullanacağımı bilmiyorum.

Veya yüz tanıma için başka bir çözüm önerebilir misiniz? Herhangi bir yardım mutluluk duyacaktır.

+2

Downvoter bir geri bildirim bırakabilir mi lütfen? Böylece soruyu geliştirebilirim. – Ayse

cevap

17

FaceDetector sınıfı, düşündüğünüzü yapmaz. Spesifik olarak , Facial Recognition (Yüz Tanıma) yapmaz, bunun yerine Yüz Algılama (dolayısıyla sınıf adı).

An example of Facial Detection

Bu bir görüntü analiz ve görüntü bulunan Face s döndürür. Face s (John'un Face veya Sarah's Face olup olmadığını söyleyemezsiniz), onların arasındaki mesafeden başka bir ayrım yapmaz - ama bu gerçekten geçerli bir karşılaştırma noktası değildir. Sadece bulduğunuz nesnelerin gerçekte Face s olduğu ve bulduğu güven düzeyini verir.

Örnek:

int maxNumFaces = 2; // Set this to whatever you want 
FaceDetector fd = new FaceDetector(imageWidth,imageHeight,maxNumFaces); 
Faces[] faces = new Faces[maxNumFaces]; 

try { 
    int numFacesFound = fd.findFaces(image, faces); 

    for (int i = 0; i < maxNumFaces; ++i) { 
    Face face = faces[i]; 
    Log.d("Face " + i + " found with " + face.confidence() + " confidence!"); 
    Log.d("Face " + i + " eye distance " + face.eyesDistance()); 
    Log.d("Face " + i + " pose " + face.pose()); 
    Log.d("Face " + i + " midpoint (between eyes) " + face.getMidPoint()); 
    } 
} catch (IllegalArgumentException e) { 
    // From Docs: 
    // if the Bitmap dimensions don't match the dimensions defined at initialization 
    // or the given array is not sized equal to the maxFaces value defined at 
    // initialization 
} 
+0

Cevabınız için teşekkür ederiz. Belki de bir kişiyi tanımlamak için EULER veya eyeDistance kullandığımız bir formül var. Problem için bana önerebileceğiniz bir çözüm var mı? – Ayse

+0

@aysealmac Gözler arasında sadece poz ve mesafeyi kullanarak yüzleri benzersiz olarak tanımlayabileceğinizi düşünmüyorum, fakat yüz tanıma bilimi arasında da bilim uzmanı değilim. – Tushar

+0

Tushar bunun için demo var mı? –

7

Tushar bahsedilen gibi, FaceDetector sadece yüzleri tespit eder. Onları FaceDetector kullanarak tanıyamazsınız. Göz mesafesi çıkışı, cm cinsinden veya inç cinsinden değil, piksel cinsinden ölçülür. Yüzün bitmap görüntüsünün içinde ne kadar büyük olduğunu gösterir. Euler açıları, başın 3B dönüşünü temsil etmelidir. Ancak, uygulamanız 14'ten önce herhangi bir api kullanıyorsa, euler açıları değerleri her zaman 0,0 olacaktır (hesaplanmazlar). Yani, bununla ilgilen.

Yüz tanıma özelliğini kullanmak isterseniz, opencv işlevini kullanabilirsiniz. Ben kendim kullanmadım, ama Android'de mevcut olduğunu düşünüyorum. İstemediğiniz veya projenize OpenCV ekleyemezseniz Face Recognition in OpenCV http://docs.opencv.org/trunk/modules/contrib/doc/facerec/

, kendiniz yüz tanıma programlayabilir. Biraz zaman alır, ama o kadar da zor değil. Bazı özler varyasyonu uygulayabilirsiniz: http://www.youtube.com/watch?v=LYgBqJorF44&list=PLd3hlSJsX_Imk_BPmB_H3AQjFKZS9XgZm&index=16

İyi şanslar! Bu bağlantıyı kullanmanız sizin için yararlı olabilir.

+0

Yanıtınız için teşekkürler – Ayse

İlgili konular