Skip to content

스마트폰 카메라를 이용해 박스 크기를 측정하는 안드로이드 어플리케이션

Notifications You must be signed in to change notification settings

Box-size/box.size-android

Repository files navigation

boxDotSizeLogo

CJ 대한통운에서 주관하는 CJ 미래기술 챌린지 2023 에 제출한 어플리케이션의 소스코드입니다.

'스마트폰 활용한 상품 체적측정' 이 주제였으며, 예선 통과 후 본선까지 진출하였습니다.


✨Overview

  • 2023.7.7. ~ 2023.9.4.
  • Box.size는 스마트폰 자원만을 활용하여 박스 크기를 측정하는 안드로이드 어플리케이션입니다.
  • 해당 어플리케이션은 두 가지 경우에서 박스 체적 측정을 지원합니다.
    1. 박스 하나를 단일 측정 (과제1)
    2. 영상을 통해 일정 속도로 이동하는 여러개의 박스 측정 (과제2)

Skill 🛠️

Android Studio Kotlin RXJava

Python OpenCV TensorFlow ONNX


How to use 👀

  • 사용 전 반드시 '테스트'버튼을 눌러 카메라 캘리브래이션 과정을 진행해야합니다.
  • 이후 필요에 따라 '사진으로 촬영' 혹은 '영상으로 촬영'을 눌러 카메라 체적 측정을 시작합니다.
  • '사진으로 촬영'의 경우 한장의 사진 속에 포함된 하나의 박스 체적을 측정합니다.
  • '영상으로 촬영'의 경우 지정한 ms 간격으로 사진을 촬영하여 각 촬영 마다 박스 하나의 체적을 측정합니다.
  • 측정결과는 '측정 기록'을 통해 확인 할 수 있습니다.


📐체적 측정 알고리즘

  • 아래 기본 원리를 기반으로 알고리즘을 설계하였습니다. $$카메라의 초점거리 : 실제 거리 = 사진 상 박스 크기 : 실제 박스크기$$
  • 카메라의 초점 거리 등 내부/외부 파라미터를 구하기 위해 체커보드 패턴을 사용한 카메라 캘리브레이션을 활용 하였습니다.
  • OpenCV를 사용하여 배경제거, 윤곽선검출 등으로 전처리를 진행하고 박스의 꼭짓점을 계산하였습니다.

  • 실제 박스 최하단 꼭지점을 월드 좌표로 구하기 위해 아래 공식을 활용하였습니다.

$$P=C _w +k(p _w −C_w​ )$$

  • 이후 얻어진 결과를 활용하여 실제 박스의 체적을 도출하였습니다.

📱안드로이드 앱

image task1 task2 results
카메라
캘리브레이션
사진 촬영으로 분석 연속 촬영으로 분석 기록 확인
  • CameraX, Camera2 를 활용하여 카메라 하드웨어 기능을 제어하였습니다.
  • RxJava를 활용하여 비동기 처리 및 데이터 플로우를 제어하였습니다.
  • ml kit에 박스 이미지 학습 모델을 활용하여 박스 이미지만을 크롭하고 해당 이미지를 일부 전처리하였습니다.
  • Room을 활용하여 내부 DB에 측정 결과(측정시간, 결과, 과제번호, 원본이미지 uri, 크롭된 이미지 uri)를 저장합니다.
    해당내용은 '측정 기록'에서 확인할 수 있습니다.

Team 👥

팀원 역할

김종훈(팀장)
카메라 캘리브레이션 및 알고리즘 개발

안혜준(알고리즘)
인공지능 및 알고리즘 개발

김유빈(AOS)
ML kit 객체 인식 및 카메라, DB 등 안드로이드 어플리케이션 기능 개발

김지훈(알고리즘)
알고리즘 개발

About

스마트폰 카메라를 이용해 박스 크기를 측정하는 안드로이드 어플리케이션

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published