.. Cover Letter

ㅇ 프로젝트/TEAM_운동보조프로그램

1. 미디어 파이프에서 배경없이 Pose만 추출하기

BrainKimDu 2023. 1. 15. 14:40

생각보다 결과가 잘나왔다.

미디어 파이프가 굳이 GPU를 사용하지 않아도 스켈레톤을 검출하는데 문제가 없었다.

 

도큐먼트에서 배포하는 코드를 돌리면

배경과 함께 Pose가 detection된다.

 

 

 

여기서 두가지 구현방향을 생각해볼 수 있었다.

1. 각 관절의 point (좌표값)을 pandas를 통해 EDA하여 딥러닝을 시켜 자세의 정확도를 측정한다.

-> 코드의 알고리즘이 복잡해짐은 물론, 좌표계로 접근하기 때문에 사람의 위치가 바뀐다면, 문제가 발생한다.

-> 그러나 자세에 대한 피드백이 가능해진다.

 

2. 백그라운드를 제거하고, pose만 남겨 CNN을 돌린다.

-> 굉장히 매력적인 방법이였다. 난이도가 낮아짐은 물론 사람의 위치가 바뀌는 문제는 사라진다.

-> 그러나 객체를 검출하는 것이기 때문에 자세에 대한 피드백이 불가능해져 다른 코드가 추가되어야한다.

 

 

 

일단 조원과 2번의 방법으로 결정하고

바로 진행을 했다.

 

먼저 검정색 화면을 어디선가 주워와서

 

이걸 배경과 바꿔치기 하는 방식으로 구현했다.

 

import cv2
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_pose = mp.solutions.pose

cap = cv2.VideoCapture(0)
with mp_pose.Pose(
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5) as pose:
  while cap.isOpened():
    success, image = cap.read()
    if not success:
      print("Ignoring empty camera frame.")
      # If loading a video, use 'break' instead of 'continue'.
      continue

    # To improve performance, optionally mark the image as not writeable to
    # pass by reference.
    image.flags.writeable = False
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = pose.process(image)

    # Draw the pose annotation on the image.
    image.flags.writeable = True
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)

	# 도큐먼트에서 수정한 부분
    img = cv2.imread("./black.jpeg")
    # 카메라의 성능에 따라 바뀔 수 있는 부분이다.
    img.resize(480, 640, 3)
    

    mp_drawing.draw_landmarks(
        # 도큐먼트에서 수정한 부분
        img,
        results.pose_landmarks,
        mp_pose.POSE_CONNECTIONS,
        landmark_drawing_spec=mp_drawing_styles.get_default_pose_landmarks_style())
    # Flip the image horizontally for a selfie-view display.
    cv2.imshow('MediaPipe Pose', cv2.flip(img, 1))
    if cv2.waitKey(5) & 0xFF == 27:
      break
cap.release()

 

이를 돌리면 이렇게 나온다.

 

뭔가 뭔하는 결과가 나왔다.

조원님께서 흰화면으로 하지 말라고 했는데, 선이 하얀색이였구나..

 

 

결과에 대해서는 자체녹화를 했어야했는데

그거는 구현을 못해서 일단 카메라로 얼릉 찍어버렸다.

 

 

 

헬스를 잘하는 형한테 스쿼트와 팔굽을 부탁해서 얻어낸 결과

첫 번째는 스쿼트

 

 

두 번째는 팔굽

 

 

생각보다 결과가 너무 잘나와서 놀랐다.

 

 

 

이제 조원들 스쿼트, 팔굽하는거를 찍고

이대로 캡처해서 프레임별로 분할시켜서 

욜로로 라벨링을 하고

돌리면 될꺼같다는 생각