Skip to Content
Taeho Kim

GUDORY

A camera app that coaches whoever holds your phone, one sentence at a time

Built for InThon 2026 HackathonKorea University College of Informatics · 2026.10.31 – 2026.11.01

Summary

An Android camera app for when you hand your phone to someone else: it tells the photographer one composition fix at a time, in a sentence like "take two steps back". The target composition is either recommended from the background (recommend mode) or taken from a reference photo the user picks (custom mode). Pose detection and background analysis both run on the device. Built by a four-person team at the InThon 2026 hackathon.

What I Did

  • Designed the module interfaces (contracts) and the shared data models
  • Built the camera screen UI: mode switch, 5-step person-to-background bar, reference sheet and zoom ruler
  • Implemented full-resolution capture, saving exactly the previewed area, and rotation of landscape shots
  • Implemented proximity beeps, the aligned sound and vibration, and instruction text in Korean, English and Japanese
  • Built the settings screen and the in-app how-to tour
  • Integrated teammates' pose, coaching engine and scene recommender modules into the app
  • Built recommender v2, trained on CADB, including the training script and on-device inference
  • Fixed a release-build crash at launch and published the Android APK v0.1.0

Screens

Presentation slide: 694 of 9,497 composition-scored CADB photos used for training, cutting centred picks from 84% to 6.6%View full size (new tab)
Web screen Presentation slide: 694 of 9,497 composition-scored CADB photos used for training, cutting centred picks from 84% to 6.6%
Recommend mode camera screen: instruction bubble, 3×3 grid, centre mark, the person-to-background level button and the shutterView full size (new tab)
Phone screen Recommend mode camera screen: instruction bubble, 3×3 grid, centre mark, the person-to-background level button and the shutter
The five-step person-to-background panel, with the instruction in EnglishView full size (new tab)
Phone screen The five-step person-to-background panel, with the instruction in English
Presentation slide: the recommender v2 composition model (logistic and ridge regression, weighted medians, CADB score weights, 42 inputs, 162 KB)View full size (new tab)
Web screen Presentation slide: the recommender v2 composition model (logistic and ridge regression, weighted medians, CADB score weights, 42 inputs, 162 KB)
Choosing the instruction language: Korean, English or JapaneseView full size (new tab)
Phone screen Choosing the instruction language: Korean, English or Japanese
Custom mode: a prompt to add reference photos and the add buttonView full size (new tab)
Phone screen Custom mode: a prompt to add reference photos and the add button
Presentation slide: the processing flow (pose, background and accelerometer → recommendation and photographer rules → decision → instruction) with an instruction on a real deviceView full size (new tab)
Web screen Presentation slide: the processing flow (pose, background and accelerometer → recommendation and photographer rules → decision → instruction) with an instruction on a real device
The in-app how-to tour shown on first launch (1/10)View full size (new tab)
Phone screen The in-app how-to tour shown on first launch (1/10)
Settings: instruction language, distance beeps, aligned sound, vibration and grid linesView full size (new tab)
Phone screen Settings: instruction language, distance beeps, aligned sound, vibration and grid lines

Key Features

Recommend mode
On-device CLIP reads the background with the person masked out to set the target composition, and a 5-step bar picks between person-centred and background-centred.
Custom mode
The user adds several reference photos, and the selected one becomes the target composition.
One-sentence coaching
Checks level (±3°), distance, horizontal position and height in that order, and shows the first one out of range as a sentence in steps (0.6 m) or fists (10 cm), converted using the camera's field of view, with a direction arrow.
Photographer rules
At levels 1–3 of recommend mode, the target is adjusted for head room, frame edges that avoid cutting at joints, and lead room in the direction the person faces.
Sound and vibration feedback
Beeps speed up near the target, and a ding, a vibration and a yellow shutter ring signal when to press the shutter.
Three instruction languages
Instructions can be switched between Korean, English and Japanese.
Full-quality saving
Portrait or landscape is detected automatically, and the photo is saved at full resolution, exactly as previewed, to a GUDORY album.

Tech Stack

Language

Dart
The whole app: camera, coaching, recommendation and settings
Python
Training-photo filtering, recommendation asset generation and the recommender v2 training pipeline

Mobile

Flutter
Screens, capture and saving of the Android camera app
Riverpod
Wiring the camera, coaching and recommendation modules through providers

AI

Google ML Kit
Pose detection on live frames and reference photos, and person masking with Selfie Segmentation
ONNX Runtime
Running the CLIP model on the device to embed the background
CLIP
Turning the person-masked background into a vector used as input for composition recommendations
scikit-learn
PCA, logistic and ridge regression for recommender v2

Libraries and Tools Also Used

AI

MediaPipe
Pose and person detection filters for training photos

Other projects using the same technologyLocal QuestDayce

Architecture

One Flutter app joins the camera, feedback, coaching and scene recommendation modules through shared interfaces, assembled with Riverpod providers. Camera frames go through ML Kit pose detection and are compared with the target composition in the coaching engine; the target comes from CLIP background analysis (recommend mode) or reference photo analysis (custom mode). There is no server: all inference runs on the device, and an offline Python pipeline builds the recommendation data in advance.

Problems & Solutions

  1. Problem

    The release APK crashed at launch while debug builds worked

    Solution

    Traced it to R8 stripping WorkManager's Room database constructor and added ProGuard keep rules

  2. Problem

    Locking capture orientation to landscape made the preview wobble

    Solution

    Always captured in portrait and rotated landscape photos when saving

  3. Problem

    Camera frames were copied even with no consumer, causing frequent garbage collection

    Solution

    Ran the analysis frame stream only while something listens

  4. Problem

    The first recommender (v1) put the person in the centre most of the time (83.8% on a 500-photo set)

    Solution

    Recommender v2 keeps the side the person stands on and learns only the distance from centre, cutting centred picks to 6.6% on the same 500 photos, which v2 never trained on

Outcomes

  • Presented and demoed at the InThon 2026 hackathon, hosted by the Korea University College of Informatics
  • Released Android APK v0.1.0 on GitHub Releases
  • 235 app tests passing (run on 2026-11-02)

Learnings

  • This was my first project that recognises people through the camera, and I learned that the visible preview, the analysis frames and the saved photo must share one coordinate space for the guidance to match the result.
  • I learned that an app that works in debug can still fail after release-build optimisation, so release builds need checking on a real device.
  • Defining the interfaces first and starting each module from a stand-in implementation let four people develop at the same time.