Skip to content

feelwjd/MyPT-Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

170 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyPT-Server

Client & Data Analysis

Android Client

Python Data Analysis with Tensorflow

2021 졸업 프로젝트 완료보고서

홈 트레이닝 보조 앱 MyPT

image

2021. 11. 01. 월

홈 트레이닝 앱 MyPT

컴퓨터공학과

201735960 박상현

201735951 민정필

201735993 유동훈

201735991 오제민

201736024 전규현

목차

1.프로젝트 개요

1.1 프로젝트 주제 3

1.2 서비스 개요 3

1.3 주요 기능 3

1.4 일정 및 업무 분담

2.관련 지식 및 적용 기술

2.1 관련 지식 및 적용 기술 5

3. 시스템 구축

3.1 개발환경 6

3.2 (Android Studio) 개발 환경 6

3.3 시스템 구성 8

5. 결 론

5.1결 론 및 기대사항 19

참 고 문 헌 20

  1. 프로젝트 주제

    개인 헬스 매니저를 담당할 수 있는 헬스 앱 개발.

1.2 서비스 개요

코로나로 인한 제한된 취미생활, 반복되는 홈 라이프에 따른 홈 트레이닝에 관심을 가지고 있는 현대인들의 증가. 이에 맞게 운동이 습관이 된 사람들 만을 위한 기존의 헬스 앱과 차별점을 두어 숙련자 및 초심자 모두가 사용가능한 헬스 앱을 개발하고자 함.

1.3주요 기능

  • 로그인 / 회원가입
  • 일별 루틴 기록 기능
  • 루틴 자동생성 서비스
  • 커뮤니티 기능 (좋아요 댓글)
  • Before / After 비교 서비스
  • .루틴별 타이머 생성 기능

■개발 일정

image

<그림 1> 개발 일정

■업무 분담

<표1> 업무분담

이름 학번 주요 개발 기능
박상현 201735960 메인페이지 제작 및 기술 타이머페이지 제작 및 기술
민정필 201735951 데이터 베이스 제작 및 연결 개발환경 구축 AI 관련 기술 서버개발 및 API 배포 안드로이드 스튜디오 DB 연결 안드로이드 스튜디오 MVC 구조 구축
유동훈 201735993 마이페이지 제작 및 기술 루틴 연결 및 연동
오제민 201735991 데이터 베이스 제작 및 연결 AI 관련 기술 서버개발 및 API 배포
전규현 201736024 로그인 / 회원가입 제작 및 기술 커뮤니티 페이지 제작 및 기술

image

2-1.관련 지식 및 적용 기술

Java

객체지향 프로그래밍 언어로써, 안드로이드 스튜디오와 높은 호환성을 자랑하며, 플랫폼에 독립적인 구조상 다른 운영체제 및 하드웨어 개발환경에 구애받지 않고 동일하게 실행이 가능합니다.

안드로이드 앱 개발에 있어, 코틀린언어와 자바의 선택지가 있었으나, 교육 과정에 있던 자바를 활용해보고자 자바를 택하였습니다. 또한 안정적인 오픈소스는 주로 자바로 이루어져 추후 유지 및 보수에 뛰어난 모습을 보여줄 것으로 기대됩니다.

Node.Js

인공지능이 탑재되며, 루틴이 수시로 바뀔 수 있는 MyPT앱의 구조상 서버에 부담이 갈 수 있지만, nodejs는 이벤트 기반 비동기방식이라 서버의 무리를 줄여줄 수 있습니다.

짧은 개발 기간에 개발하기 좋은 환경이 구축되어 있으며, 응답속도 또한 빨라 MyPT앱에 어울리는 서버라고 판단하였습니다.

Android Studio

안드로이드는 가장 대표적인 스마트폰 운영체제입니다. 자바와 마찬가지로 교육과정에 있어 접근성이 높았으며, 자바로 개발을 할 수 있다는 장점이 있습니다.

TensorFlow

텐서플로우는 머신러닝을 위한 앤드 투 앤드 오픈소스 플랫폼으로, 모델 빌드를 쉽게 도와주며, 접목하여 어플리케이션에 접목이 가능하다는 장점이 있습니다. MyPT는 사용자의 운동 습관을 비교 분석하여 자동으로 사용자의 다음 루틴을 제안하며 사용자만의 개인 비서가 될 것입니다.

Git / Github

협업에 특화된 코드 호스팅 플랫폼으로써, 조원 간에 액티비티의 공유를 도와주며, 자칫 에러가 생길 수 있는 위험을 대신 감지하여 Merge를 통해 안전하게 코드를 옮겼습니다.

3. 시스템 구축

3.1 개발환경

Device
H/W 박상현 CPU: I7 6700HQ RAM: 16GB 민정필 CPU: AMD Ryzen 7 RAM: 16GB 유동훈 CPU: I5 6200U RAM: 4GB 오제민 CPU: I7 7500U RAM: 8GB 전규현 CPU: I5 7400U RAM: 8GB
S/W O/S Window 10 Language: JAVA, JS, Python, Android Programming,
Tools Tool : Android Studio DB : Node,js DB ETC : TensorFlow , AWS

■Android Studio 환경설정

BuildToolVerSion : 30.0.3

CompileSdkVersion : 30

MinSdkVersion : 30

TargetSdkVersion : 30

Gradle version : 4.0.2

MaterialDesignVersion : 1.4.3

RetrofitVersion : 2.8.1

■NodeJS 환경설정

image

Cookie-parser -쿠키를 쉽게 관리할 수 있게 하였다.

Express - 빠른 API를 작성하였다.

Graphic Magick (gm) - 이미지를 재작성하고 편집하였다.

Multer – 이미지 및 파일을 받아서 유용하게 관리.

3-3 시스템 구성

■ 정보 구조도 image

<그림 3> 정보 구조도

image

<그림4> USECASE

■ MySQL 구조

테이블 구조

image

image

<그림2-1> UserRoutine 테이블 DB 구조

<그림2-1>은 routine 테이블안에 저장되어 있는 routineid 값과 users 테이블에 유저 아이디를 같이 외래키로 가져와서 같은 테이블에 묶어 만든 UserRoutine 테이블입니다. UserRoutine 테이블로 사용자의 운동루틴을 만든 날짜와 시간을 저장해줍니다.

image

<그림2-2> routine 테이블 DB 구조

<그림2-2>은routine 테이블을 이용하여 workout에 있는 운동들을 사용자가 루틴을 만들거나 루틴을 추천 받아서 자신만의 루틴을 RoutineWorkout 테이블에 저장하고 routine 테이블에 사용자들의 루틴에 대한 설명이 저장된다.

image

<그림2-3> UserRoutineWorkout DB테이블 구조

<그림2-3> UserRoutineWorkout 테이블로 사용자가 각각 운동 루틴안에 무슨 운동이 있는지 저장되어있는 테이블입니다. 이 테이블로 하여금 사용자의 운동을 판별하여 유기적으로 묶어서 루틴 변경을 더 원활하게 해줍니다.

image

<그림2-4> calories DB테이블 구조

<그림2-4> calories 테이블은 유저가 타이머를 통해서 운동을 몇분동안 했는지 확인해서 운동한 날에 얼마나 많은 칼로리를 소모했는지 저장해주는 테이블입니다.

image

<그림2-5> UserBeforeAfter DB 테이블 구조

<그림2-5>UserBeforeAfter 테이블은 회원가입때 넣었던 자신의 몸 상태와 운동하면서 바뀌어가는 몸 상태의 사진, 바뀐 몸무게, 바뀐 키가 저장되는 테이블입니다.

image

<그림2-6> community DB 테이블 구조

<그림2-6> Community 테이블은 커뮤니티페이지의 테이블로 사람들이 자신이 운동한 루틴과 그 루틴에 대한 자신의 설명을 저장하여 공유해주는 테이블이며 그 루틴이 좋아 보이고 사람들의 좋아요를 받을 수 있습니다.

■ Node.js 구조

image

- users

Mysql DB와 연결하여 회원가입, 로그인, 로그아웃, 회원탈퇴를 할 수 있습니다.

-func

칼로리를 계산하는 calories_cal 기능은 캘린더에서 운동을 시작하게 되면 운동시간을 받아와 운동 칼로리를 계산합니다.

-mypage

회원가입을 할 때 저장한 사용자의 이미지를 불러와 사용자가 애프터 사진과 비교할 수 있습니다. beforeafter 기능은 이미지를 비교할 수 있게하고, beforeafter_change 기능은 이를 수정할 수 있게 합니다. Produce_routine기능은 사용자가 운동루틴을 만들면 루틴을 생성하는 기능입니다. 사용자가 루틴을 삭제하고 싶을때에는 /delete_routine을 사용하여 db에 저장되어있는 루틴을 삭제할 수 있습니다. /set_routine 기능으로는 사용자가 루틴을 만들었으나 맘에 들지않아 수정하고 싶을 때 수정할 수 있게 해줍니다.

-commu

맨처음 커뮤니티 페이지에 들어 갔을 때 /share_show_all 기능을 통해 사람들이 공유한 운동 루틴들을 인스타 형식으로 볼 수 있습니다. 커뮤니티 공유를 할 때 /share 기능으로 자신이 운동한 루틴과 함께 사진을 올릴 수 있습니다. 올린 운동이 좋았다면 heart 기능을 이용해 좋아요 버튼을 누를 수 있게 해줍니다.

-shareimage

GraphicsMagick툴을 이용하여 사용자가 운동루틴을 선택하면 MyPT로고와 사용자의 운동루틴에 해당하는 운동들을 리스트형태로 사용자가 업로드하는 이미지에 덮씌워서 감성있는 이미지를 제공합니다.

-api

/routine 으로 모든 사람의 루틴을 불러오게 해줍니다.

/user 유저의 정보를 다 불러와주는 역활을 합니다.

운동 목록을 볼 때 /workout 으로 운동들의 모든 내용들을 확인 할 수 있게 해줍니다.

/workout-class는 운동들의 맨몸운동인지 기구를 이용하는 운동인지 확인해줍니다.

/routine-workout 은 루틴들과 그 각각 루틴에 들어있는 운동을 알려줍니다.

/user-routine-workout은 사용자의 routine과 workout의 데이터를 불러와줍니다.

/routine-info는 사용자에 따른 루틴의 필요한 정보를 출력해줍니다.

■ Tensorflow

image

Node.js의 routine-info API를 받아와 사용자의 운동 루틴을 판별합니다.

루틴의 운동목록을 DB의 workout 테이블과 비교를 해 라벨 값으로 받아옵니다.

Ex) 하체 – 둔부운동(11), 앞다리운동(12), 뒷다리운동(13), 허벅지 안쪽운동(14), 종아리운동(15)

가슴 – 중간 가슴운동(21), 윗가슴운동(22), 밑 가슴운동(23), 가슴 안쪽운동(24)

등 – 광배근(31), 등 안쪽운동(32), 승모근운동(33), 기립근운동(34)

어깨 – 전면 삼각근(41), 측면 삼각근(42), 후면 삼각근(43)

image

사용자의 루틴을 동일한 크기의 ndrray형식으로 reshape한 후, 10번대 운동이 많으면 1, 20번대 운동이 많으면 2, 이런 형식으로 라벨 값을 정하여 학습시킵니다.

image

image

학습된 모델을 가지고 사용자의 루틴에 해당하는 파트를 라벨로 표기하고, 사용자의 루틴에서 1번 라벨이면 10번대 운동을 제외하고 데이터를 0으로 바꿉니다. 그러고 루틴을 1의 자리로 바꿉니다.

image image

이제 사용자의 루틴은 중요도를 판단하는 리스트가 되었습니다.

리스트의 평균값이 루틴의 중요도입니다. 위 그림의 두번째 리스트의 값을 예를 들면, 리스트의 평균은 3입니다. 그러면 10번대에 해당하는 데이터프레임에 3을 1로 올립니다.

부위 1회차 2회차 …. N회차
1 (둔부) 0 0 0
2 (앞다리) 0 0 0
3 (뒷다리) 1 0 0
4 (허벅지 안쪽) 0 0 0
5 (종아리) 0 0 0

여기서 중요도란, 운동을 추천할 때 기준이 되는 척도입니다.

운동을 추천할 때 3을 제외하고 모두 0 이면, 1번 둔부 운동부터 추천합니다.

인덱스 값에 해당하는 값이 모두 같으면 다음 회차로 넘어갑니다.

사용자의 전체 운동 리스트를 판별하여 각 부위별로 데이터를 측정하여 학습합니다.

image image

Workout 테이블의 workoutclass를 비교하여 0 (지근 운동) 1 (속근 운동)으로 분류합니다.

이 리스트는 지근운동, 속근운동의 비율을 판단하는 리스트입니다.

부위 지근 속근
가슴 30% 70%
50% 50%
하체 50% 50%
어깨 50% 50%
이두 50% 50%
삼두 30% 70%

위의 리스트를 평균 내어 위의 표를 기준으로 학습시켜 추천하는 운동의 지근, 속근 운동비율을 맞춥니다.

위의 과정을 담은 학습데이터로 모델을 만들어 안드로이드에서 사용가능한 tflite파일로 만들어 적용시킵니다.

image

■ User Flow

image

<그림 4> 유저 플로우 (로그인 서비스)

앱 실행시 보여지는 로그인/회원가입 화면을 통해 시작하여, 회원일시 앱 시작을, 아닐시 회원가입을 통해 앱 실행이 가능하다.

image

<그림 5> 유저 플로우(메인 서비스)

메인화면의 유저는 달력과 함께 디비에 연결되어 날짜에 해당되는 루틴정보를 확인이 가능하다. 루틴정보가 없을시 마이페이지에 있는 루틴추가 기능 및, 추천 루틴을 제공받을 수 있다. 해당 루틴을 확인 후 운동 시작을 통해 타이머가 출력된다. image

<그림 6> 유저플로우 (마이페이지)

운동 초기 당시의 Before사진 After 사진을 비교할 수 있는 갤러리 형식, 개별 루틴 및 AI루틴을 설정, 커뮤니티 이동으로 나뉘어져 있는 마이페이지.

image

<그림 7> 유저플로우 (커뮤니티)

개인 사진 업로드를 지원하며, 희망하지 않아도 다른 사용자의 사진 열람 및 이에 따른 코멘트등록이 가능한 커뮤니티 페이지.

4.1결 론 및 기대사항

여러 운동 어플리케이션들을 비교분석 해본 결과, 기존의 운동 어플들은 이미 체계적인 루틴이 잡혀, 헬스장에서 운동하는 매니아층을 대상으로 한 어플들이 많았다.

하지만 정작 홈 트레이닝을 시작하려는 일반인들은 아는 운동 가짓수가 적을 뿐 더러, 2,3일 팔굽혀펴기 몇번 하다가 포기하는 경우가 많다.

따라서 MyPT는 이미 운동을 즐기고 있는 고급자들은 개별 루틴설정을 통해 본인만의 리듬을 가지고 운동 할 수 있게 도와주며, 무엇을 할지 모르는 초심자들을 대상으로는 TensorFlow를 통한 운동 루틴을 추천해주며 간편하게 운동습관 및 운동계획을 바로잡아주는 어플리케이션이 되겠다.

추후 업데이트가 이루어진다면 8주동안 시간이 모잘라서 방대한 루틴별 상세 운동 방법, 자세 등 추가하지 못하였던 점을 보완하여, 각 루틴별 애니메이션등을 통한 제시가 이루어지면 더 좋았겠다고 생각했습니다.

5명 모두가 한마음 한뜻으로, 교육과정에서 한 학기간 다루는 내용으로는 기술적으로 개발하기 힘든 면이 더 많았지만, 최대한 자바, 웹프로그래밍, 디지털컨텐츠기획, 안드로이드개발, 데이터베이스 등등 교과목에 맞는 기술들을 최대한 사용하여 한 프로젝트로 의미있는 8주를 보낸 것 같아 뿌듯합니다.

참고문헌

Node.js

https://nodejs.org/ko/docs/

npm

https://docs.npmjs.com/about-npm

Retrofit

https://square.github.io/retrofit/

자바

https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)

텐서플로우

https://www.tensorflow.org/?hl=ko

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors