Esempio n. 1
0
    def _rotmat(self, vector, points):
        """
        Rotates a 3xn array of 3D coordinates from the +z normal to an
        arbitrary new normal vector.
        """

        vector = vg.normalize(vector)
        axis = vg.perpendicular(vg.basis.z, vector)
        angle = vg.angle(vg.basis.z, vector, units='rad')

        a = np.hstack((axis, (angle, )))
        R = matrix_from_axis_angle(a)

        r = Rot.from_matrix(R)
        rotmat = r.apply(points)

        return rotmat
def angle_calculation(df):
    positions = np.array(df['Positions'])
    angles = []
    mean_angle = []
    for fil in positions:
        todo = []
        for n in range(0, len(fil) - 2):
            v0 = np.array(fil[n]) - np.array(fil[n + 1])
            v1 = np.array(fil[n + 1]) - np.array(fil[n + 2])
            # angle = np.math.atan2(np.linalg.det([v0,v1]),np.dot(v0,v1))
            # angle_deg = np.degree(angle_deg)
            angle = vg.angle(v0, v1)
            todo.append(angle)
        angles.append(todo)
        avg = np.median(todo)
        mean_angle.append(avg)
    return angles, mean_angle
Esempio n. 3
0
def angle_velocity(x1, y1, z1, x2, y2, z2, _time):
    import vg
    # if type(_head_forward2) is not dict: return None
    vector1 = np.array([x1, y1, z1])
    vector2 = np.array([x2, y2, z2])
    return vg.angle(vector1, vector2) / _time
Esempio n. 4
0
    bvals, bvecs = read_bvals_bvecs(fbval, fbvec)
    subj_bvecs[subj_id] = bvecs
    subj_bvals[subj_id] = bvals

max_angle = 0
max_id_1 = None
max_id_2 = None
max_t = 0
angles = []

for t in range(288):
    for k1, v1 in subj_bvecs.items():
        for k2, v2 in subj_bvecs.items():
            if k1 == k2:
                continue
            angle = vg.angle(v1[t], v2[t])
            angles.append(angle)

            if angle > max_angle:
                max_angle = angle
                max_id_1 = k1
                max_id_2 = k2
                max_t = t

print(max_angle, max_id_1, max_id_2, max_t)

angles = sorted(angles)

all_match = True
for k1, v1 in subj_bvals.items():
    bvals1 = [round(int(x)/100)*100 for x in v1]
Esempio n. 5
0
def main():
    for i in TEST_IMAGE_LIST:
        image = cv2.imread(i)
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # conversion to rgb

        # create pose estimator
        image_size = image.shape
        pose_estimator = PoseEstimator(image_size, SESSION_PATH,
                                       PROB_MODEL_PATH)

        # load model
        pose_estimator.initialise()

        try:
            # estimation
            print('START')
            pose_2d, visibility, pose_3d = pose_estimator.estimate(image)
            print('=================================')
            print(str(i))
            print('pose 3d:', pose_3d)
            print('pose_2d:', pose_2d)
            angle_target_2d = pose_2d[0].copy()
            angle_target_3d = pose_3d[0].copy()

            #投影頭部的點到 x-z 平面
            angle_2d = calculate_angle_2d(
                [angle_target_3d[0][8], angle_target_3d[2][8]],
                [angle_target_3d[0][10], angle_target_3d[2][10]])
            print(angle_2d)

            #3D頭部
            standard_v = np.array([0, 0, -1])
            v_t = np.array([
                angle_target_3d[0][8] - angle_target_3d[0][10],
                angle_target_3d[1][8] - angle_target_3d[1][10],
                angle_target_3d[2][8] - angle_target_3d[2][10]
            ])
            print('====頭的角度===', vg.angle(standard_v, v_t))
            #3D肩膀
            vector = np.array([abs(angle_target_3d[0][6] - angle_target_3d[0][3]), \
            abs(angle_target_3d[1][6] - angle_target_3d[1][3]),\
            abs(angle_target_3d[2][6] - angle_target_3d[2][3])])\

            if vector[0] > vector[1] and vector[0] > vector[2]:
                standard_v = np.array([1, 0, 0])
            elif vector[1] > vector[0] and vector[1] > vector[2]:
                standard_v = np.array([0, -1, 0])
            else:
                print('判斷肩膀正面側面出現問題!預設正面')
                standard_v = np.array([1, 0, 0])
            v_t = np.array([
                angle_target_3d[0][11] - angle_target_3d[0][14],
                angle_target_3d[1][11] - angle_target_3d[1][14],
                angle_target_3d[2][11] - angle_target_3d[2][14]
            ])
            print('====肩膀的角度===', vg.angle(standard_v, v_t))
            #3D脊椎(脊椎中間連線頸椎中間與脊椎中間連線屁股中間)
            # standard_v = np.array([angle_target_3d[0][7] - angle_target_3d[0][8],
            #     angle_target_3d[1][7] - angle_target_3d[1][8],
            #     angle_target_3d[2][7] - angle_target_3d[2][8]])
            # v_t = np.array([angle_target_3d[0][7] - angle_target_3d[0][0],
            #     angle_target_3d[1][7] - angle_target_3d[1][0],
            #     angle_target_3d[2][7] - angle_target_3d[2][0]])
            # print('====脊椎的角度===', vg.angle(standard_v, v_t))

            #3D脊椎(雙腳中間連線脊椎終點與脊椎中間連線頸椎中點)
            # foot_center_x = (angle_target_3d[0][3] + angle_target_3d[0][6])/2
            # foot_center_y = (angle_target_3d[1][3] + angle_target_3d[1][6])/2
            # foot_center_z = (angle_target_3d[2][3] + angle_target_3d[2][6])/2
            # standard_v = np.array([foot_center_x - angle_target_3d[0][0],
            #     foot_center_y - angle_target_3d[1][0],
            #     foot_center_z - angle_target_3d[2][0]])
            # v_t = np.array([angle_target_3d[0][8] - angle_target_3d[0][0],
            #     angle_target_3d[1][8] - angle_target_3d[1][0],
            #     angle_target_3d[2][8] - angle_target_3d[2][0]])
            # print('====脊椎的角度===', vg.angle(standard_v, v_t))

            #馬術的3D脊椎(雙腳中間連線脊椎終點與脊椎中間連線頸椎中點)
            standard_v = np.array([0, 0, 1])
            v_t = np.array([
                angle_target_3d[0][8] - angle_target_3d[0][0],
                angle_target_3d[1][8] - angle_target_3d[1][0],
                angle_target_3d[2][8] - angle_target_3d[2][0]
            ])
            print('====脊椎的角度===', vg.angle(standard_v, v_t))

            #3D左膝蓋
            standard_v = np.array([
                angle_target_3d[0][5] - angle_target_3d[0][4],
                angle_target_3d[1][5] - angle_target_3d[1][4],
                angle_target_3d[2][5] - angle_target_3d[2][4]
            ])
            v_t = np.array([
                angle_target_3d[0][5] - angle_target_3d[0][6],
                angle_target_3d[1][5] - angle_target_3d[1][6],
                angle_target_3d[2][5] - angle_target_3d[2][6]
            ])
            print('====左膝蓋的角度===', vg.angle(standard_v, v_t))
            #3D右膝蓋
            standard_v = np.array([
                angle_target_3d[0][2] - angle_target_3d[0][1],
                angle_target_3d[1][2] - angle_target_3d[1][1],
                angle_target_3d[2][2] - angle_target_3d[2][1]
            ])
            v_t = np.array([
                angle_target_3d[0][2] - angle_target_3d[0][3],
                angle_target_3d[1][2] - angle_target_3d[1][3],
                angle_target_3d[2][2] - angle_target_3d[2][3]
            ])
            print('====右膝蓋的角度===', vg.angle(standard_v, v_t))

            #投影法

            # Show 2D and 3D poses

            display_results(image, pose_2d, visibility, pose_3d)
        except ValueError:
            print(
                'No visible people in the image. Change CENTER_TR in packages/lifting/utils/config.py ...'
            )

        # close model
        pose_estimator.close()