analyse_jump.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  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. def analyse_npy_side_juanfu(name, num, npy_side):
  31. result = {}
  32. data = np.load(npy_side)
  33. j = 0
  34. if (len(data) != 18):
  35. return False
  36. p = "./cap_file/" + name
  37. file = open("./cap_file/" + name + "/file2.txt", "a+")
  38. for i in range(0, len(data)):
  39. file.write(str(data[i]) + "\n")
  40. file.close()
  41. nose_x = data[0][0]
  42. nose_y = data[0][1]
  43. shoulder_r_x = data[2][0]
  44. shoulder_r_y = data[2][1]
  45. elbow_r_x = data[3][0]
  46. elbow_r_y = data[3][1]
  47. wrist_r_x = data[4][0]
  48. wrist_r_y = data[4][1]
  49. hip_r_x = data[8][0]
  50. hip_r_y = data[8][1]
  51. knee_r_x = data[9][0]
  52. knee_r_y = data[9][1]
  53. neck_x = data[1][0]
  54. neck_y = data[1][1]
  55. ankle_r_x = data[10][0]
  56. ankle_r_y = data[10][1]
  57. leg_heigh = data[10][1]
  58. neck_hip_angle = round(angle1([neck_x, neck_y, hip_r_x, hip_r_y], [0, 0, 0, -1]), 2)
  59. nose_neck_angle = round(angle1([nose_x, nose_y, neck_x, neck_y], [0, 0, 0, -1]), 2)
  60. hip_knee_angle = round(angle1([hip_r_x, hip_r_y, knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  61. knee_ankle_angle = round(angle1([knee_r_x, knee_r_y, ankle_r_x, ankle_r_y], [0, 0, 0, -1]), 2) # 膝盖到脚
  62. result["neck_hip_angle"] = neck_hip_angle
  63. result["nose_neck_angle"] = nose_neck_angle
  64. result["hip_knee_angle"] = hip_knee_angle
  65. result["knee_ankle_angle"] = knee_ankle_angle
  66. print(hip_r_x)
  67. print(hip_r_y)
  68. print(knee_r_x)
  69. print(knee_r_y)
  70. print(hip_knee_angle)
  71. print(p)
  72. # print(npy_side)
  73. return result
  74. def analyse_npy_side_pingban(name, num, npy_side):
  75. result = {}
  76. data = np.load(npy_side)
  77. j = 0
  78. if (len(data) < 15):
  79. return False
  80. p = "./cap_file/" + name
  81. file = open("./cap_file/" + name + "/file2.txt", "a+")
  82. for i in range(0, len(data)):
  83. file.write(str(data[i]) + "\n")
  84. file.close()
  85. shoulder_r_x = data[2][0]
  86. shoulder_r_y = data[2][1]
  87. elbow_r_x = data[3][0]
  88. elbow_r_y = data[3][1]
  89. wrist_r_x = data[4][0]
  90. wrist_r_y = data[4][1]
  91. hip_r_x = data[8][0]
  92. hip_r_y = data[8][1]
  93. knee_r_x = data[9][0]
  94. knee_r_y = data[9][1]
  95. neck_x = data[1][0]
  96. neck_y = data[1][1]
  97. ankle_r_x = data[10][0]
  98. ankle_r_y = data[10][1]
  99. knee_ankle_angle = round(angle1([knee_r_x, knee_r_y, ankle_r_x, ankle_r_y], [0, 0, 0, -1]), 2) # 膝盖到脚
  100. leg_heigh = data[10][1]
  101. neck_hip_angle = round(angle1([neck_x, neck_y, hip_r_x, hip_r_y], [0, 0, 0, -1]), 2)
  102. hip_knee_angle = round(angle1([hip_r_x, hip_r_y, knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  103. s_e_angle = round(angle1([shoulder_r_x, shoulder_r_y, elbow_r_x, elbow_r_y], []), 2)
  104. e_w_angle = round(angle1([elbow_r_x, elbow_r_y, wrist_r_x, wrist_r_y], []), 2)
  105. hip_heigh = hip_r_y
  106. result["knee_ankle_angle"] = knee_ankle_angle
  107. result["leg_heigh"] = leg_heigh
  108. result["neck_hip_angle"] = neck_hip_angle
  109. result["hip_knee_angle"] = hip_knee_angle
  110. result["hip_heigh"] = hip_heigh
  111. result["s_e_angle"] = s_e_angle
  112. result["e_w_angle"] = e_w_angle
  113. # print(npy_side)
  114. return result
  115. def analyse_npy_side_jump(name, num, npy_side):
  116. result = {}
  117. data = np.load(npy_side)
  118. j = 0
  119. file = open("./cap_file/" + name + "/file2.txt", "a+")
  120. file.write(str(num) + "\n")
  121. for i in range(0, len(data)):
  122. file.write(str(data[i]) + "\n")
  123. file.close()
  124. if (len(data) != 18):
  125. return False
  126. p = "./cap_file/" + name
  127. # file=open("./cap_file/"+name+"/file2.txt","a+")
  128. # file.write(str(num)+"\n")
  129. # for i in range(0,len(data)):
  130. # file.write(str(data[i])+"\n")
  131. # file.close()
  132. # print(data)
  133. hip_r_x = data[8][0]
  134. hip_r_y = data[8][1]
  135. knee_r_x = data[9][0]
  136. knee_r_y = data[9][1]
  137. # print(head_forward_level)
  138. # upper part of body
  139. up_risk_level = ""
  140. up_state = ""
  141. neck_x = data[1][0]
  142. neck_y = data[1][1]
  143. ankle_r_x = data[10][0]
  144. ankle_r_y = data[10][1]
  145. knee_ankle_angle = round(angle1([knee_r_x, knee_r_y, ankle_r_x, ankle_r_y], [0, 0, 0, -1]), 2) # 膝盖到脚
  146. leg_heigh = data[10][1]
  147. neck_hip_angle = round(angle1([neck_x, neck_y, hip_r_x, hip_r_y], [0, 0, 0, -1]), 2)
  148. hip_knee_angle = round(angle1([hip_r_x, hip_r_y, knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  149. hip_heigh = hip_r_y
  150. result["knee_ankle_angle"] = knee_ankle_angle
  151. result["leg_heigh"] = leg_heigh
  152. result["neck_hip_angle"] = neck_hip_angle
  153. result["hip_knee_angle"] = hip_knee_angle
  154. result["hip_heigh"] = hip_heigh
  155. print(npy_side)
  156. return result
  157. def analyse_npy_side_gaotaitui(name, num, npy_side):
  158. result = {}
  159. data = np.load(npy_side)
  160. j = 0
  161. file = open("./cap_file/" + name + "/file2.txt", "a+")
  162. file.write(str(num) + "\n")
  163. for i in range(0, len(data)):
  164. file.write(str(data[i]) + "\n")
  165. file.close()
  166. if (len(data) != 18):
  167. return False
  168. p = "./cap_file/" + name
  169. # print(data)
  170. hip_r_x = data[8][0]
  171. hip_r_y = data[8][1]
  172. knee_r_x = data[9][0]
  173. knee_r_y = data[9][1]
  174. hip_l_x = data[11][0]
  175. hip_l_y = data[11][1]
  176. knee_l_x = data[12][0]
  177. knee_l_y = data[12][1]
  178. # print(head_forward_level)
  179. # upper part of body
  180. up_risk_level = ""
  181. up_state = ""
  182. neck_x = data[1][0]
  183. neck_y = data[1][1]
  184. ankle_r_x = data[10][0]
  185. ankle_r_y = data[10][1]
  186. ankle_l_x = data[13][0]
  187. ankle_l_y = data[13][1]
  188. knee_ankle_r_angle = round(angle1([knee_r_x, knee_r_y, ankle_r_x, ankle_r_y], [0, 0, 0, -1]), 2) # 膝盖到脚
  189. knee_ankle_l_angle = round(angle1([knee_l_x, knee_l_y, ankle_l_x, ankle_l_y], [0, 0, 0, -1]), 2) # 膝盖到脚
  190. hip_knee_r_angle = round(angle1([hip_r_x, hip_r_y, knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  191. hip_knee_l_angle = round(angle1([hip_l_x, hip_l_y, knee_l_x, knee_l_y], [0, 0, 0, -1]), 2)
  192. neck_hip_angle = round(angle1([neck_x, neck_y, hip_r_x, hip_r_y], [0, 0, 0, -1]), 2)
  193. # hip_knee_angle=round(angle1([hip_r_x, hip_r_y,knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  194. hip_heigh = hip_r_y
  195. result["knee_ankle_r_angle"] = knee_ankle_r_angle
  196. result["knee_ankle_l_angle"] = knee_ankle_l_angle
  197. result["hip_knee_r_angle"] = hip_knee_r_angle
  198. result["hip_knee_l_angle"] = hip_knee_l_angle
  199. result["r_d"] = abs(0 - float(hip_knee_r_angle) + float(knee_ankle_r_angle))
  200. result["l_d"] = abs(0 + float(knee_ankle_l_angle) - float(hip_knee_l_angle))
  201. return result
  202. def analyse_npy_side_shendun(name, num, npy_side):
  203. result = {}
  204. data = np.load(npy_side)
  205. j = 0
  206. file = open("./cap_file/" + name + "/file2.txt", "a+")
  207. file.write(str(num) + "\n")
  208. if (len(data) != 18):
  209. return False
  210. for i in range(0, len(data)):
  211. file.write(str(data[i]) + "\n")
  212. file.close()
  213. p = "./cap_file/" + name
  214. # print(data)
  215. hip_r_x = data[8][0]
  216. hip_r_y = data[8][1]
  217. knee_r_x = data[9][0]
  218. knee_r_y = data[9][1]
  219. hip_l_x = data[11][0]
  220. hip_l_y = data[11][1]
  221. knee_l_x = data[12][0]
  222. knee_l_y = data[12][1]
  223. # print(head_forward_level)
  224. # upper part of body
  225. up_risk_level = ""
  226. up_state = ""
  227. neck_x = data[1][0]
  228. neck_y = data[1][1]
  229. ankle_r_x = data[10][0]
  230. ankle_r_y = data[10][1]
  231. ankle_l_x = data[13][0]
  232. ankle_l_y = data[13][1]
  233. knee_ankle_r_angle = round(angle1([knee_r_x, knee_r_y, ankle_r_x, ankle_r_y], [0, 0, 0, -1]), 2) # 膝盖到脚
  234. knee_ankle_l_angle = round(angle1([knee_l_x, knee_l_y, ankle_l_x, ankle_l_y], [0, 0, 0, -1]), 2) # 膝盖到脚
  235. hip_knee_r_angle = round(angle1([hip_r_x, hip_r_y, knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  236. hip_knee_l_angle = round(angle1([hip_l_x, hip_l_y, knee_l_x, knee_l_y], [0, 0, 0, -1]), 2)
  237. neck_hip_angle = round(angle1([neck_x, neck_y, hip_r_x, hip_r_y], [0, 0, 0, -1]), 2)
  238. # hip_knee_angle=round(angle1([hip_r_x, hip_r_y,knee_r_x, knee_r_y], [0, 0, 0, -1]), 2)
  239. hip_heigh = hip_r_y
  240. result["knee_ankle_r_angle"] = knee_ankle_r_angle
  241. result["knee_ankle_l_angle"] = knee_ankle_l_angle
  242. result["hip_knee_r_angle"] = hip_knee_r_angle
  243. result["hip_knee_l_angle"] = hip_knee_l_angle
  244. result["r_d"] = abs(float(result["hip_knee_r_angle"]) - float(result["knee_ankle_r_angle"]))
  245. return result