小编Nin*_*erd的帖子

Android camera2.params.face在画布上的矩形放置

我正在尝试在相机预览中实现人脸检测。我按照Android参考页在中TextureView放置了,以实现自定义相机预览FrameLayout。此外,在此FrameLayout是一个SurfaceView带有明显的背景(重叠相机预览)。每当相机预览更新(每帧一次)时,我的应用程序都会将Rect第一个CaptureResult.STATISTICS_FACES面的边界所识别的绘制动态地绘制到SurfaceView画布上。我的应用假设只需要识别一张脸。

我画矩形时出现问题。如果将脸部保持在相机视图的中心,则可以将矩形放置在正确的位置,但是当我向上移动头部时,该矩形将向右移动,而当我将头部向右移动时,该矩形将向下移动。好像画布需要旋转-90一样,但这对我不起作用(下面的代码解释)。

在我的活动中onCreate()

//face recognition
rectangleView = (SurfaceView) findViewById(R.id.rectangleView);
rectangleView.setZOrderOnTop(true);
rectangleView.getHolder().setFormat(
    PixelFormat.TRANSPARENT); //remove black background from view
purplePaint = new Paint();
purplePaint.setColor(Color.rgb(175,0,255));
purplePaint.setStyle(Paint.Style.STROKE);
Run Code Online (Sandbox Code Playgroud)

in TextureView.SurfaceTextureListener.onSurfaceTextureAvailable()(在try{}封装的块中camera.open()

Rect cameraBounds = cameraCharacteristics.get(
    CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
cameraWidth = cameraBounds.right;
cameraHeight = cameraBounds.bottom;
Run Code Online (Sandbox Code Playgroud)

在同一听众中onSurfaceTextureUpdated()

if (detectedFace != null && rectangleFace.height() > 0) {
        Canvas currentCanvas = rectangleView.getHolder().lockCanvas();
        if (currentCanvas != null) {
            currentCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); …
Run Code Online (Sandbox Code Playgroud)

java camera android canvas face-detection

5
推荐指数
1
解决办法
2657
查看次数

标签 统计

android ×1

camera ×1

canvas ×1

face-detection ×1

java ×1