概述
我正在尝试在相机预览中实现面部检测.我按照
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矩形放置在画布上所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复