본문 바로가기

OnePIC (Android App)/카메라

[기능 설명] 객체별 다초점 촬영

반응형

필자는 팀프로젝트로 OnePIC이라는 카메라 앱을 구현하였고, 다양한 공모전에 참여하였습니다.
이 과정에서 필자가 구현한 객체별 다초점 촬영에 대해 간단하게 설명하고자한다.


객체별 다초점 촬영

객체별 다초점 촬영이란, 카메라에 감지된 객체마다 초점을 맞춰 서로 다른 초점의 이미지(현재 최대 5)들을 순식간에 촬영하는 고속 연사 촬영이다.

 

 

해당 기능에 대한 설명과 기능을 어떻게 구현하였는지에 관해 간단하게 설명하고자한다.


 

기능 설명

 

객체별 다초점 촬영 기능을 그림과 같이 3가지 객체를 촬영하는 사례를 들어 설명한다.

 

OnePIC 앱을 실행하면 그림(a)과 같은 카메라 화면이 나타난다.

사용자가 그림(a) 하단에 촬영 모드 중 객체별 다초점 촬영 모드를 선택하면, 카메라에 잡힌 커피와 녹색 손 소독제, 흰색 손 소독제 3가지 객체가 그림(b)과 같이 카메라 프리뷰에 노란색 사각형으로 표시된다. (측정해 본 결과, 약 30ms 소요)

이후 사용자가 촬영 버튼을 누르면 프리뷰에 표시된 객체별로 초점이 맞춰진 3개의 이미지가 촬영된다.

촬영된 3개의 이미지는 그림(c)과 같이 한 장의 All-in JPEG 파일로 저장된다.

 


 

구현 설명

 

객체별 다초점 촬영은 그림과 같이 작동한다. 

 

객체를 감지하기 위해, 카메라에서 프리뷰 이미지를 추출한다. 

TensorFlow Lite 라이브러리의 객체 감지(Object Detection) 모델을 통해 객체들을 감지하며, 그 결과로 객체별 위치 정보를 담은 바운딩 박스가 생성된다. 그리고 감지된 객체들의 임곗값(객체 감지기가 판단한 물체의 정확도)이 50% 이상인 최대 상위 5개 객체만 촬영 대상으로 결정한다. 

사용자가 촬영 버튼을 누르면, 촬영 대상으로 결정한 객체의 바운딩 박스를 이용해 하나씩 Camera2 API에 초점 거리와 노출 정도를 전달한다.

그리고 Camera2 API로 해당 객체에 초점이 맞춰진 이미지를 한 장 촬영한다. 촬영 대상 객체별로 ③~④ 과정을 반복하여, 객체별로 초점이 맞춰진 여러 개의 이미지를 얻는다. 

촬영이 완료되면, APP3 메타데이터에 각 이미지의 바운딩 박스를 저장하고, 전체를 All-in JPEG 파일로 저장한다. 추후 APP3 메타데이터는 사용자가 원하는 객체에 초점을 맞추는 데 활용된다.

 

 

반응형