반응형
1. 패키지 설치
c3d 패키지를 설치한다. 커맨드 창에 pip install c3d 라고 입력하면 된다.
2. 패키지 불러오기
아래 세가지 패키지를 불러온다.
import c3d
import os
import numpy as np
3. 사용방법
c3d 파일이 들어있는 경로를 현재디렉토리로 설정한다.
path='경로'
os.chdir(path)
c3d 파일을 아래와 같이 불러온다.
dt = c3d.Reader(open('파일이름.c3d', 'rb')) #read bytes type
마커의 이름은 아래와 같이 불러옵니다.
>>> dt.point_labels
array(['Top.Head ', 'Front.Head ',
'Rear.Head ', 'R.Shoulder ',
'R.Offset ', 'R.Elbow ',
'R.Wrist ', 'L.Shoulder ',
'L.Elbow ', 'L.Wrist ',
'R.ASIS ', 'L.ASIS ',
'V.Sacral ', 'R.Thigh ',
'R.Knee ', 'R.Shank ',
'R.Ankle ', 'R.Heel ',
'R.Toe ', 'L.Thigh ',
'L.Knee ', 'L.Shank ',
'L.Ankle ', 'L.Heel ',
'L.Toe ', 'R.Knee.Medial ',
'R.Ankle.Medial ', 'L.Knee.Medial ',
'L.Ankle.Medial ', 'V_Mid_ASIS ',
'V_Pelvis_Origin ', 'V_R.Hip_JC ',
'V_L.Hip_JC ', 'V_R.Knee_JC_Static ',
'V_L.Knee_JC_Static ', 'V_R.Ankle_JC_Static ',
'V_L.Ankle_JC_Static ', 'V_R.Knee_JC ',
'V_L.Knee_JC ', 'V_R.Ankle_JC ',
'V_L.Ankle_JC ', 'V_Mid_Hip ',
'V_Mid_Shoulder ', 'V_R.Hand ',
'V_L.Hand ', 'V_R.Toe_Offset_Static',
'V_L.Toe_Offset_Static', 'V_R.Toe_Offset ',
'V_L.Toe_Offset '], dtype=object)
그 외 라벨들은 아래와 같이 불러옵니다.
>>> dt.analog_labels
array(['F1X1 ', 'F1X3 ', 'F1Y1 ',
'F1Y2 ', 'F1Z1 ', 'F1Z2 ',
'F1Z3 ', 'F1Z4 ', 'F2X1 ',
'F2X3 ', 'F2Y1 ', 'F2Y2 ',
'F2Z1 ', 'F2Z2 ', 'F2Z3 ',
'F2Z4 ', 'R RECTUS ', 'R TIBIALIS ANT ',
'R MEDIAL HAM ', 'R GASTROCNEMIUS', 'L RECTUS ',
'L TIBIALIS ANT ', 'L MEDIAL HAM ', 'L GASTROCNEMIUS'],
dtype=object)
frame 별 데이터는 아래와 같이 불러옵니다.
frames=list(dt.read_frames())
frames의 가장 바깥 차원은 frame 수 입니다.
>>> len(list(dt.read_frames()))
141
아래는 첫번째 frame을 의미합니다. 일부만 가져왔습니다.
>>> list(dt.read_frames())[0]
(1, array([[ 1.3286189e+03, 1.3309180e+02, 1.5144081e+03, 0.0000000e+00,
0.0000000e+00],
[ 1.4584868e+03, 1.3572591e+02, 1.4593802e+03, 0.0000000e+00,
0.0000000e+00],
frames의 두번째 차원은 frame 번호, 마커의 위치, 그외 라벨들의 값입니다.
첫번째 frame의 마커들의 위치에 접근하는 방법은 아래와 같습니다.
>>> frames[0][1]
array([[ 1.3286189e+03, 1.3309180e+02, 1.5144081e+03, 0.0000000e+00,
0.0000000e+00],
[ 1.4584868e+03, 1.3572591e+02, 1.4593802e+03, 0.0000000e+00,
0.0000000e+00],
[ 1.2567852e+03, 1.4790892e+02, 1.4342784e+03, 0.0000000e+00,
0.0000000e+00],
[ 1.3087700e+03, 1.1598769e+00, 1.2428253e+03, 0.0000000e+00,
첫번째 frame의 첫번째 마커에 접근하는 방법은 아래와 같습니다.
>>> frames[0][1][0]
array([1328.6189, 133.0918, 1514.4081, 0. , 0. ],
dtype=float32)
마커의 순서는 dt.point_labels 에서 알 수 있습니다.
요약하면 아래와 같습니다.
frames[frame번호][0=frame번호,1=마커위치,2=그외 값들]
개별 마커에 접근하는 방법은 아래와 같습니다.
frames[frame번호][2][마커번호]
반응형
댓글