꾸준희
Enough is not enough
꾸준희

공지사항

  • 꾸준희 블로그
전체 방문자
2,415,845
오늘
1,788
어제
2,910
  • 분류 전체보기 (592)
    • Book Review (39)
    • Paper Review (23)
    • AI Research Topic (127)
      • Deep Learning (24)
      • Pose Estimation (29)
      • Object Detection (22)
      • Object Segmentation (3)
      • Object Tracking (11)
      • Video Surveillance (4)
      • Action Recognition (6)
      • Stereo Vision (6)
      • 3D Reconstruction (5)
      • Machine Vision (2)
      • Image Processing (11)
      • Dataset (4)
    • AI Development (77)
      • NVIDIA DeepStream (3)
      • NVIDIA TensorRT (30)
      • NVIDIA TAO Toolkit (2)
      • ONNX (9)
      • PyTorch (5)
      • TensorFlow (15)
      • TensorFlow Lite (1)
      • GPU | CUDA | PyCUDA (12)
    • Programming (147)
      • GStreamer | FFmpeg (6)
      • Python (27)
      • C | C++ (15)
      • OpenCV (34)
      • Linux (36)
      • Embedded linux (7)
      • Etc. (22)
    • Computer Science (64)
      • 학부 및 대학원 과목 (22)
      • 선형대수학 및 기타 수학 (9)
      • SQL-D (33)
    • 삽질 기록 (50)
    • 생각 (15)
    • 기타 (50)
      • 참고자료 (30)
      • 좋은 글 (5)
      • 티스토리 (2)
      • 논문 작성 관련 참고 (10)
      • 메모 (0)

블로그 메뉴

  • 👀 CV
  • 🌸 GitHub
  • 💌 LinkedIn
  • 📚 방명록

최근 댓글

  • 넵 저도 여기다 써놓고 두고두⋯
    꾸준희
  • 되게 헷갈리고 볼때마다 찾던⋯
    옐로우씨
  • 아뇨 ㅠ 저도 어디서 가져온거⋯
    꾸준희
  • 앗 감사합니다 🙇🏻‍♀️
    꾸준희
  • 항상 보면서 존경스럽습니다!⋯
    버터미소
08-18 16:12

티스토리

hELLO · Designed By 정상우.
꾸준희

[Pose Estimation] 자세를 분류하는 방법
AI Research Topic/Pose Estimation

[Pose Estimation] 자세를 분류하는 방법

2021. 3. 1. 17:36
728x90
반응형

 

아래 글은 Google 에서 나온 모바일용 ML Kit 의 한 부분인 자세 추정(Pose Estimation)을 이용하여 자세를 분류하는 방법에 관한 것이다. 자세를 분류하는 방법은 딥러닝을 이용하여 어떤 자세인지 분류하는 방법(e.g. CNN을 이용한 자세 분류)과 기계학습 알고리즘 중 하나인 SVM(Support Vector Machine)을 이용하여 자세를 분류하는 방법, 그리고 아래 Google에서 제시해 놓은 각도를 이용하여 자세를 분류하는 방법이 있다.

 

사실 필자가 생각하기에 가장 좋은 방법은 CNN을 이용하여 스켈레톤을 분류하거나, SVM으로 분류하는 것이 정확도 측면에서 좋다고 생각한다. 하지만 아래와 같이 간단하게 구현해 볼 수 있는 방법도 존재하기 때문에 이를 다뤄보고자 한다. 구글에서 제공하는 문서를 거의 번역만 하여 정리한 수준이니, 참고하길 바란다. 

 

 

 

 

제스처 인식(Recognizing gestures) 

 

두 개 이상의 랜드마크 좌표가 서로 가까이 있을 때 제스처 인식이 가능

  • e.g. 손가락 키포인트가 코의 키포인트에 가까우면 사용자가 얼굴을 만지고 있는 가능성이 가장 높다고 추론

 

 

 

 

 

 

 

요가 자세 인식(Recognizing a yoga pose)

 

Warrior  II 요가자세

 

다양한 관절 각도를 계산하여 요가 자세를 식별 할 수 있음

 

  • e.g. 위 요가 자세는 대략적인 신체 부위 각도를 다음과 같이 계산 할 수 있음
    • 양쪽 어깨에서 90도 각도를 가짐
    • 양쪽 팔꿈치에서 180도 각도를 가짐
    • 앞 다리와 허리에서 90도 각도를 가짐
    • 뒤 무릎에서 180도 각도를 가짐
    • 허리에서 135도 각도를 가짐

 

포즈 키포인트를 통해 다음과 같이 각도를 계산 할 수 있음

  • e.g. 오른쪽 앞다리와 허리의 각도는 오른쪽 어깨에서 오른쪽 엉덩이까지의 선과 오른쪽 엉덩이에서 오른쪽 무릎까지의 선 사이의 각도

 

포즈를 식별하는데 필요한 모든 각도를 계산했다면 일치하는 항목이 있는지 확인 가능하며, 아래와 같은 주의 사항이 있음 

 

 

주의 사항

  • x 및 y 만 확인하면 객체와 카메라 사이의 각도에 따라 계산된 각도가 달라짐
  • 최대한 평평하고 직관적인 정면 이미지여야 최상의 결과를 얻을 수 있음
  • z 좌표를 사용하여 알고리즘을 확장할 수 있음

 

 

 

 

 

 

x, y 좌표를 사용하여 두 신체 부위 사이의 각도를 계산 하는 방법은 다음과 같음

 

1. 안드로이드(Android)에서의 랜드 마크 각도 계산 (JAVA)

 

1.1 3개의 랜드마크 사이의 각도를 계산하는 방법 (반환되는 각도가 0도에서 180도 사이인지 확인) 

static double getAngle(PoseLandmark firstPoint, PoseLandmark midPoint, PoseLandmark lastPoint) {
  double result =
        Math.toDegrees(
            atan2(lastPoint.getPosition().y - midPoint.getPosition().y,
                      lastPoint.getPosition().x - midPoint.getPosition().x)
                - atan2(firstPoint.getPosition().y - midPoint.getPosition().y,
                      firstPoint.getPosition().x - midPoint.getPosition().x));
  result = Math.abs(result); // Angle should never be negative
  if (result > 180) {
      result = (360.0 - result); // Always get the acute representation of the angle
  }
  return result;
}

 

1.2 오른쪽 엉덩이의 각도를 계산하는 방법

double rightHipAngle = getAngle(
                pose.getPoseLandmark(PoseLandmark.Type.RIGHT_SHOULDER),
                pose.getPoseLandmark(PoseLandmark.Type.RIGHT_HIP),
                pose.getPoseLandmark(PoseLandmark.Type.RIGHT_KNEE));

 

 

 

2. IOS에서 랜드마크 각도 계산 (Swift)

 

2.1 3개의 랜드마크 사이의 각도를 계산하는 방법 (반환되는 각도가 0도에서 180도 사이인지 확인) 

func angle(
      firstLandmark: PoseLandmark,
      midLandmark: PoseLandmark,
      lastLandmark: PoseLandmark
  ) -> CGFloat {
      let radians: CGFloat =
          atan2(lastLandmark.position.y - midLandmark.position.y,
                    lastLandmark.position.x - midLandmark.position.x) -
            atan2(firstLandmark.position.y - midLandmark.position.y,
                    firstLandmark.position.x - midLandmark.position.x)
      var degrees = radians * 180.0 / .pi
      degrees = abs(degrees) // Angle should never be negative
      if degrees > 180.0 {
          degrees = 360.0 - degrees // Always get the acute representation of the angle
      }
      return degrees
  }

 

2.2 오른쪽 엉덩이의 각도를 계산하는 방법

let rightHipAngle = angle(
      firstLandmark: pose.landmark(ofType: .rightShoulder),
      midLandmark: pose.landmark(ofType: .rightHip),
      lastLandmark: pose.landmark(ofType: .rightKnee))

 

 

 

 

참고자료 : developers.google.com/ml-kit/vision/pose-detection/classifying-poses#java

 

Pose Classification Tips  |  ML Kit  |  Google Developers

With the ML Kit Pose Detection API, you can derive meaningful interpretations of a pose by checking the relative positions of various body parts. This page demonstrates two examples. Recognizing gestures When two or more landmarks are close to each other,

developers.google.com

 

728x90
반응형
저작자표시비영리
  • 카카오스토리
  • 트위터
  • 페이스북

'AI Research Topic > Pose Estimation' 카테고리의 다른 글

[Pose Estimation] Google Research의 MoveNet API  (0) 2022.02.24
[Pose Estimation] NVIDIA TLT의 BodyPoseNet  (0) 2021.06.21
[Pose Estimation] 자세를 분류하는 방법  (13) 2021.03.01
[Pose Estimation] 3D human pose estimation in video with temporal convolutions and semi-supervised training  (2) 2020.12.21
[Pose Estimation] 자세 추정 결과를 정제 하는 방법 (PoseFix : Model-agnostic General Human Pose Refinement Network)  (0) 2020.12.06
[Pose Estimation] EfficientPose : Scalable single-person pose estimation  (0) 2020.11.22
    'AI Research Topic/Pose Estimation' 카테고리의 다른 글
    • [Pose Estimation] Google Research의 MoveNet API
    • [Pose Estimation] NVIDIA TLT의 BodyPoseNet
    • [Pose Estimation] 3D human pose estimation in video with temporal convolutions and semi-supervised training
    • [Pose Estimation] 자세 추정 결과를 정제 하는 방법 (PoseFix : Model-agnostic General Human Pose Refinement Network)
    꾸준희
    꾸준희
    생각과 기록 그리고 발전
    댓글쓰기
    1. AI 꿈나무
      2021.03.01 23:09 신고
      pose estimation 분야를 공부하시는 건가요??
      수정/삭제댓글쓰기댓글보기
      1. 꾸준희
        2021.03.02 08:56 신고
        네 공부하고 있습니다 :)
        수정/삭제
      2. AI 꿈나무
        2021.03.02 13:28 신고
        조회수가 엄청 많으세요!!
        비결이 뭘까요? ㅎㅎㅎ
        수정/삭제
      3. 익명
        2021.03.02 19:45
        비밀댓글입니다
        수정/삭제
      4. AI 꿈나무
        2021.03.02 20:57 신고
        ㅎㅎ 네~
        감사합니다~!
        수정/삭제
    2. 노트북과 한몸
      2021.07.16 22:02 신고
      영상처리 공부를 최근들어 시작하게 됐는데,,이 블로그 보니까 정말 열심히 하고 계신 것 같아요 ㅎㅎ
      공부 방법 좀 알려주실 수 있나요? 예를 들면 책을 보면서 독학한다든지, 인터넷 강의를 본다든지..
      수정/삭제댓글쓰기댓글보기
      1. 꾸준희
        2021.07.16 23:30 신고
        앗 안녕하세요 ㅎㅎ 영상처리 공부는 처음에는 책으로 했다가.. 이것저것 필요한거 개발해보면서는 주로 인터넷 블로그들 많이 봤던 것 같아요! 아실수도 있겠지만 다크프로그래머 블로그 많이 봤어요 전 ㅎㅎ
        그리고 석사 때 pose estimation 전공을 했었어서 ㅎㅎ 논문을 많이 읽었습니당, 근데 요즘 논문 읽어주는 유투버들이 많아서~ 한번 유투브에 관심 있는 키워드나 유명한 논문들 쳐서 한번 보세용!
        수정/삭제
      2. 노트북과 한몸
        2021.07.29 15:36 신고
        그렇군요.. 다크프로그래머 블로그는 몰랐었는데,, 덕분에 알아갑니다 ㅎㅎ
        석사까지 하셨다니 정말 대단하시네요.. 꾸준희님 구독하고 종종 들어와서 참고하겠습니다😊
        친절하게 답해주셔서 감사합니다!
        수정/삭제
      3. 꾸준희
        2021.07.29 21:08 신고
        다크프로그래머 블로그는 아직도 참고가 되고있어요 ㅎㅎ 헤헤
        앞으로 글 더 열심히 올려야겠네용 감사합니다!! 화이팅이에요!!
        수정/삭제
    3. android 초보
      2022.07.03 22:34
      선생님 ㅜㅠ 각도 계산하는 부분 공식 api 그 예제 다운받아서 posedetectorprocessor 부분에 넣었는데
      Type 오류가 계속 나서 어떻게 해야할까요 ㅠ
      수정/삭제댓글쓰기댓글보기
      1. 꾸준희
        2022.07.04 00:35 신고
        정확히 뭐라고 뜨나요?
        수정/삭제
      2. android 초보
        2022.07.04 01:12
        cannot resolve symbol 'type' 이라고 뜨는데 공식홈페이지 예제 다운해서 열면 여러 코드들이 뜨는데 저 각도 계산하는 코드를 어디에 넣어야하는지 정확히 모르겠어요 ㅠ
        수정/삭제
      3. android 초보
        2022.07.04 01:12
        python으로 만든 코드를 이제 android 스튜디오를 통해서 어플로 만들려고 하는데
        ml kit 사용하려고하는데 너무 어렵더라고요 ㅠ
        수정/삭제
    다음 글
    [GStreamer] 참고자료
    이전 글
    [Book Review] 코딩진로 (적극 추천)
    • 이전
    • 1
    • ···
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • ···
    • 592
    • 다음

    티스토리툴바