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
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
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]
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()