2012-02-13 9 views
5

che sto cercando di fare il rilevamento del viso su Android, e sto seguendo http://www.richardnichols.net/2011/01/java-facial-recognition-haar-cascade-with-jjil-guide/viso Android Detection

ma su Android al posto guida. Quando faccio

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

Sembra che pushAndReturn sta solo tornando una faccia dall'immagine su Android, anche se il codice esatto ritorna 2 facce usando il codice NetBeans. La differenza è solo nel tipo dell'immagine (RgbImage su Android e RgbImageJ2se su netbeans)

Non so cosa mi manca e perché non riesco a rilevare più di una faccia su Android?

Sto usando JJIL quindi intendo per RgbImage: jjil.core.RgbImage tipo, contro tipo RgbImageJ2SE. Il resto è lo stesso !! sembra che pushAndReturn stia restituendo solo una voce nello stack. Questo non funziona su nessuna immagine con più di una faccia.

+0

Non è chiaro che cosa RgbImage è, come si determina che una faccia viene restituito e non 2, o come questo codice Java su Android è diverso da quello che hai eseguito su Java su un PC. Puoi dare un esempio di codice completo che ha un risultato diverso in Java su un PC da Java su Android e fornire ulteriori dettagli? –

+0

per favore controlla la mia modifica – Adroidist

+0

per un esempio completo di Face Detection Android vedi la mia risposta qui: http://stackoverflow.com/questions/4125821/face-detection-in-android – Jorgesys

risposta

13

andare per questo il suo funzionamento e rilevare tutte le facce da un dato un'immagine

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, grazie funziona ma sembra funziona solo su immagini di piccole dimensioni, perché quando uso la fotocamera della mia samsung galaxy non è in grado di rilevare alcuna faccia, ha a che fare con il codice? – Adroidist

+0

Funzionerà per ogni immagine di dimensioni. Cerca di giocare con esso poiché non ho incontrato questo scenario. E se sei soddisfatto della soluzione, contrassegnala come risposta. – Sameer

+0

Per l'API FaceDetection, sembra rilevare solo la metà degli occhi e la distanza tra di loro, ma è possibile raggiungere i singoli occhi? O è possibile sapere che la faccia è inclinata? –