2012-02-13 5 views
5

내가 안드로이드에 얼굴 인식을하려고하고, 나는 http://www.richardnichols.net/2011/01/java-facial-recognition-haar-cascade-with-jjil-guide/안드로이드 얼굴 인식

하지만 안드로이드에 대신 가이드를 따라하고 있습니다. 내가

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

을 수행 할 때 정확한 코드가 넷빈즈 코드를 사용하여 두 얼굴을 반환하지만 pushAndReturn은 안드로이드의 이미지에서 하나 개의 얼굴을 반환하는 것으로 보인다. 그 차이는 이미지의 유형에만 있습니다 (안드로이드의 RgbImage와 netbeans의 RgbImageJ2se)

안드로이드에서 내가 무엇을 놓치고 왜 둘 이상의 얼굴을 찾을 수 없는지 모르겠습니다.

나는 RgbImage : jjil.core.RgbImage 유형 대 RgbImageJ2SE 유형을 의미하므로 JJIL을 사용하고 있습니다. 나머지는 똑같습니다 !! pushAndReturn은 스택에서 하나의 항목 만 리턴하는 것 같습니다. 두 개 이상의 얼굴이있는 이미지에서는 작동하지 않습니다.

+0

아니라 2, 안드로이드에 어떻게 자바 코드에서 모든 얼굴을 검출 PC에서 Java로 실행 한 것과 다릅니다. Android에서 Java와 PC의 Java에서 다른 결과를 가진 전체 코드의 예를들 수 있으며 더 자세한 정보를 제공 할 수 있습니까? –

+0

안드로이드 얼굴 탐지의 전체 예제를 보려면 – Adroidist

+0

을 확인하십시오. 내 대답은 여기를 참조하십시오. http://stackoverflow.com/questions/4125821/face-detection-in-android – Jorgesys

답변

13

이 그 작업을위한 이동 및 주어진 그림

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); 
      } 
    } 
    } 
} 
그것은 당신이 하나의 얼굴이 반환되는 것을 결정하는 방법, 무엇 RgbImage 분명하지 않다
+0

안녕하세요, 작은 크기의 이미지에서만 작동합니다. 삼성 전자 갤럭시의 카메라를 사용할 때 얼굴을 감지 할 수 없기 때문에 코드와 관련이 있습니까? – Adroidist

+0

모든 시나리오에서 작동 할 것입니다.이 시나리오를 충족하지 못했기 때문에 게임을 해보십시오. 그리고 솔루션에 만족한다면 대답으로 표시하십시오. – Sameer

+0

FaceDetection API의 경우 눈의 중간과 거리 만 감지하는 것처럼 보이지만 개별 눈에 도달 할 수 있습니까? 아니면 얼굴이 기울어 진 것을 알 수 있습니까? –