2012-02-13 4 views
5

Я пытаюсь сделать обнаружение лица на андроид, и я слежу за руководство http://www.richardnichols.net/2011/01/java-facial-recognition-haar-cascade-with-jjil-guide/Android Face Detection

но на андроид вместо этого. Когда я сделать

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

Кажется, что pushAndReturn возвращает только одно лицо от изображения на Android, хотя точный код возвращает 2 лица с помощью кода Netbeans. Разница заключается только в типе изображения (RgbImage on android и RgbImageJ2se на netbeans)

Я не знаю, чего я не вижу, и почему я не могу обнаружить более одного лица на Android?

Я использую JJIL, поэтому я имею в виду RgbImage: jjil.core.RgbImage type, vs. RgbImageJ2SE. Остальное все равно! кажется, что pushAndReturn возвращает только одну запись в стеке. Это не работает ни на одном изображении с более чем одним лицом.

+0

Это не ясно, что RgbImage есть, как вы определить, что одна сторона возвращается и не 2, или как это Java код на Android отличается от того, что вы использовали в Java на ПК. Можете ли вы привести пример полного кода, который имеет другой результат в Java на ПК с Java на Android, и дать более подробную информацию? –

+0

, пожалуйста, проверьте мое редактирование – Adroidist

+0

для полного примера Android Face Detection, см. Мой ответ здесь: http://stackoverflow.com/questions/4125821/face-detection-in-android – Jorgesys

ответ

13

Go для этого его работы и выявления всех лиц от данной картины

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

эй Sameer, спасибо, что это работает, но похоже работайте только на изображениях небольшого размера, потому что, когда я использую камеру моей галактики samsung s, она не может обнаружить какое-либо лицо, это связано с кодом? – Adroidist

+0

Он будет работать для каждого размера image.Try играть с ним, как я не встречаю этот сценарий. И если вы удовлетворены решением, пожалуйста, отметьте его как ответ. – Sameer

+0

Для API FaceDetection, кажется, обнаруживается только середина глаз и расстояние между ними, но возможно ли попасть в отдельные глаза? Или можно узнать, что лицо наклонно? –