2013-02-06 40 views
0

我在玩FaceDetectionListener,我的目的是圍繞眼睛畫一個圓圈。我有名爲previewSurfaceView對象和名爲previewHolderSurfaceHolder對象。使用FaceDetectionListener在眼睛上畫畫布

一切工作得很好,我可以使用後視鏡檢測到我的SurfaceView中代表了多少個面孔。我也想圍繞左右眼畫一些圓圈。我drawCanvas方法是這樣的:

 private void drawCanvas(float x, float y) { 
      Canvas canvas = previewHolder.lockCanvas(); 
      Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 

      paint.setColor(Color.BLACK); 
      paint.setDither(true); 
      paint.setColor(0xFFFFFF00); 
      paint.setStyle(Paint.Style.STROKE); 
      paint.setStrokeJoin(Paint.Join.ROUND); 
      paint.setStrokeCap(Paint.Cap.ROUND); 
      paint.setStrokeWidth(3); 

      canvas.drawPoint(x, y, paint); 
      previewHolder.unlockCanvasAndPost(canvas); 
     } 

這種方法是從FaceDetectionListener叫:

 @Override 
     public void onFaceDetection(Face[] faces, Camera camera) { 

     if (faces.length > 0) { 
      tv.setText(String.valueOf(faces.length) + " Face(s) Detected"); 

      for(Face f : faces) { 

       int leftEyeXCoordinate = f.leftEye.x; 
       int leftEyeYCoordinate = f.leftEye.y; 
       drawCanvas(leftEyeXCoordinate, leftEyeYCoordinate); 

       int rightEyeXCoordinate = f.rightEye.x; 
       int rightEyeYCoordinate = f.rightEye.y; 
       drawCanvas(rightEyeXCoordinate, rightEyeYCoordinate); 
      } 
     } 
     else 
      tv.setText("No Faces Detected!"); 
     }}; 

我一直在該行int leftEyeXCoordinate = f.leftEye.x;

我能畫點,rects等得到一個NullPointerException異常相機正在移動時的東西?或者我必須先拍攝照片?

所以我的問題是:以前有沒有人做過這件事,想告訴我我該怎麼做?

謝謝!

回答

1

是的,我也看到過這個問題。返回的Face對象是android.hardware.Camera.Face而不是FaceDetector.Face,只有rect對象在那裏有有效的信息。矩形對象的邊界位於相機座標系中。您將不得不將它們轉換爲視圖座標系。據此在link的解釋。