簡體   English   中英

使用FaceDetectionListener在畫布上繪制畫布

[英]Draw Canvas over eyes using the FaceDetectionListener

我在玩FaceDetectionListener ,目的是在眼睛周圍畫一個圓。 我有一個名為preview SurfaceView對象和一個名為previewHolderSurfaceHolder對象。

一切正常,我可以使用后置攝像頭檢測在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;處獲得NullPointerException int leftEyeXCoordinate = f.leftEye.x;

相機移動時,我可以畫點,矩形和其他東西嗎? 還是我必須先拍攝圖片?

因此,我的問題是:有人有沒有做到這一點,並想告訴我該怎么做?

謝謝!

是的,我也看到了這個問題。 返回的Face對象是android.hardware.Camera.Face而不是FaceDetector.Face,並且只有rect對象具有有效的信息。 矩形對象的邊界在相機坐標系中。 您將不得不將它們轉換為Views坐標系。 它在rect下的此鏈接中進行了解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM