-
CameraX api 1 : 기초회사 생활/여권 NFC (CameraX + OCR + NFC) 2023. 11. 5. 15:37
안드로이드 학습 시리즈 :
차례: 1. 안드로이드 앱에서 카메라 사용 방법 2. CameraX api를 선택해서 학습하는 이유 3. CameraX 기본 내용
1. 안드로이드 앱에서 카메라 사용 방법 :
안드로이드 앱에서 카메라를 사용하는 방법은 아주 크게 2가지 정도 있다.
- (1) 시스템에서 제공하는 Camera 앱 사용 (링크: https://from-android-to-server.tistory.com/62 )
- (2) Camera api 사용(Camera api, Camera2 api, CameraX api)
일단 1번 방식인 시스템에서 제공하는 Camera 앱을 사용하는 것으로 제일 간단하게 사용할 수 있다. 하지만 카메라에서 유저에게 보여주는 preview 화면을 커스텀하게 이용할 수가 없다.
예를 들어, 개발자가 화면에 가이드라인이나 Capture 버튼등을 원하는 디자인으로 추가 하고 싶은 경우는 시스템에서 제공하는 Camera앱이 아닌 카메라를 불러오는 Camera api를 사용해야한다.
2번 방식인 Camera api는 3가지가 있다.
(1) Camera api, (2) Camera2 api, (3) CameraX api
api에 따라 Learning curve나 카메라를 제어할 수 있는 범위 같은 것들이 다르기 때문에 상황에 맞는 api를 사용해야 한다. 자세한 내용은 아래에 기술하겠다.
만약 시스템 카메라만 이용한다면 굳이 Camera api를 학습할 필요성은 없겠으나, 내가 다니는 회사에서 가이드라인을 카메라 화면 위에 올려놓고 사용하기 때문에 나는 Camera api를 사용하는 방법을 학습할 필요성이 있었고 그중에서 CameraX api의 시간 및 활용도 측면에서 제일 좋은 선택인 것 같아 CameraX api를 학습하고 기록하기로 했다.
2. CameraX api를 선택한 이유
나는 3가지 api중에서 아래의 이유로 CameraX를 선택했다.
더보기카메라 라이브러리 선택
Android 앱에 카메라 기능을 추가하려는 경우 크게 세 가지 옵션을 사용할 수 있습니다.대부분의 개발자는 CameraX를 사용하는 것이 좋습니다. CameraX는 다양한 Android 기기(Android 5.0 이상)를 지원하고 일반적인 사용 사례를 중심으로 설계된 일관된 높은 수준의 API를 제공하는 Jetpack 라이브러리입니다. CameraX는 기기 호환성 문제를 해결하므로, 앱에 기기별 코드를 추가할 필요가 없습니다.
CameraX는 Camera2 패키지를 기반으로 빌드됩니다. 복잡한 사용 사례를 지원하기 위해 하위 수준의 카메라 제어가 필요한 경우 Camera2를 사용하는 것이 좋지만, API가 CameraX보다 복잡하며 기기별 구성을 관리해야 합니다. Camera2는 CameraX와 마찬가지로 Android 5.0(API 수준 21) 이상에서 작동합니다.
원래 Android Camera 클래스는 지원 중단되었습니다. 새 앱은 CameraX(권장) 또는 Camera2를 사용해야 합니다. 기존 앱은 새로운 기능을 활용하고 향후 기기와의 호환성을 유지하기 위해 CameraX 또는 Camera2로 이전해야 합니다.링크 : https://developer.android.com/training/camerax/choose-camera-library?hl=ko
위에 내용은 안드로이드 공식 사이트에 나오는 내용이다. CameraX는 Jetpack 라이브러리를중 하나이며, Camera2 api를 기반으로 비교적 간단하게 추가 할수 있다고 안드로이드 공식사이트에서도 추천한다.
Camera api는 이미 지원 중단되었기 때문에 X
Camera2 api는 여러가지 카메라에 관련된 세밀한 부분을 관리할수 있지만 그만큼 학습 난이도가 매우 높기 때문에 시간이 많이 걸릴 것이다. 지금 당장 하위 수준의 카메라 제어는 필요 없기 때문에 X
CameraX api 는 배우는 난이도가 낮기도 하고 CameraX api가 제공하는 기능들로도 충분히 잘 활용해서 필요한 부분을 활용할 수 있기때문에 O
시간이 많다면야 모든 것을 다 학습하면 좋겠지만 회사일도 계속 새로운 것들이 주어지기도 하고 주말에는 다른 것들도 학습해보고 싶은 것들이 많기 때문에 먼저 1가지만 택해서 공부를 하고 나중에 공부를 해야 할 것 같다.
3. CameraX 기본 내용 :
https://developer.android.com/training/camerax?hl=koCa
안드로이드 공식사이트에 내용을 보고 주요 장점을 정리해 보자면
기기 호환성
CameraX는 Android 5.0(API 수준 21) 이상을 실행하는 기기(기존 Android 기기의 98% 이상)를 지원.
안드로이드 5.0버전인 롤리팝의 첫 출시일이 2014년 11월 12일인 것을 고려해보면 사실상 지금 사용되는 모든 스마트폰이 지원된다고 생각해도 될 것 같다.
사용 편의성
CameraX에서는 기기별 차이를 관리하는 대신 실행해야 하는 작업에만 집중할 수 있도록 지원하는 사용 사례(use cases)가 도입되었습니다.
- 미리보기(Preview): 화면에서 이미지를 봅니다.
- 이미지 분석(Image Analysis): ML Kit로 전달하는 경우와 같이 알고리즘에 사용할 수 있도록 버퍼에 원활하게 액세스합니다.
- 이미지 캡처(Image Capture): 이미지를 저장합니다.
- 동영상 캡처(Video Capture): 동영상과 오디오를 저장합니다.
나중에 코드에 이 4가지 부분이 추가되는데 CameraX api는 이 4가지 부분 정도만 추가해 주면 된다.
내부적으로 Lifecycle을 관리라던가, 별도에 Thread를 만들어 주고 추가해야 한다던가 하는 추가적인 코드가 필요 없어서 굉장히 편리하다.
(Camera2 api는 이런것들 까지 다 신경쓰고 추가해줘야 한다.)
기기 간 일관성
기기별로 가로세로 비율, 방향, 회전, 미리보기 크기, 이미지 크기를 고려해야 합니다.
그러나 CameraX를 사용하면 이러한 기본적인 동작이 자동으로 해결됩니다.
카메라 확장 프로그램
적은 코드의 길이로 카메라의 다양한 기능 활용 가능.
- Auto, 빛망울 효과, 얼굴 보정, HDR, 야간
'회사 생활 > 여권 NFC (CameraX + OCR + NFC)' 카테고리의 다른 글
CameraX api 4편 : Anlysis와 text 분석 라이브러리(OCR) (0) 2023.11.14 CameraX api 3편 : takePicture 메소드 (0) 2023.11.13 CameraX api 2 : CameraX 기본 코드 분석 (0) 2023.11.10 Android Camera 사용하기 (0) 2023.07.29 여권 NFC 정보 가져오기 (0) 2023.06.01