본문 바로가기

Project

[안드로이드] 클라이밍 자세 피드백 앱 preview

 안녕하세요, 이지훈입니다.

오늘은 현재 진행 중인 프로젝트 프리뷰입니다. 근데 이제 취미를 곁들인...

 

저는 사실 클라이머인데요, 작년 8월부터 실내 볼더링을 시작하여 어쩌다 보니 클라이밍장 주말 스텝으로 근무 중입니다.

평일에는 학업을 병행하는 중이지만 막학기라 할 만 하네요. (지난 학기에는 좀 힘들었습니다.)

 

등반도 나름 잘해요. 최근에는 서울숲 최고난이도인 검정난이도를 완등해서 뿌듯합니다.

 

 

강습 중인 나에 모습... 서울숲클라이밍 잠실점 많관부

 

 

모든 사람이 그렇겠지만, 특히 클라이머들에게 '더 잘하고 싶다'라는 욕망은 더욱 짙은 것 같습니다. 

개인적으로는 클라이밍은 취미로써 다치지 않고 꾸준히, 즐겁게 등반하는 것이 잘하는 것이라 생각하지만,

그런 저도 사실 실력을 높이고 싶은 욕심이 가득합니다.

 

잘하기 위해서는 강사에게 강습을 받을 수도 있고, 클라이머 지인 찬스도 있으며, 유튜브를 통해 독학하는 분도 계실 겁니다. 저는 이 전에 헬스를 할 때 PT는 너무 비싸서 유튜브로 운동을 배우던 습관이 있어서, 주로 유튜브를 통해 배운 기술들을 혼자 연습해 보며 실력을 높여나갔던 것 같습니다.

 

그러던 중, 저번 학기에 컴퓨터비전 수업을 너무 재미있게 수강하였습니다.

취미인 운동과 전공 지식을 결합할 엣지가 없어 진로를 항상 고민하며 살았는데, 실선이 생긴 느낌이었습니다.

 

그래서 생각해낸 이번 프로젝트 주제가 Movenet을 이용하여 사용자의 신체 골격 데이터를 추출하여 클라이밍 등반 자세를 피드백해주는 앱입니다. 세상에 없던 서비스가 탄생하는 순간입니다.

 

 

Climate 앱

 

 

위 사진은 저희의 프로젝트에 대한 간단한 소개 페이지입니다. 사용자가 자신의 등반 영상을 입력하면, 잘못된 자세에 대한 피드백을 제공하여 알려주며 자신의 등반 및 피드백을 기록화할 수 있습니다. 초심자를 주 고객층으로 타겟하였으며, 가이드북을 같이 제공합니다.

 

Android studio를 플랫폼으로 한 앱이며, tensorflow에서 제공하는 Movenet API를 사용합니다. 서버는 따로 없는 local processing app이며, DB로 SQLite를 사용하였습니다. 이름은 클라이밍 친구를 의미하는 Climate로 정했습니다. 

 

팀원은 저를 포함하여 3명입니다.

 

 

앱 구조

 

 

앱 구조도입니다. 구현한 안드로이드 스튜디오 프로젝트 내부 클래스 설계를 따랐습니다.

 

 

동작 로직

 

 

동작 로직은 위와 같습니다. 사용자가 입력한 자신의 등반 영상을 time slice 만큼 자른 이미지 프레임의 시퀀스를 생성합니다. 이를 전처리하여 Movenet API를 통해 각 프레임에 골격 데이터를 씌워주고, 피드백 모듈에서 유효한 데이터를 파악하여 피드백을 진행합니다. 이렇게 나온 피드백 데이터는 일자 별로 정리하여 저장할 수 있으며, 기록 확인도 가능합니다. 캘린더 상에서 원하는 날짜를 선택하여 상세 기록 확인이 가능합니다. 

 

 

기능적 요구사항 명세

 

 

사용자에게 제공할 기능적 요구사항에 대한 명세입니다.

 

 

Climate

 

 

위는 현재 개발 중인 Climate의 실행 화면들입니다.

 

 

클라이밍의 기본이자 모든 것이라고 할 수 있는 자세가 있습니다. 바로 3지점 자세입니다. 3지점 자세를 판단하기 위하여 사용자가 홀드를 잡은 손의 좌우로 발이 치우쳐져있지는 않은지, 3지점 내부에 사용자의 무게중심이 위치해 있는지 등을 핵심적으로 판단하고 부가적으로 팔을 너무 굽히지는 않았는지 등의 사항들을 더하여 등반 자세를 검사합니다.

 

 

삼지점 및 무게중심 시각화

 

 

위의 사진에서 왼쪽 이미지는 Movenet을 통해 추출하는 17개의 관절 데이터에서 3지점 및 무게중심을 표현한 것이고, 오른쪽 이미지는 실제 영상에서 추출한 3지점 및 무게중심 프레임입니다. 무게중심은 특히 골반에 가중치를 둔 관절들의 가중치 합으로 계산했습니다.

 

 

피드백 사항들

 

 

위 3개의 사진에서 등반 영상의 각 프레임이 특정 피드백 사항에 걸렸을 때 피드백이 발생하는 것을 확인할 수 있습니다. 잘못된 자세일 시에는 빨간 선으로 3지점 자세를 나타내어 등반 자세의 안정성을 시각화했습니다.

 

앱의 구조나 피드백 로직을 단순하게 설명해보았습니다.

사실 더욱 복잡한 피드백 로직을 가지고 있고, 등반 전체에 대한 안정성 점수 및 프레임이 튀는 경우의 예외 처리 등이 있지만 생략하겠습니다.

 

현재는 메인 기능 개발 완료 및 테스트 명세서 작성 완료한 단계입니다.

앞으로는 UI 개선 및 일부 코드 보완 및 최적화, 작성한 테스트 명세서를 기반으로 유지보수하며 앱의 완성도를 높일 예정입니다. 여유가 된다면 가이드북도 사용자 반응형으로 만들어보고 싶습니다. 

 

 

흔적 of 나vs나

 

 

프로젝트를 진행하며 많이 부족함을 느꼈고, 하루 종일 logcat을 들여다보며 마음이 꺾이려 할 때도 많았습니다.

기본적인 kotlin 문법부터 낯설었고, html 형식의 string 파일에서 ' 또는 / 등의 문자를 찾느라 시간을 허비하기도 하고, 최적의 time slice를 찾거나 피드백을 위해 제가 아는 클라이밍 지식을 피드백 검사 코드에 녹이는 데에 많은 고민이 있었습니다.

 

 

구현한 feedback 클래스 일부 메소드들

 

 

이를 해결해 나가는 과정에서 스스로 약간이나마 성장함을 느꼈고, 무엇보다 제 전공을 살려 제가 좋아하는 분야를 세상에 없던 서비스로 많은 사람들에게 제공할 수 있다는 앱을 만들고 있음에 뿌듯함을 느끼는 것 같습니다.

 

앞에서도 언급했지만, 취미와 전공을 결합하는 단 하나의 방법을 찾은 것 같아 기쁜 마음으로 프로젝트를 진행하고 있습니다.

 

멋진 앱을 만들어 다시 오겠습니다. 환절기 감기 다들 유의하세요 :)

'Project' 카테고리의 다른 글

[컴퓨터비전] Image Matching System 리뷰  (4) 2024.09.13