2012-04-01 15 views
8

Używam więc androidów wbudowanych w facedector do wykrywania i określania położenia twarzy w bitmapie. Teraz działa i powie mi: zaufanie, wzrokOdległość i punkt środkowy, ale zawsze, gdy próbuję uzyskać pozę, zawsze zwraca 0, bez względu na to, jakie obrazy próbuję użyć.Wartości pozycyjne Android Facedetector zawsze wynoszą 0

Jest to kod używam dostać pozę:

poseString = "Pose: (" + getFace.pose(FaceDetector.Face.EULER_X) + "," 
         + getFace.pose(FaceDetector.Face.EULER_Y) + "," 
         + getFace.pose(FaceDetector.Face.EULER_Z) + ")"; 

I Oto kod używam:

arrayFaces = new FaceDetector(picWidth, picHeight, NUM_FACES); 
     arrayFaces.findFaces(sourceImage, getAllFaces); 

     for (int i = 0; i < getAllFaces.length; i++) { 
      getFace = getAllFaces[i]; 
      try { 
       PointF eyesMP = new PointF(); 
       getFace.getMidPoint(eyesMP); 
       poseString = "Pose: ("+ getFace.pose(FaceDetector.Face.EULER_X) + "," 
         + getFace.pose(FaceDetector.Face.EULER_Y) + "," 
         + getFace.pose(FaceDetector.Face.EULER_Z) + ")"; 
       EULER_X = getFace.EULER_X; 
       EULER_Y = getFace.EULER_Y; 
       EULER_Z = getFace.EULER_Z;  

       eyesDistance[i] = getFace.eyesDistance(); 
       eyesMidPts[i] = eyesMP; 

       if (DEBUG) { 
        currentx = eyesMidPts[i].x; 
        currenty = eyesMidPts[i].y; 
        betweeneyes = getFace.eyesDistance(); 

        Log.d("currentx", currentx + ""); 
        Log.d("currenty", currenty + ""); 
        Log.d("betweeneyes", betweeneyes + ""); 
        Log.d("EULER", "EULER_X: " + EULER_X + "EULER_Y: " + EULER_Y + "EULER_Z: " + EULER_Z); 

        Log.i("Face", i + " " + getFace.confidence() + " " 
          + getFace.eyesDistance() + " " + "Pose: (" 
          + getFace.pose(FaceDetector.Face.EULER_X) + "," 
          + getFace.pose(FaceDetector.Face.EULER_Y) + "," 
          + getFace.pose(FaceDetector.Face.EULER_Z) + ")" 
          + "Eyes Midpoint: (" + eyesMidPts[i].x + "," 
          + eyesMidPts[i].y + ")"); 
       } 
      } catch (Exception e) { 
       if (DEBUG) 
        Log.e("Face", i + " is null"); 
      } 




     } 
+0

Czy możemy zobaczyć kod, w którym faktycznie używasz 'FaceDetector'? O ile mogę powiedzieć od dokumentów, powinieneś przekazać w swojej tablicy 'Face []', a następnie czytać bezpośrednio z tych obiektów. – sastraxi

+0

Naprawdę przepraszam, dodam go teraz – Peter

+0

sprawdź ten kod, ponieważ działa on dla mnie i dla innych osób http://stackoverflow.com/questions/9269891/android-face-detection/9272063#9272063 – Sameer

Odpowiedz

3

Pobieżna wyszukiwarka google pokazuje około 10 różnych postów - niektóre nawet on StackOverflow - osób mających ten sam problem. Znalazłeś je? Wygląda na to, że może to być błąd. Proponuję zgłosić to do android bug tracker.

Edycja: Powinieneś zdecydowanie zgłoś błąd. Spójrz na kod źródłowy wykrywania twarzy: this source file pokazuje, że Android nigdy nie ustawi ich na wartość inną niż 0.

Do tego czasu dostępne są inne opcje CV dla Androida. Sprawdź OpenCV for Android, która jest teraz oficjalnie wspierana przez zespół.

+0

Dzięki temu przyjrzę się temu, wcześniej zaglądałem do OpenCV na Androida, ale nigdy nie mogłem go skonfigurować i działał, czy znasz jakieś dobre zasoby? – Peter

+0

Czy używasz Eclipse? Jeśli tak, to czy wypróbowałeś przewodnik krok po kroku, który witryna, do której cię przyłączyłem, zapewnia? – sastraxi

+0

Tak, jestem, ale widzę, że ich strona internetowa się zmieniła i wygląda na zaktualizowaną od czasu, kiedy próbowałem ją uruchomić. Nadal chciałbym uzyskać "pozę" pracującą z androidem facedetect, ponieważ mam już cały inny kod. Ale na pewno zajrzę do OpenCV na przyszłość. – Peter

Powiązane problemy