본문으로 건너뛰기
김태호

구도리 (GUDORY)

폰을 받은 사람에게 한 문장씩 구도를 알려 주는 카메라 앱

2026 InThon 해커톤에서 만든 프로젝트고려대학교 정보대학 · 2026.10.31 – 2026.11.01

요약

다른 사람에게 폰을 맡겨 사진을 찍을 때, 찍는 사람에게 구도 교정을 한 번에 하나씩 "두 걸음 뒤로 가 주세요" 같은 문장으로 알려 주는 Android 카메라 앱입니다. 목표 구도는 배경을 보고 추천하거나(추천 모드) 사용자가 고른 레퍼런스 사진에서 가져옵니다(맞춤 모드). 포즈 인식과 배경 분석은 모두 기기 안에서 실행됩니다. 2026 InThon 해커톤에서 4인 팀으로 만들었습니다.

내가 한 일

  • 모듈 간 인터페이스(계약)와 공통 데이터 모델 설계
  • 카메라 화면 UI 구현(모드 전환, 5단계 인물↔배경 바, 레퍼런스 시트, 줌 룰러)
  • 원본 해상도 촬영, 미리보기 영역 그대로 저장, 가로 사진 회전 처리 구현
  • 거리 비프·완료음·진동 피드백과 한국어·영어·일본어 안내 문구 구현
  • 설정 화면과 앱 안 사용법 투어 구현
  • 팀원이 만든 포즈 인식·코칭 엔진·장면 추천 모듈을 앱에 통합
  • CADB로 학습한 추천기 v2(학습 스크립트와 앱 내 추론) 구현
  • 릴리스 빌드 실행 오류 수정과 Android APK v0.1.0 배포

화면

발표 자료: 구도 점수가 매겨진 CADB 사진 9,497장에서 694장을 골라 학습해 가운데 추천을 84%에서 6.6%로 줄임원본 크기로 보기 (새 탭)
웹 화면 발표 자료: 구도 점수가 매겨진 CADB 사진 9,497장에서 694장을 골라 학습해 가운데 추천을 84%에서 6.6%로 줄임
추천 모드 카메라 화면: 안내 말풍선, 3×3 격자, 가운데 표시, 인물↔배경 단계 버튼과 셔터원본 크기로 보기 (새 탭)
휴대폰 화면 추천 모드 카메라 화면: 안내 말풍선, 3×3 격자, 가운데 표시, 인물↔배경 단계 버튼과 셔터
인물↔배경 5단계 선택 패널(안내 문구는 영어)원본 크기로 보기 (새 탭)
휴대폰 화면 인물↔배경 5단계 선택 패널(안내 문구는 영어)
발표 자료: 추천기 v2 구도 모델 구성(로지스틱·릿지 회귀, 가중 중앙값, CADB 점수 가중치, 입력 42개, 162 KB)원본 크기로 보기 (새 탭)
웹 화면 발표 자료: 추천기 v2 구도 모델 구성(로지스틱·릿지 회귀, 가중 중앙값, CADB 점수 가중치, 입력 42개, 162 KB)
안내 언어 선택: 한국어 · English · 日本語원본 크기로 보기 (새 탭)
휴대폰 화면 안내 언어 선택: 한국어 · English · 日本語
맞춤 모드: 레퍼런스 사진을 추가하라는 안내와 추가 버튼원본 크기로 보기 (새 탭)
휴대폰 화면 맞춤 모드: 레퍼런스 사진을 추가하라는 안내와 추가 버튼
발표 자료: 처리 흐름(포즈·배경·가속도 센서 → 추천과 사진가 규칙 → 판단 → 안내)과 실제 기기의 지시 화면원본 크기로 보기 (새 탭)
웹 화면 발표 자료: 처리 흐름(포즈·배경·가속도 센서 → 추천과 사진가 규칙 → 판단 → 안내)과 실제 기기의 지시 화면
첫 실행 때 나오는 앱 안 사용법 투어(1/10)원본 크기로 보기 (새 탭)
휴대폰 화면 첫 실행 때 나오는 앱 안 사용법 투어(1/10)
설정: 안내 언어, 거리 알림음, 완료 소리, 진동, 격자선원본 크기로 보기 (새 탭)
휴대폰 화면 설정: 안내 언어, 거리 알림음, 완료 소리, 진동, 격자선

핵심 기능

추천 모드
사람을 가린 배경을 기기 안의 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
학습 사진의 포즈·인물 검출 필터

같은 기술을 쓴 다른 프로젝트로컬 퀘스트Dayce

구조

Flutter 앱 하나에 카메라·피드백·코칭·장면 추천 모듈이 공통 인터페이스로 연결되고 Riverpod provider로 조립됩니다. 카메라 프레임은 ML Kit 포즈 인식을 거쳐 코칭 엔진에서 목표 구도와 비교되며, 목표 구도는 CLIP 배경 분석(추천 모드)이나 레퍼런스 사진 분석(맞춤 모드)에서 나옵니다. 서버 없이 모든 추론이 기기 안에서 실행되고, 추천 데이터는 오프라인 Python 파이프라인이 미리 만듭니다.

문제와 해결

  1. 문제

    디버그 빌드와 달리 릴리스 APK가 실행 직후 종료됨

    해결

    R8이 WorkManager의 Room DB 생성자를 제거한 것을 찾아 ProGuard keep 규칙 추가

  2. 문제

    가로 촬영을 위해 촬영 방향을 고정하면 미리보기가 흔들림

    해결

    촬영은 항상 세로로 고정하고, 가로 사진은 저장할 때 회전하도록 변경

  3. 문제

    분석할 곳이 없어도 카메라 프레임을 계속 복사해 가비지 컬렉션이 자주 발생

    해결

    구독자가 있을 때만 분석 프레임 스트림을 실행하도록 변경

  4. 문제

    기존 추천기(v1)가 인물을 대부분 가운데에 배치함(사진 500장 기준 83.8%)

    해결

    추천기 v2에서 좌우는 인물이 선 쪽을 따르고 중심에서의 거리만 학습해, v2 학습에 쓰지 않은 같은 500장에서 가운데 배치를 6.6%로 낮춤

결과

  • 2026 InThon 해커톤(고려대학교 정보대학 주최)에서 발표 및 시연
  • Android APK v0.1.0을 GitHub Releases로 배포
  • 앱 테스트 235개 통과 (2026-11-02 실행)

배운 점

  • 카메라로 인물을 인식하는 프로젝트는 처음이었는데, 미리보기에 보이는 영역·분석 프레임·저장 사진의 좌표를 하나로 맞춰야 안내와 결과 사진이 일치한다는 것을 배웠습니다.
  • 디버그 빌드에서 동작해도 릴리스 빌드 최적화로 앱이 실패할 수 있어, 실기기에서 릴리스 빌드를 확인해야 한다는 것을 배웠습니다.
  • 인터페이스를 먼저 정하고 각 모듈을 임시 구현으로 시작해 나중에 교체하는 방식으로 4명이 동시에 개발할 수 있었습니다.