본문 바로가기
~2024.10

[Android] CameraX API 관련 이것저것 정리한 글

by HJfan 2024. 5. 18.

🙏 포스팅을 읽기 전 참고해 주세요 🙏

해당 블로그는 신입 개발자가 공부한 내용을 기록 용도로 운영하는 공간입니다.

최대한 오피셜한 내용을 작성하려고 노력하고 있지만, 일부 부정확한 정보가 포함되어 있을 수 있습니다.

해당 내용은 댓글이나 메일을 남겨주시면 즉시 확인 후 조치를 취하도록 하겠습니다. 감사합니다.


0️⃣ 서론

개인적으로 필요한 내용만 정리한 글이기에 권한 설정, 종속성 추가 등의  내용은 생략되었습니다.

추후 필요하다고 판단되면 추가 예정입니다.

 

1️⃣ CameraX란?

기존 앱 개발자들이 카메라 앱을 활용하기 위해서는 기기 호환성 문제와 제어가 복잡하다는 문제 등의

어려움이 있었다. 이를 구글도 인지하고, Camera2를 추상화하여 사용하기 쉽도록 만든 것이 CameraX API이다.

CameraX API는 Jetpack 라이브러리에 포함되어 있다.

 

2️⃣ 제공하는 Usecases

2024년 5월 18일 기준, 공식 문서에 따르면 CameraX에서 지원하는 Useacases는 총 4가지로 아래와 같다.

ㆍPreview, ImageCapture, VideoCapture, ImageAnalysis

위 4가지 Usecases는 카메라 앱에서 필요로 하는 기본적인 기능들로써, 개발자는 CameraController나

CameraProvider에 바인딩하여 간단하게 사용할 수 있는 것이다.

 

3️⃣ CameraProvider

CameraX의 장점 중 가장 매력적인 점은 카메라의 생명주기(LifeCycle)을 자동으로 관리해 준다는 것이다.

이 문장에 대해 조금 더 설명하면 카메라 초기화 및 해제, 카메라 상태 관리, 자원 관리, 에러 처리 등을 자동으로

관리해 준다는 의미이다. 그렇다면 CameraProvider는 어떻게 카메라 생명주기를 자동으로 관리할 수 있는 걸까?

Chat GPT에게 질문해 보았다.

ㆍLifecycleObserver 사용

   CameraProvider는 Android의 LifecycleObserver를 활용하여 액티비티나 프래그먼트의 생명주기에 자동으로
   반응할 수 있다고 한다. 즉, 액티비티나 프래그먼트의 onResume, onPause, onDestroy 등의 생명주기에 따라
   카메라의 상태도 자동으로 관리된다는 것이다.

ㆍ카메라 바인딩

   그러기 위해선 액티비티나 프래그먼트의 생명주기에 카메라를 바인딩하는 작업이 필요하다.
   CameraX에서는 bindToLifecycle 함수를 사용하여 간단하게 원하는 Lifecycle에 카메라를 바인딩할 수 있다.
   bindToLifecycle 함수를 사용하는 간단한 예시 코드를 첨부하도록 하겠다.

val cameraProviderFuture = ProcessCameraProvider.getInstance(context)
cameraProviderFuture.addListener(Runnable {
    val cameraProvider = cameraProviderFuture.get()

    val preview = Preview.Builder().build().also {
        it.setSurfaceProvider(viewFinder.surfaceProvider)
    }

    val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
    cameraProvider.bindToLifecycle(this, cameraSelector, preview)
// 첫 번째 파라미터: 바인딩할 LifecycleOwner, 보통 Activity 또는 Fragment
// (여기서는 'this'를 사용하여 현재 Activity 또는 Fragment의 생명 주기를 의미)
// 두 번째 파라미터: CameraSelector 객체, 전면 또는 후면 카메라를 선택하기 위한 객체
// (예: CameraSelector.DEFAULT_BACK_CAMERA 또는 CameraSelector.DEFAULT_FRONT_CAMERA)
// 세 번째 파라미터: 하나 이상의 UseCase 객체
// (여기서는 Preview 객체), 카메라 미리보기, 이미지 캡처, 동영상 녹화 등 사용하려는 카메라 기능을 정의
}, ContextCompat.getMainExecutor(context))

 

ㆍProcessCameraProvider의 싱글톤 패턴 사용

   ProcessCameraProvider는 싱글톤 패턴을 사용하여 애플리케이션 전체에서 하나의 카메라 인스턴스를 공유한다.
   이를 통해 중복된 카메라 초기화나 해제를 방지하여 자원을 효율적으로 관리한다.
   

4️⃣ 작성 중

5️⃣

✔️❗

 

 

 

 

 


📝 Reference

👉 https://developer.android.com/reference/androidx/camera/core/package-summary?_gl=1*1vde0k3*_up*MQ..*_ga*MTIwMzUzMjk5Ni4xNzE1OTkwMDg1*_ga_6HH9YJMN9M*MTcxNTk5MDA4NC4xLjAuMTcxNTk5MDA4NC4wLjAuMA..

👉 참조 문헌 링크 2

👉 https://velog.io/@wndudwkd003/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%EC%97%90%EC%84%9C-%EC%89%AC%EC%9A%B4-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%98%81%EC%83%81-%EC%B4%AC%EC%98%81%EC%9D%84-%EC%9C%84%ED%95%9C-Jetpack-API-CameraX-%EC%82%AC%EC%9A%A9%EB%B2%95