我是靠谱客的博主 昏睡店员,最近开发中收集的这篇文章主要介绍android camera2 封装,java – Android camera2.params.face矩形放置在画布上,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我正在尝试在相机预览中实现面部检测.我按照

Android参考页面在TextureView中实现自定义相机预览,放置在FrameLayout中.此FrameLayout中还有一个背景清晰的SurfaceView(与相机预览重叠).每次更新相机预览时(每帧一次),我的应用程序会绘制第一个CaptureResult.STATISTICS_FACES面部边界动态识别到SurfaceView画布的Rect.我的应用假设只需要识别一张脸.

我绘制矩形时会出现问题.如果我将脸保持在摄像机视图的中心,我将矩形放在正确的位置,但是当我向上移动头部时,矩形向右移动,当我向右移动头部时,矩形向下移动.好像画布需要旋转-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);

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

Rect cameraBounds = cameraCharacteristics.get(

CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);

cameraWidth = cameraBounds.right;

cameraHeight = cameraBounds.bottom;

在onSurfaceTextureUpdated()内的同一个监听器中:

if (detectedFace != null && rectangleFace.height() > 0) {

Canvas currentCanvas = rectangleView.getHolder().lockCanvas();

if (currentCanvas != null) {

currentCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

int canvasWidth = currentCanvas.getWidth();

int canvasHeight = currentCanvas.getHeight();

int l = rectangleFace.right;

int t = rectangleFace.bottom;

int r = rectangleFace.left;

int b = rectangleFace.top;

int left = (canvasWidth*l)/cameraWidth;

int top = (canvasHeight*t)/cameraHeight;

int right = (canvasWidth*r)/cameraWidth;

int bottom = (canvasHeight*b)/cameraHeight;

currentCanvas.drawRect(left, top, right, bottom, purplePaint);

}

rectangleView.getHolder().unlockCanvasAndPost(currentCanvas);

}

CameraCaptureSession.setRepeatingRequest()looper调用CameraCaptureSession.CameraCallback中的onCaptureCompleted方法:

//May need better face recognition sdk or api

Face[] faces = result.get(CaptureResult.STATISTICS_FACES);

if (faces.length > 0)

{

detectedFace = faces[0];

rectangleFace = detectedFace.getBounds();

}

所有变量都在函数之外实例化.

如果您不太了解我的问题或需要其他信息,请在此处发布类似的问题:

然而,与上面的海报不同,我甚至无法让我的画布在旋转画布后显示矩形,因此这不是解决方案.

我尝试使用x = -y,y = x(左= -top,top = left)将我的点旋转-90度,并且它也没有做到这一点.我觉得某些功能需要应用到这些要点,但我不知道如何去做.

有想法该怎么解决这个吗?

最后

以上就是昏睡店员为你收集整理的android camera2 封装,java – Android camera2.params.face矩形放置在画布上的全部内容,希望文章能够帮你解决android camera2 封装,java – Android camera2.params.face矩形放置在画布上所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部