2012-04-01 11 views
8

Vì vậy, tôi đang sử dụng Android được xây dựng trong facedector để phát hiện và xác định vị trí của khuôn mặt trong bitmap. Ngay bây giờ nó hoạt động và sẽ cho tôi biết: sự tự tin, eyesDistance và trung điểm nhưng bất cứ khi nào tôi cố gắng để có được tư thế nó luôn luôn trả về 0 không có vấn đề gì hình ảnh tôi cố gắng sử dụng.Giá trị đặt ra cho Android Facedetector luôn là 0

Đây là mã tôi sử dụng để có được những tư thế:

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

Và đây là đoạn code tôi sử dụng:

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

Chúng tôi có thể xem mã nơi bạn đang thực sự sử dụng 'FaceDetector' không? Theo như tôi có thể nói từ các tài liệu, bạn nên đi qua mảng 'Face []' của riêng bạn và sau đó đọc trực tiếp từ các đối tượng đó. – sastraxi

+0

Chắc chắn xin lỗi tôi sẽ thêm nó ngay bây giờ – Peter

+0

kiểm tra mã này vì nó làm việc cho tôi và những người khác quá http://stackoverflow.com/questions/9269891/android-face-detection/9272063#9272063 – Sameer

Trả lời

3

Một tìm kiếm google lướt qua cho thấy khoảng 10 bài viết khác nhau - một số thậm chí on StackOverflow - của những người có cùng vấn đề. Bạn đã tìm thấy những? Có vẻ như nó có thể là một lỗi. Tôi khuyên bạn nên báo cáo cho số android bug tracker.

Edit: Bạn nên chắc chắn nộp một lỗi. Hãy xem mã nguồn phát hiện khuôn mặt: this source file cho thấy Android sẽ không bao giờ đặt những thứ này thành bất kỳ thứ gì trừ 0.

Cho đến khi điều này thay đổi, có các tùy chọn CV khác cho Android. Kiểm tra OpenCV for Android, hiện đã được nhóm hỗ trợ chính thức.

+0

Cảm ơn tôi sẽ xem xét điều đó, tôi đã xem xét OpenCV cho Android trước đây nhưng tôi không bao giờ có thể thiết lập và thực sự làm việc, bạn có biết bất kỳ tài nguyên nào tốt không? – Peter

+0

Bạn đang sử dụng Eclipse? Nếu bạn có, bạn đã thử hướng dẫn từng bước mà trang web mà tôi đã liên kết với bạn để cung cấp chưa? – sastraxi

+0

Có, nhưng tôi thấy rằng trang web của họ đã thay đổi và có vẻ như trang web của họ đã được cập nhật kể từ lần cuối cùng tôi cố gắng làm cho trang web hoạt động. Tôi vẫn muốn nhận được 'tư thế' làm việc với android faceetect vì tôi có tất cả các mã khác đã làm việc. Nhưng tôi chắc chắn sẽ xem xét OpenCV cho tương lai. – Peter