Google Mediapipe의 Holistic을 사용한 미니 프로젝트를 진행했다.
공부나 작업을 하면 노트북으로 작업을 하는데,
노트북의 웹캠을 사용하여 자세를 교정하자는 아이디어를 제안 받았다.
https://google.github.io/mediapipe/solutions/holistic.html
Holistic은 기존 Mediapipe의 Multi-hand, Pose, Face-Mesh를 합쳐놓은 모듈이다.
Face-Mesh의 턱 좌표와, 양 어깨 좌표의 중심과의 거리를 측정한다.
작업을 하다가 거북목이 되어 그 거리가 짧아지게 되면, 거북목이라고 생각하고, 알림을 제공하도록 했다.
win10toast 라이브러리를 사용하여 알림을 제공하도록 하였다.
해당 프로젝트를 공유해 본다.
https://github.com/updaun/Holistic.git
먼저 프로젝트 소스를 다운로드 받아 압축을 해제한다.
압축을 해제하고 폴더를 열어 들어간다. (requirments.txt 파일이 있는 곳까지 들어간다.)
해당 파일 탐색기의 주소창에 "cmd" 라고 입력하면 해당 경로의 명령 프롬프트를 쉽게 열 수 있다.
방금 다운로드 받은 소스 위치의 cmd 창을 열 수 있다.
기본적으로 Python이 설치되어 있어야 한다.
cmd 창에 ' python ' 이라고 입력하여 파이썬이 설치되어 있는지 확인한다.
python
만약 설치되어 있지 않다면, 아래의 글을 먼저 읽고 설치하도록 하자!
https://updaun.tistory.com/entry/python-python-low-version-install
파이썬 버전은 3.7 이상 버전을 사용하도록 하자.
설치된 것을 확인했다면, ' exit() ' 를 입력하여 파이썬을 종료한다.
>> exit()
프로젝트에 필요한 라이브러리를 설치해보자.
pip install -r requirments.txt
명령어를 입력하면 OpenCV, Mediapipe, win10toast 등 필요한 라이브러리를 모두 다운로드 받게 된다.(약 2분 소요)
설치가 되었다면, Python을 사용하여 프로그램을 동작시켜보자!
[ 데모 1 실행 ]
python Holistic_turtleneck_demo.py
첫 번째 데모 프로그램은 단순히 턱과 어깨 중심 사이의 거리만 측정한다.
그런데, 웹캠과 조금 멀어지게 되면 거리가 줄어든 것으로 인식되어 거북목으로 감지되었다.
거리가 줄어든다면, 윈도우 토스트 알림이 올 것이다.
[ 데모 2 실행 ]
python Holistic_turtleneck_demo_2.py
mediapipe 에서 제공하는 z value를 사용하여 웹캠과의 거리를 추측하고
거리에 따라 감지되는 임계치를 변경하도록 하였다.
거북목 자세를 취하면 토스트 알림이 올 거이다.
[ 실사용 버전 실행 ]
python Holistic_turtleneck_noimgview.py
print문 및 mediapipe의 draw 기능을 지워 연산 속도를 올렸다.
opencv의 imshow를 제거하여 웹캠을 작동하지만 사용자에게 보여지지는 않는다.
이 프로그램을 켜놓고 작업을 진행한 결과, 중간 중간 자세를 바르게 하라고 알림이 와서 나름 효과적이었다.
향후 보완사항
- z value를 더욱 효과적으로 사용하여 현재 목의 길이로만 측정되는 부분을 보완하고자 한다.
- 코의 3차원 좌표와 어깨의 3차원 좌표 값의 차이를 추가적으로 활용해볼 예정이다.