
구도리 (GUDORY)
폰을 받은 사람에게 한 문장씩 구도를 알려 주는 카메라 앱
2026 InThon 해커톤에서 만든 프로젝트고려대학교 정보대학 · 2026.10.31 – 2026.11.01
- 기간
- 2026.10.31 – 2026.11.01
- 종류
- 해커톤 프로젝트
- 팀
- 4명
- 역할
- 팀장 · 카메라 앱·통합·릴리스
- 진행 상태
- 완료
- 배포
- 설치 파일 공개GitHub Releases
라이브러리MediaPipe
AI 도구Claude Code
GitHub 저장소
요약
다른 사람에게 폰을 맡겨 사진을 찍을 때, 찍는 사람에게 구도 교정을 한 번에 하나씩 "두 걸음 뒤로 가 주세요" 같은 문장으로 알려 주는 Android 카메라 앱입니다. 목표 구도는 배경을 보고 추천하거나(추천 모드) 사용자가 고른 레퍼런스 사진에서 가져옵니다(맞춤 모드). 포즈 인식과 배경 분석은 모두 기기 안에서 실행됩니다. 2026 InThon 해커톤에서 4인 팀으로 만들었습니다.
내가 한 일
- 모듈 간 인터페이스(계약)와 공통 데이터 모델 설계
- 카메라 화면 UI 구현(모드 전환, 5단계 인물↔배경 바, 레퍼런스 시트, 줌 룰러)
- 원본 해상도 촬영, 미리보기 영역 그대로 저장, 가로 사진 회전 처리 구현
- 거리 비프·완료음·진동 피드백과 한국어·영어·일본어 안내 문구 구현
- 설정 화면과 앱 안 사용법 투어 구현
- 팀원이 만든 포즈 인식·코칭 엔진·장면 추천 모듈을 앱에 통합
- CADB로 학습한 추천기 v2(학습 스크립트와 앱 내 추론) 구현
- 릴리스 빌드 실행 오류 수정과 Android APK v0.1.0 배포
화면
원본 크기로 보기 (새 탭)
원본 크기로 보기 (새 탭)
원본 크기로 보기 (새 탭)
원본 크기로 보기 (새 탭)
원본 크기로 보기 (새 탭)
원본 크기로 보기 (새 탭)
원본 크기로 보기 (새 탭)
원본 크기로 보기 (새 탭)
원본 크기로 보기 (새 탭)핵심 기능
- 추천 모드
- 사람을 가린 배경을 기기 안의 CLIP으로 분석해 목표 구도를 정하고, 5단계 바로 인물 중심과 배경 중심 사이를 고릅니다.
- 맞춤 모드
- 레퍼런스 사진을 여러 장 넣고, 선택한 사진의 구도를 목표로 따라가게 합니다.
- 한 문장 코칭
- 수평(±3°)→거리→좌우→높이 순서로 처음 벗어난 항목 하나를, 화각으로 환산한 걸음(0.6 m)·주먹(10 cm) 단위의 문장과 방향 화살표로 보여 줍니다.
- 사진가 규칙
- 추천 모드의 1–3단계에서는 머리 위 여백, 관절에서 잘리지 않는 프레임, 인물이 바라보는 방향의 여백을 반영해 목표 구도를 조정합니다.
- 소리·진동 피드백
- 목표에 가까워질수록 비프가 빨라지고, 구도가 맞으면 완료음·진동과 노란 셔터 링으로 촬영 시점을 알립니다.
- 안내 언어 3개
- 안내 문구를 한국어·영어·일본어로 바꿀 수 있습니다.
- 원본 화질 저장
- 세로·가로를 자동으로 판별하고, 미리보기에 보인 그대로 원본 해상도로 GUDORY 앨범에 저장합니다.
기술 스택
언어
- Dart
- 카메라, 코칭, 추천, 설정 등 앱 전체
- Python
- 학습 사진 필터링, 추천 데이터 생성, 추천기 v2 학습 파이프라인
모바일
- Flutter
- Android 카메라 앱의 화면과 촬영·저장
- Riverpod
- 카메라·코칭·추천 모듈을 provider로 연결
AI
- Google ML Kit
- 실시간·레퍼런스 사진 포즈 인식(Pose Detection)과 인물 영역 분리(Selfie Segmentation)
- ONNX Runtime
- 기기 안에서 CLIP 모델로 배경 임베딩 계산
- CLIP
- 인물을 가린 배경을 벡터로 바꿔 구도 추천의 입력으로 사용
- scikit-learn
- 추천기 v2의 PCA·로지스틱·릿지 회귀 학습
함께 쓴 라이브러리·도구
AI
- MediaPipe
- 학습 사진의 포즈·인물 검출 필터
구조
Flutter 앱 하나에 카메라·피드백·코칭·장면 추천 모듈이 공통 인터페이스로 연결되고 Riverpod provider로 조립됩니다. 카메라 프레임은 ML Kit 포즈 인식을 거쳐 코칭 엔진에서 목표 구도와 비교되며, 목표 구도는 CLIP 배경 분석(추천 모드)이나 레퍼런스 사진 분석(맞춤 모드)에서 나옵니다. 서버 없이 모든 추론이 기기 안에서 실행되고, 추천 데이터는 오프라인 Python 파이프라인이 미리 만듭니다.
문제와 해결
문제
디버그 빌드와 달리 릴리스 APK가 실행 직후 종료됨
해결
R8이 WorkManager의 Room DB 생성자를 제거한 것을 찾아 ProGuard keep 규칙 추가
문제
가로 촬영을 위해 촬영 방향을 고정하면 미리보기가 흔들림
해결
촬영은 항상 세로로 고정하고, 가로 사진은 저장할 때 회전하도록 변경
문제
분석할 곳이 없어도 카메라 프레임을 계속 복사해 가비지 컬렉션이 자주 발생
해결
구독자가 있을 때만 분석 프레임 스트림을 실행하도록 변경
문제
기존 추천기(v1)가 인물을 대부분 가운데에 배치함(사진 500장 기준 83.8%)
해결
추천기 v2에서 좌우는 인물이 선 쪽을 따르고 중심에서의 거리만 학습해, v2 학습에 쓰지 않은 같은 500장에서 가운데 배치를 6.6%로 낮춤
결과
- 2026 InThon 해커톤(고려대학교 정보대학 주최)에서 발표 및 시연
- Android APK v0.1.0을 GitHub Releases로 배포
- 앱 테스트 235개 통과 (2026-11-02 실행)
배운 점
- 카메라로 인물을 인식하는 프로젝트는 처음이었는데, 미리보기에 보이는 영역·분석 프레임·저장 사진의 좌표를 하나로 맞춰야 안내와 결과 사진이 일치한다는 것을 배웠습니다.
- 디버그 빌드에서 동작해도 릴리스 빌드 최적화로 앱이 실패할 수 있어, 실기기에서 릴리스 빌드를 확인해야 한다는 것을 배웠습니다.
- 인터페이스를 먼저 정하고 각 모듈을 임시 구현으로 시작해 나중에 교체하는 방식으로 4명이 동시에 개발할 수 있었습니다.