2012-02-13 14 views
5

Tôi đang cố gắng phát hiện khuôn mặt trên Android và tôi đang làm theo hướng dẫn http://www.richardnichols.net/2011/01/java-facial-recognition-haar-cascade-with-jjil-guide/Phát hiện khuôn mặt Android

nhưng trên Android thay thế. Khi tôi làm

Gray8DetectHaarMultiScale detectHaar = new Gray8DetectHaarMultiScale(is, minScale, maxScale); 
RgbAvgGray toGray = new RgbAvgGray(); 
toGray.push(RgbImage); 
detectHaar.pushAndReturn(toGray.getFront()); 

Có vẻ như pushAndReturn chỉ trả lại một khuôn mặt từ hình ảnh trên Android mặc dù mã chính xác trả về 2 khuôn mặt sử dụng mã netbeans. Sự khác biệt chỉ ở dạng hình ảnh (RgbImage trên android và RgbImageJ2se trên netbeans)

Tôi không biết tôi thiếu gì và tại sao tôi không thể phát hiện nhiều khuôn mặt trên Android?

Tôi đang sử dụng JJIL vì vậy ý ​​tôi là của RgbImage: jjil.core.RgbImage type, so với kiểu RgbImageJ2SE. Phần còn lại là giống nhau !! có vẻ như pushAndReturn chỉ trả về một mục trong ngăn xếp. Điều này không hoạt động trên bất kỳ hình ảnh nào có nhiều khuôn mặt.

+0

Nó không rõ ràng những gì RgbImage là, làm thế nào bạn đang xác định rằng một trong những gương mặt được trả lại và không 2, hoặc làm thế nào mã Java này trên Android khác với những gì bạn chạy trên Java trên PC. Bạn có thể đưa ra một ví dụ về mã đầy đủ có kết quả khác nhau trong Java trên PC từ Java trên Android và cung cấp thêm một số chi tiết không? –

+0

xin vui lòng kiểm tra chỉnh sửa của tôi – Adroidist

+0

cho một ví dụ đầy đủ của Android Face Detection thấy câu trả lời của tôi ở đây: http://stackoverflow.com/questions/4125821/face-detection-in-android – Jorgesys

Trả lời

13

Go cho điều này làm việc của mình và phát hiện tất cả các khuôn mặt từ một bức tranh cho

public class AndroidFaceDetector extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //setContentView(R.layout.main); 
     setContentView(new myView(this)); 
    } 

    private class myView extends View{ 

    private int imageWidth, imageHeight; 
    private int numberOfFace = 5; 
    private FaceDetector myFaceDetect; 
    private FaceDetector.Face[] myFace; 
    float myEyesDistance; 
    int numberOfFaceDetected; 

    Bitmap myBitmap; 


    public myView(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 

    BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options(); 
    BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565; 
    myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.face5, 
     BitmapFactoryOptionsbfo); 
    imageWidth = myBitmap.getWidth(); 
    imageHeight = myBitmap.getHeight(); 
    myFace = new FaceDetector.Face[numberOfFace]; 
    myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace); 
    numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace); 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 

      canvas.drawBitmap(myBitmap, 0, 0, null); 

      Paint myPaint = new Paint(); 
      myPaint.setColor(Color.GREEN); 
      myPaint.setStyle(Paint.Style.STROKE); 
      myPaint.setStrokeWidth(3); 

      for(int i=0; i < numberOfFaceDetected; i++) 
      { 
      Face face = myFace[i]; 
      PointF myMidPoint = new PointF(); 
      face.getMidPoint(myMidPoint); 
    myEyesDistance = face.eyesDistance(); 
      canvas.drawRect(
       (int)(myMidPoint.x - myEyesDistance), 
       (int)(myMidPoint.y - myEyesDistance), 
       (int)(myMidPoint.x + myEyesDistance), 
       (int)(myMidPoint.y + myEyesDistance), 
       myPaint); 
      } 
    } 
    } 
} 
+0

hey Sameer, cảm ơn u nó hoạt động nhưng có vẻ như chỉ làm việc trên những hình ảnh có kích thước nhỏ, bởi vì khi tôi sử dụng máy ảnh của Samsung Galaxy của tôi, nó không thể phát hiện bất kỳ khuôn mặt nào, nó có liên quan đến mã không? – Adroidist

+0

Nó sẽ làm việc cho mọi kích thước image.Try để chơi với nó như tôi đã không đáp ứng kịch bản này.Và nếu bạn hài lòng với giải pháp sau đó xin vui lòng đánh dấu nó như là câu trả lời. – Sameer

+0

Đối với API FaceDetection, có vẻ như chỉ phát hiện ra giữa mắt và khoảng cách giữa chúng, nhưng có thể nhận được vào mắt cá nhân không? Hoặc là có thể biết rằng khuôn mặt được nghiêng? –