2012-04-01 11 views
8

Así que estoy usando androides integrados en facedector para detectar y determinar la posición de las caras en un mapa de bits. En este momento funciona y me dirá: confianza, distancia de ojos y punto medio, pero cada vez que intento obtener la pose siempre devuelve 0 sin importar las imágenes que intento usar.Los valores de postura de Android Facedetector son siempre 0

Este es el código que utilizo para conseguir la pose:

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

Y aquí está el código que utilizo:

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

¿Podemos ver el código donde está usando el 'FaceDetector'? Por lo que puedo decir de los documentos, deberías pasar en tu propia matriz 'Face []' y luego leer directamente de esos objetos. – sastraxi

+0

Lo siento, lo agregaré ahora – Peter

+0

revise este código ya que funciona para mí y para otras personas también http://stackoverflow.com/questions/9269891/android-face-detection/9272063#9272063 – Sameer

Respuesta

3

Una búsqueda en Google somera muestra cerca de 10 mensajes diferentes - algunos incluso on StackOverflow --de personas con el mismo problema. ¿Encontraste esto? Parece que podría ser un error. Sugiero que lo informe al android bug tracker.

Edit: Usted debe definitivamente file a bug. Eche un vistazo al código fuente de detección de rostros: this source file muestra que Android nunca los establecerá en nada excepto 0.

Hasta este cambio, hay otras opciones de CV para Android. Consulte OpenCV for Android, que ahora cuenta con el respaldo oficial del equipo.

+0

Gracias voy a analizar eso, ya había examinado OpenCV para Android, pero nunca pude configurarlo y realmente funcionó, ¿conoce algún buen recurso? – Peter

+0

¿Estás usando Eclipse? Si es así, ¿ha probado la guía paso a paso que proporciona el sitio web al que lo he vinculado? – sastraxi

+0

Sí, lo soy, pero veo que su sitio web ha cambiado y parece que se actualizó desde la última vez que intenté que funcionara. Todavía me gustaría que la 'pose' funcione con detección de caras de Android ya que tengo todo el otro código funcionando. Pero definitivamente voy a mirar OpenCV para el futuro. – Peter

Cuestiones relacionadas