analyse_jump.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. import math
  2. import numpy as np
  3. def angle(v1, v2):
  4. dx1 = v1[2] - v1[0]
  5. dy1 = v1[3] - v1[1]
  6. dx2 = v2[2] - v2[0]
  7. dy2 = v2[3] - v2[1]
  8. angle1 = math.atan2(dy1, dx1)
  9. angle1 = round(angle1 * 180.0 / math.pi, 2)
  10. # print(angle1)
  11. angle2 = math.atan2(dy2, dx2)
  12. angle2 = round(angle2 * 180.0 / math.pi, 2)
  13. # print(angle2)
  14. if angle1 * angle2 >= 0:
  15. included_angle = abs(angle1 - angle2)
  16. else:
  17. included_angle = abs(angle1) + abs(angle2)
  18. # if included_angle > 180:
  19. # included_angle = 360 - included_angle
  20. return included_angle
  21. def angle1(v1, v2):
  22. dx1 = v1[2] - v1[0]
  23. dy1 = v1[3] - v1[1]
  24. angle1 = (float)(math.atan2(dy1, dx1))
  25. angle2 = abs(round(angle1 * 180.0 / math.pi, 2))
  26. return angle2
  27. # calculate the angle between 3 points under the coordinates
  28. # params: list, item [x,y]
  29. # return: the angle value of b
  30. def cal_angle(point_a, point_b, point_c):
  31. a_x, b_x, c_x = point_a[0], point_b[0], point_c[0]
  32. a_y, b_y, c_y = point_a[1], point_b[1], point_c[1]
  33. a_z, b_z, c_z = 0, 0, 0
  34. # m=(x1,y1,z1), n=(x2,y2,z2)
  35. x1, y1, z1 = (a_x - b_x), (a_y - b_y), (a_z - b_z)
  36. x2, y2, z2 = (c_x - b_x), (c_y - b_y), (c_z - b_z)
  37. cos_b = (x1 * x2 + y1 * y2 + z1 * z2) / (
  38. math.sqrt(x1 ** 2 + y1 ** 2 + z1 ** 2) * (math.sqrt(x2 ** 2 + y2 ** 2 + z2 ** 2)))
  39. B = math.degrees(math.acos(cos_b))
  40. return round(B, 2)
  41. def analyse_npy_side_juanfu(name, num, npy_side):
  42. result = {}
  43. data = np.load(npy_side)[0]
  44. j = 0
  45. print(len(data))
  46. # print(data)
  47. if (len(data) != 25):
  48. return False
  49. p = "./cap_file/" + name
  50. file = open("./cap_file/" + name + "/file2.txt", "a+")
  51. for i in range(0, len(data)):
  52. file.write(str(data[i]) + "\n")
  53. file.close()
  54. nose_x = data[0][0]
  55. nose_y = data[0][1]
  56. shoulder_r_x = data[2][0]
  57. shoulder_r_y = data[2][1]
  58. elbow_r_x = data[3][0]
  59. elbow_r_y = data[3][1]
  60. wrist_r_x = data[4][0]
  61. wrist_r_y = data[4][1]
  62. hip_r_x = data[9][0]
  63. hip_r_y = data[9][1]
  64. knee_r_x = data[10][0]
  65. knee_r_y = data[10][1]
  66. neck_x = data[1][0]
  67. neck_y = data[1][1]
  68. ankle_r_x = data[11][0]
  69. ankle_r_y = data[11][1]
  70. leg_heigh = data[11][1]
  71. neck_hip_angle = round(angle1([neck_x, neck_y, hip_r_x, hip_r_y], [0, 0, 0, -1]), 2)
  72. nose_neck_angle = round(angle1([nose_x, nose_y, neck_x, neck_y], [0, 0, 0, -1]), 2)
  73. hip_knee_angle = round(angle1([hip_r_x, hip_r_y, knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  74. knee_ankle_angle = round(angle1([knee_r_x, knee_r_y, ankle_r_x, ankle_r_y], [0, 0, 0, -1]), 2)
  75. result["neck_hip_angle"] = neck_hip_angle
  76. result["nose_neck_angle"] = nose_neck_angle
  77. result["hip_knee_angle"] = hip_knee_angle
  78. result["knee_ankle_angle"] = knee_ankle_angle
  79. # print(npy_side)
  80. return result
  81. def analyse_npy_side_pingban(name, num, npy_side):
  82. result = {}
  83. data = np.load(npy_side)
  84. j = 0
  85. if (len(data) < 15):
  86. return False
  87. p = "./cap_file/" + name
  88. file = open("./cap_file/" + name + "/file2.txt", "a+")
  89. for i in range(0, len(data)):
  90. file.write(str(data[i]) + "\n")
  91. file.close()
  92. shoulder_r_x = data[2][0]
  93. shoulder_r_y = data[2][1]
  94. elbow_r_x = data[3][0]
  95. elbow_r_y = data[3][1]
  96. wrist_r_x = data[4][0]
  97. wrist_r_y = data[4][1]
  98. hip_r_x = data[9][0]
  99. hip_r_y = data[9][1]
  100. knee_r_x = data[10][0]
  101. knee_r_y = data[10][1]
  102. neck_x = data[1][0]
  103. neck_y = data[1][1]
  104. ankle_r_x = data[11][0]
  105. ankle_r_y = data[11][1]
  106. bigToe_r_x = data[22][0]
  107. bigToe_r_y = data[22][1]
  108. knee_ankle_angle = round(angle1([knee_r_x, knee_r_y, ankle_r_x, ankle_r_y], [0, 0, 0, -1]), 2)
  109. leg_heigh = data[11][1]
  110. neck_hip_angle = round(angle1([neck_x, neck_y, hip_r_x, hip_r_y], [0, 0, 0, -1]), 2)
  111. hip_knee_angle = round(angle1([hip_r_x, hip_r_y, knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  112. s_e_angle = round(angle1([shoulder_r_x, shoulder_r_y, elbow_r_x, elbow_r_y], []), 2)
  113. e_w_angle = round(angle1([elbow_r_x, elbow_r_y, wrist_r_x, wrist_r_y], []), 2)
  114. hip_heigh = hip_r_y
  115. result["knee_ankle_angle"] = knee_ankle_angle
  116. result["leg_heigh"] = leg_heigh
  117. result["neck_hip_angle"] = neck_hip_angle
  118. result["hip_knee_angle"] = hip_knee_angle
  119. result["hip_heigh"] = hip_heigh
  120. result["s_e_angle"] = s_e_angle
  121. result["e_w_angle"] = e_w_angle
  122. # print(npy_side)
  123. return result
  124. def analyse_npy_side_jump(name, num, npy_side):
  125. result = {}
  126. print("analyse_npy_side_jump====")
  127. data = np.load(npy_side)[0]
  128. j = 0
  129. file = open("./cap_file/" + name + "/file2.txt", "a+")
  130. file.write(str(num) + "\n")
  131. for i in range(0, len(data)):
  132. file.write(str(data[i]) + "\n")
  133. file.close()
  134. if len(data) != 25:
  135. return False
  136. p = "./cap_file/" + name
  137. # should-elbow-wrist r2-3-4 l5-6-7
  138. # neck-hip-knee r1-9-10 l1-12-13
  139. # hip-knee-ankle r9-10-11 l12-13-14
  140. # knee-ankle-bigToe r10-11-22 l13-14-19
  141. result["elbow_right_angle"] = cal_angle(data[2], data[3], data[4])
  142. result["elbow_left_angle"] = cal_angle(data[5], data[6], data[7])
  143. result["hip_right_angle"] = cal_angle(data[1], data[9], data[10])
  144. result["hip_left_angle"] = cal_angle(data[1], data[12], data[13])
  145. result["knee_right_angle"] = cal_angle(data[9], data[10], data[11])
  146. result["knee_left_angle"] = cal_angle(data[12], data[13], data[14])
  147. result["ankle_right_angle"] = cal_angle(data[10], data[11], data[12])
  148. result["ankle_left_angle"] = cal_angle(data[13], data[14], data[19])
  149. result["leg_heigh"] = data[11][1] # ankle
  150. result["hip_heigh"] = data[9][1] # hip
  151. result["wrist_heigh"] = data[4][1]
  152. result["neck_heigh"] = data[1][1]
  153. # knee_ankle_angle = round(angle1([knee_r_x, knee_r_y, ankle_r_x, ankle_r_y], [0, 0, 0, -1]), 2)
  154. # neck_hip_angle = round(angle1([neck_x, neck_y, hip_r_x, hip_r_y], [0, 0, 0, -1]), 2)
  155. # hip_knee_angle = round(angle1([hip_r_x, hip_r_y, knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  156. # hip_heigh = hip_r_y
  157. # result["knee_ankle_angle"] = knee_ankle_angle
  158. # result["leg_heigh"] = leg_heigh
  159. # result["neck_hip_angle"] = neck_hip_angle
  160. # result["hip_knee_angle"] = hip_knee_angle
  161. # result["hip_heigh"] = hip_heigh
  162. return result
  163. def analyse_npy_side_gaotaitui(name, num, npy_side):
  164. result = {}
  165. data = np.load(npy_side)[0]
  166. print(data)
  167. j = 0
  168. file = open("./cap_file/" + name + "/file2.txt", "a+")
  169. file.write(str(num) + "\n")
  170. for i in range(0, len(data)):
  171. file.write(str(data[i]) + "\n")
  172. file.close()
  173. if (len(data) != 25):
  174. return False
  175. p = "./cap_file/" + name
  176. # print(data)
  177. hip_r_x = data[9][0]
  178. hip_r_y = data[9][1]
  179. knee_r_x = data[10][0]
  180. knee_r_y = data[10][1]
  181. hip_l_x = data[12][0]
  182. hip_l_y = data[12][1]
  183. knee_l_x = data[13][0]
  184. knee_l_y = data[13][1]
  185. # print(head_forward_level)
  186. # upper part of body
  187. up_risk_level = ""
  188. up_state = ""
  189. neck_x = data[1][0]
  190. neck_y = data[1][1]
  191. ankle_r_x = data[11][0]
  192. ankle_r_y = data[11][1]
  193. ankle_l_x = data[14][0]
  194. ankle_l_y = data[14][1]
  195. knee_ankle_r_angle = round(angle1([knee_r_x, knee_r_y, ankle_r_x, ankle_r_y], [0, 0, 0, -1]), 2) # ϥ�ǵ���
  196. knee_ankle_l_angle = round(angle1([knee_l_x, knee_l_y, ankle_l_x, ankle_l_y], [0, 0, 0, -1]), 2) # ϥ�ǵ���
  197. hip_knee_r_angle = round(angle1([hip_r_x, hip_r_y, knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  198. hip_knee_l_angle = round(angle1([hip_l_x, hip_l_y, knee_l_x, knee_l_y], [0, 0, 0, -1]), 2)
  199. neck_hip_angle = round(angle1([neck_x, neck_y, hip_r_x, hip_r_y], [0, 0, 0, -1]), 2)
  200. # hip_knee_angle=round(angle1([hip_r_x, hip_r_y,knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  201. hip_heigh = hip_r_y
  202. result["knee_ankle_r_angle"] = knee_ankle_r_angle
  203. result["knee_ankle_l_angle"] = knee_ankle_l_angle
  204. result["hip_knee_r_angle"] = hip_knee_r_angle
  205. result["hip_knee_l_angle"] = hip_knee_l_angle
  206. result["r_d"] = abs(0 - float(hip_knee_r_angle) + float(knee_ankle_r_angle))
  207. result["l_d"] = abs(0 + float(knee_ankle_l_angle) - float(hip_knee_l_angle))
  208. return result
  209. def analyse_npy_side_shendun(name, num, npy_side):
  210. result = {}
  211. data = np.load(npy_side)[0]
  212. j = 0
  213. file = open("./cap_file/" + name + "/file2.txt", "a+")
  214. file.write(str(num) + "\n")
  215. if (len(data) != 25):
  216. return False
  217. for i in range(0, len(data)):
  218. file.write(str(data[i]) + "\n")
  219. file.close()
  220. p = "./cap_file/" + name
  221. # print(data)
  222. hip_r_x = data[9][0]
  223. hip_r_y = data[9][1]
  224. knee_r_x = data[10][0]
  225. knee_r_y = data[10][1]
  226. hip_l_x = data[12][0]
  227. hip_l_y = data[12][1]
  228. knee_l_x = data[13][0]
  229. knee_l_y = data[13][1]
  230. # print(head_forward_level)
  231. # upper part of body
  232. up_risk_level = ""
  233. up_state = ""
  234. neck_x = data[1][0]
  235. neck_y = data[1][1]
  236. ankle_r_x = data[11][0]
  237. ankle_r_y = data[11][1]
  238. ankle_l_x = data[14][0]
  239. ankle_l_y = data[14][1]
  240. knee_ankle_r_angle = round(angle1([knee_r_x, knee_r_y, ankle_r_x, ankle_r_y], [0, 0, 0, -1]), 2)
  241. knee_ankle_l_angle = round(angle1([knee_l_x, knee_l_y, ankle_l_x, ankle_l_y], [0, 0, 0, -1]), 2)
  242. hip_knee_r_angle = round(angle1([hip_r_x, hip_r_y, knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  243. hip_knee_l_angle = round(angle1([hip_l_x, hip_l_y, knee_l_x, knee_l_y], [0, 0, 0, -1]), 2)
  244. neck_hip_angle = round(angle1([neck_x, neck_y, hip_r_x, hip_r_y], [0, 0, 0, -1]), 2)
  245. # hip_knee_angle=round(angle1([hip_r_x, hip_r_y,knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  246. hip_heigh = hip_r_y
  247. result["knee_ankle_r_angle"] = knee_ankle_r_angle
  248. result["knee_ankle_l_angle"] = knee_ankle_l_angle
  249. result["hip_knee_r_angle"] = hip_knee_r_angle
  250. result["hip_knee_l_angle"] = hip_knee_l_angle
  251. result["r_d"] = abs(float(result["hip_knee_r_angle"]) - float(result["knee_ankle_r_angle"]))
  252. return result