
FormCoach
핸즈프리 AI 운동 자세 코치
FormCoach는 아이폰 카메라만으로 운동 자세를 실시간 분석하고 음성으로 피드백을 주는 온디바이스 AI 코치입니다. Apple Vision의 3D 신체 포즈 추정으로 관절 각도를 측정해 스쿼트·푸시업·런지·데드리프트·오버헤드프레스 5종의 자세를 교정하고, 정렬·가동범위·좌우대칭·안정성 4개 축으로 점수를 산출합니다. 운동 중 손을 댈 필요 없이 음성 명령으로 세트를 넘기고 점수를 들으며, 모든 영상·음성 처리는 기기 내에서만 이루어져 서버로 전송되지 않습니다.
혼자 운동하면 자세가 무너져도 알아채기 어렵고, 트레이너를 매번 고용하기엔 비용이 큽니다. FormCoach는 카메라 앞 몇 미터 떨어진 곳에서 운동하더라도 화면을 터치하지 않고 음성만으로 실시간 자세 피드백을 받게 해 핸즈프리로 안전하게 운동할 수 있게 합니다.
앱 미리보기
무엇을 할 수 있나요
온디바이스 3D 자세 추정
Apple Vision의 VNDetectHumanBodyPose3DRequest를 전용 처리 큐에서 비동기로 실행해 카메라 프레임에서 17개 관절의 3D 위치와 2D 화면 좌표를 추출합니다. 모든 추론은 기기에서만 실행되며, 코어 관절(엉덩이·무릎·척추)에 더 높은 신뢰도를 부여합니다.
simd 기반 관절 각도 계산
simd 3D 벡터 내적과 acos로 무릎·팔꿈치·엉덩이·어깨 굴곡각을 구하고, 척추 수직 편차·상체 기울기·무릎 valgus(안쪽 무너짐) 각도까지 산출합니다. 좌우 관절의 비대칭 지수도 함께 계산합니다.
다차원 룰 기반 폼 점수
운동별 이상 각도 범위와 임계치를 정의한 룰 엔진이 동작 단계(phase)별 편차를 측정해 critical/high 우선순위 피드백을 생성하고, 정렬·가동범위·좌우대칭·안정성 4개 축을 운동별 가중치로 합산해 0~100점 자세 점수를 냅니다. ML 모델이 아닌 Vision 추정값에 기반한 결정적 룰 엔진입니다.
상태 머신 렙 카운팅
추적 관절 각도의 변화를 idle→하강→바닥→상승→정점 5단계 상태 머신으로 추적해 반복 횟수를 자동 집계하며, 굴곡 운동과 오버헤드프레스(신전)의 방향을 구분하고 쿨다운으로 중복 카운트를 방지합니다.
핸즈프리 음성 명령
SFSpeechRecognizer를 actor로 감싸 requiresOnDeviceRecognition으로 구동하고, "next set"·"pause"·"stop"·"score" 같은 명령을 한국어/영어 파서로 인식합니다. 디바운스로 중복 발화를 거르고, 음성 코칭 중에는 입력을 일시 억제해 자기 목소리 오인식을 막습니다.
음성 코칭 안내
AVSpeechSynthesizer 기반 음성 코치가 기기 언어를 자동 감지해 자세 교정·렙 카운트·세트 완료·격려 메시지를 말로 전달하며, 관절 그룹별 쿨다운으로 과도한 반복 안내를 막고 .duckOthers로 배경 음악 볼륨을 낮춥니다.
발열·배터리 적응 처리
기기 발열 상태와 배터리 잔량에 따라 포즈 추정 프레임레이트(15~30fps)를 동적으로 낮추고, JointSmoother(지수이동평균)로 관절 흔들림을 완화해 긴 세션에서도 발열과 배터리 소모를 억제합니다.
기록·추세·성취 추적
SwiftData로 세트 결과·개인 기록·스트릭을 영구 저장하고 Swift Charts로 추세를 시각화하며, 성취 배지를 제공합니다. 무료 티어는 일일 세트 수·기록 열람·장기 추세에 제한이 있고 Pro 구독으로 해제됩니다.
어떻게 만들었나요
Language
UI
Vision & Geometry
Audio & Speech
Data & Commerce
Build & Tooling
Testing
프로토콜 지향 의존성 주입(ServiceContainer)으로 모든 기기 서비스(카메라·포즈·폼분석·렙카운트·음성코칭·음성명령·저장·구독·성취·알림)를 추상화하고, 실기기 구현과 Mock 구현을 1:1로 분리한 Clean Architecture + MVVM 구조입니다. 전 영역이 온디바이스로 동작하며 영상·음성이 외부로 전송되지 않습니다.
- 1
프로토콜 기반 ServiceContainer로 10개 서비스를 의존성 주입 — 실기기(makeDevice)와 Mock(shared) 구현을 교체 가능하게 분리해 테스트·프리뷰·시뮬레이터 스크린샷을 단순화
- 2
온디바이스 프라이버시 우선 설계 — Vision 포즈 추정과 SFSpeech 음성 인식 모두 requiresOnDeviceRecognition으로 처리하고, 온디바이스 미지원 로케일에서는 클라우드 업로드 대신 빈 스트림을 반환해 영상·음성이 기기를 벗어나지 않음
- 3
핸즈프리 UX 폐루프 — 카메라 프레임 → 3D 포즈 추정 → simd 각도 계산 → 룰 기반 다차원 분석 → 음성 코칭/음성 명령 제어가 화면 터치 없이 순환하며, 코칭 발화 중에는 음성 명령 입력을 억제해 자기 음성 오인식을 차단
- 4
폼 분석은 ML 모델이 아닌 결정적 룰 엔진 — Vision 3D 추정값을 운동별 이상 각도 범위·임계치와 비교하고, 정렬·가동범위·좌우대칭·안정성을 운동별 가중치로 합산해 설명 가능한 점수를 산출
- 5
구독 게이팅 — StoreKit 2 Transaction.updates/currentEntitlements 스트림으로 티어를 관찰하고, 무료 티어의 일부 운동·일일 세트 수·기록 열람·장기 추세를 게이팅하며 intro offer 자격을 검사
- 6
절제형 페이월 정책(PaywallTriggerPolicy) — 점수가 상승한 운동 완료 직후라는 최고 전환 시점에만 페이월을 띄우되, 첫 완료 후 3회 완료 쿨다운을 둬 "too pushy" 리뷰를 방지하는 순수 값 타입으로 단위 테스트가 용이
- 7
Swift 6 strict concurrency 전면 적용 — actor 격리, Sendable, AsyncStream으로 카메라·음성·구독의 비동기 이벤트를 동시성 안전하게 처리하고 SPM + XcodeGen으로 프로젝트를 선언적으로 관리
659
단위 테스트
37
UI 테스트
104
Swift 소스 파일
5
지원 운동
17
분석 관절
4
점수 차원



