민프

[Android][CameraX - 2] Camera를 이용해서 얼굴을 캡쳐해보자! 본문

[Android]

[Android][CameraX - 2] Camera를 이용해서 얼굴을 캡쳐해보자!

민프야 2021. 7. 26. 20:06

저번 포스트에서는 Camera Preview를 구현했었고

https://minf.tistory.com/29

 

[Android][CameraX - 1] 얼굴을 비춰줄 Camera PreView를 구현해보자!!

저번 포스트 에서는 https://minf.tistory.com/28 선택한 이미지에서의 얼굴인식을 해보았는데 이번에는 기기의 카메라로 실시간 얼굴인식이 될 수 있도록 Camera Preview를 구현해보자! 안드로이드 카메라

minf.tistory.com

이번에는 캡쳐를 해보자!!

 

 

 

구글 문서에 나와있는대로

ImageCapture imageCapture =
    new ImageCapture.Builder()
        .setTargetRotation(view.getDisplay().getRotation())
        .build();

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, imageAnalysis, preview);

ImageCapture 클래스는 기본적인 사진 촬영을 위해 설계 되었고, 

takePicture() 함수를 제공해서 저장까지 할 수 있다.

초점 및 노출 영역은 PreView를 통해 제어할 수 있다.

 

사진 캡처를 지연 시간을 기준으로 최적화하려면 ImageCapture.CaptureMode CAPTURE_MODE_MINIMIZE_LATENCY로 설정합니다. 화질을 최적화하려면 CAPTURE_MODE_MAXIMIZE_QUALITY로 설정합니다.

 

이제 캡쳐 버튼을 만들고 

그 캡쳐 버튼을 눌렀을때 실행되는 코드를 보자

   ImageCapture.OutputFileOptions outputFileOptions =
                        new ImageCapture.OutputFileOptions.Builder(file).build();


                imageCapture.takePicture(outputFileOptions,ContextCompat.getMainExecutor(CameraActivity.this),
                        new ImageCapture.OnImageSavedCallback() {
                            @Override
                            public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
                                // insert your code here.
                                Log.d(TAG+ " onImageSavedgetSavedUri", String.valueOf(outputFileResults.getSavedUri()));
                                Toast.makeText(getApplicationContext(), "찍혔어요",Toast.LENGTH_LONG).show();
                            }
                            @Override
                            public void onError(ImageCaptureException error) {
                                // insert your code here.
                                Log.d(" Camerror", String.valueOf(error));
                                Toast.makeText(getApplicationContext(), "에러났어요",Toast.LENGTH_LONG).show();

                            }
                        }
                );
            }

imageCapture 후에 File 클래스를 만들어줘서 넣어주면

캡쳐 버튼을 눌렀을때 File클래스에 정의할 때 정의해준 파일 경로에 저장이 되게 된다.

 

밑 사진 처럼 캡쳐가 잘 된것을 확인할 수 있다.

 

이제 카메라 전 / 후 전환이 되게 해보자!

 

 

 

----------참고----------

https://developer.android.com/training/camerax/take-photo

https://developer.android.com/reference/androidx/camera/core/ImageCapture

 

Comments