-
Notifications
You must be signed in to change notification settings - Fork 4
CameraX & ML Kit
K024_박치윤 edited this page Nov 30, 2021
·
2 revisions
CameraX | MLKit |
---|---|
그물잠🐟 은 주요기능 중 하나인 물고기 인식 및 길이 계산을 위해서 CameraX & ML Kit을 사용하였습니다.
- 서비스의 가장 핵심 기능 중 하나인 카메라 사용에는 다음과 같은 요구사항 (기획) 이 있었습니다.
- 카메라를 통해서 실시간으로 촬영한다.
- 실시간으로 프리뷰를 띄워서 사용자에게 화면을 보여준다.
- 셔터 버튼을 누르면 사용자가 보고 있던 화면을 촬영한다.
- 위의 요구사항을 만족하며 다음과 같은 장점이 있는 Camera X 라이브러리를 사용했습니다.
- 카메라 사용과 관련된 다양한 유스케이스인 프리뷰 보기, 이미지 분석, 이미지 캡쳐를 한 번에 처리할 수 있으며, 쉬운 사용성을 제공합니다.
- 화면과 카메라 촬영 이미지의 크기, 화면의 회전 등을 쉽게 제공받고 설정할 수 있습니다.
- 화면 크기와 해상도 등 기기별 차이를 따로 대응할 필요 없이 자동으로 처리됩니다.
- Lifecycle과 결합되어 메모리 누수 등에서 안전한 사용이 가능합니다.
- 서비스의 가장 핵심 기능 중 하나인 카메라를 통한 물고기 인식 및 길이 계산 기능에는 다음과 같은 요구사항(기획) 이 있었습니다.
- 카메라를 통해서 실시간으로 물고기와 지폐를 인식하기
- 인식된 물고기와 지폐를 감싸는 Bounding Box를 실시간으로 사용자에게 보여주기
- 물고기의 길이를 소수점 아래 한 자리까지 계산하여 표시하기
- 촬영한 사진의 물고기를 선택적으로 Crop하여 업로드 할 수 있는 사진으로 만들기
- 먼저 위의 요구 사항을 만족하기 위해선 다음과 같은 기능을 가진 라이브러리 혹은 Pretrained-Model이 필요했습니다.
- 이미지에 Bounding Box가 늦지 않게 표현할 수 있도록 빠른 처리가 가능하다
- 짧은 개발 기간 (6주) 내에 바로 사용할 수 있도록 쉽게 사용할 수 있다
- 모바일 환경에서의 사용성을 해치지 않도록 용량이 적어야 한다
- 따라서 저희는 다음과 같은 기술을 고려하였습니다.
- 먼저 직접 모델을 training 하거나, 혹은 오픈소스로 공개되어있는 모델을 가져와 Fine-tuning하여 사용하려 하였습니다. 그러나, 시간의 문제로 이를 채탁할 수 없었습니다.
- 다른 Pretrained-Model의 사용을 고려했습니다. 그러나 세부 사항을 직접 튜닝하는 것이 어려웠고, 모델이 무거워 앱의 용량이 커지는 문제가 있었습니다.
- 따라서 마지막으로, CameraX 라이브러리와 시너지가 있으며 모바일 환경에서 쉽게 사용할 수 있는 Firebase의 ML Kit 사용을 결정하였습니다. 그리고 물체 인식을 위하여 Object-Detection 라이브러리를 선택하였습니다.
- CameraX 라이브러리의 Preview를 사용하여 화면에 현재 촬영 중인 화면을 표시합니다.
- CameraX 라이브러리의 Analyzer를 통해서 카메라의 매 프레임 사진을 가져옵니다.
- Detector 인스턴스를 가지고 있고, image를 입력받아 처리 결과를 반환하는 메소드를 가지는 클래스를 생성하여, 이를 Activity에서 사용합니다.
- 클래스 내부에서 Object Detection 라이브러리의 Detector 인스턴스를 다음과 같은 옵션을 설정해서 생성합니다.
- 여러 개의 물체를 동시에 Detect 하는 옵션
- 크기의 정확도를 위해서 매 프레임을 다른 사진으로 간주하는 Single Image Mode
- 클래스의 메소드를 통해서 이미지를 분석하고, Object를 Detect하여 사각형 좌표를 얻습니다.
- 얻어진 사각형을 이미지의 좌표계에서 화면에 보여질 좌표계로 변환하여 사각형 좌표를 변환한 후, 이를 기반으로 화면에 사각형을 표시합니다.
- CameraX 라이브러리의 Capture 기능을 통해서 셔터를 누르면 현재 이미지를 얻습니다.
- 셔터를 눌러 얻은 이미지를 통해서 사각형 길이를 비교하여 그 비율을 측정하고, 이를 통해 물고기의 길이를 얻습니다.