analyse_jump.py 9.9 KB

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