【问题标题】:Take action when face detected (Android Camera2 API)检测到人脸时采取行动(Android Camera2 API)
【发布时间】:2020-10-05 08:51:24
【问题描述】:

如果没有检测到人脸,我需要隐藏相机拍摄按钮。 我已经尝试了三天。当检测到人脸时,我找不到采取行动的方法。

注意:这段代码工作得很好我只需要添加面部检测器如何以及在哪里?然后使用这个人脸检测器对相机拍摄按钮进行操作

btn_shot.setVisibility(view.GONE)

这里是创建相机预览:

private void creatCameraPreview() throws CameraAccessException {
        SurfaceTexture texture = textureView.getSurfaceTexture();
        texture.setDefaultBufferSize(imageDimensions.getWidth(),
imageDimensions.getHeight());

        Surface surface = new Surface(texture);

        captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
        captureRequestBuilder.addTarget(surface);

        cameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() {
            @Override
            public void onConfigured(@NonNull CameraCaptureSession session) {
                if (cameraDevice == null)
                    return;

                cameraCaptureSession = session;
                try {
                    updatePreview();
                } catch (CameraAccessException e) {
                    e.printStackTrace();
                }

            }

            @Override
            public void onConfigureFailed(@NonNull CameraCaptureSession session) {
                Toast.makeText(CameraTaken.this, "Configuration Changed", Toast.LENGTH_SHORT).show();

            }
        }, null);
    }

这里正在打开相机:

private void openCamera() throws CameraAccessException {
        CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);

        assert manager != null;
        cameraId = manager.getCameraIdList()[0]; //[0] for the back facing camera [1] for the front facing camera

        CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);

        StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);


        assert map != null;
        imageDimensions = map.getOutputSizes(SurfaceTexture.class)[0];

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(CameraTaken.this, new String[]{
                    Manifest.permission.CAMERA,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.INTERNET}, 101);
            return;
        }
        manager.openCamera(cameraId, stateCallBack, null);




    }

【问题讨论】:

  • 不清楚您的问题出在哪里。您是否尝试过修改官方示例应用程序而不是从头开始构建它? github.com/android/camera-samples/tree/master/Camera2Basic
  • 我对当前代码没有问题(上面提到过)。我正在尝试添加人脸检测器,如果没有检测到人脸,我需要将按钮可见性设置为 GONE

标签: android android-camera2


【解决方案1】:

您可以尝试使用相机 API 中的人脸检测器,大多数设备都可用:https://developer.android.com/reference/android/hardware/camera2/CaptureRequest#STATISTICS_FACE_DETECT_MODE 将其打开,https://developer.android.com/reference/android/hardware/camera2/CaptureResult#STATISTICS_FACES 用于读取是否检测到任何人脸。

【讨论】:

    猜你喜欢
    • 2018-07-04
    • 2016-02-18
    • 2016-05-25
    • 2016-07-26
    • 2013-09-24
    • 1970-01-01
    • 2019-02-27
    • 2021-08-27
    相关资源
    最近更新 更多