_iamge 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. import json
  2. import os
  3. from flask import Flask, request
  4. from flask_cors import *
  5. from PIL import Image
  6. import base64
  7. from analyse_func import do_analysis
  8. from classify import api_dyna
  9. from db_project import get_status,process_db,lookup_data ,add_new_data_dyna,add_new_data,create_table_dynamic,create_table,create_db
  10. # str_res=""
  11. # a dict contains the txt
  12. dict_total = {}
  13. li_last = []
  14. # store dic_data's json format
  15. bJson = ""
  16. global_index = [6]
  17. global_video_index=0
  18. li_return = []
  19. img_return = []
  20. flag_run=False
  21. ##jump
  22. ##result["jump_power"]["level"]/["path"]/["val"]
  23. ##result["core_strength"]["level"]/["path"] 1 2 3 4
  24. ##result["landing_position"]["level"]/["path"]["val"]
  25. ##juanfu
  26. ## result["head_power"]["level"]/["path"]/["val"]
  27. #result["core_strength"]["level"]/["path"]
  28. ##result["body_stability"]["level"]/["val"]
  29. ##pingban
  30. """
  31. result["arm_strength"]["level"]/["path"]/["val"]
  32. result["stability"]["level"]/["path"]/["val"]
  33. result["standard"]["level"]/["path"]/["val"]
  34. """
  35. ##shendun
  36. """
  37. result["leg_strength"]["level"]/["path"]
  38. """
  39. ##gaotaitui
  40. """
  41. result["standard"]["level"]/["path"]
  42. """
  43. # read txt file and change it to the list format
  44. def read_pose_processes_txt_result():
  45. file_dir = "pose_processed_txt" # the file's path
  46. dir_list = os.listdir(file_dir) # dir_list=["1.txt","2.txt","3.txt","4.txt"]
  47. global li_last # 分析的最后结果
  48. global dict_total # list的字典
  49. li_last = []
  50. dict_total = {}
  51. for cur_file in dir_list:
  52. if (cur_file[0:len(cur_file) - 4] != str(global_index[0])):
  53. # print(cur_file[0:len(cur_file)-4])
  54. # print(global_index[0])
  55. continue
  56. path = os.path.join(file_dir, cur_file) # path="pose_processed_txt/1.txt"
  57. f = open(path, encoding='utf-8')
  58. lines = f.readlines()
  59. # process logic,{"正面分析":{“头部分析”:{},"肩部分析": {}}
  60. dic_data = {}
  61. for i in range(len(lines)):
  62. if lines[i][0] == '-':
  63. continue
  64. elif lines[i][0] == "正":
  65. dic_data = {"title": "正面分析如下"}
  66. li = []
  67. dic_1 = {}
  68. i = i + 1 # i是头部分析那行
  69. dic_1["name"] = "头部分析"
  70. dic_1["value"] = lines[i][5:len(lines[i]) - 1]
  71. i = i + 1 # 头部数字级别
  72. dic_1["level"] = int(lines[i].strip())
  73. li.append(dic_1)
  74. dic_2 = {}
  75. i += 2 #第六行 i=6
  76. dic_2["name"] = "肩部分析"
  77. #num_risk_1 = int(lines[i + 1].strip())
  78. dic_2["value"] = lines[i][:-1] + " " + lines[(i + 1)][:-1]
  79. num_risk_2 = int(lines[i + 2].strip())
  80. dic_2["level"] = int(num_risk_2)
  81. li.append(dic_2)
  82. i += 4 #i=10
  83. dic_3 = {}
  84. dic_3["name"] = "髋部分析"
  85. dic_3["value"] = lines[i][:-1] + " " + lines[(i + 1)][:-1]
  86. num_risk_1 = int(lines[i + 2].strip())
  87. #num_risk_2 = int(lines[i + 3].strip())
  88. dic_3["level"] = int(max(num_risk_1, 0))
  89. i += 4 #i=14
  90. dic_4 = {"name": "腿型分析", "value": lines[i][:-1]}
  91. li.append(dic_3)
  92. li.append(dic_4)
  93. dic_data["detail"] = li
  94. if ("非" in lines[i][:-1]):
  95. dic_4["level"] = 0
  96. else:
  97. dic_4["level"] = 1
  98. li_last.append(dic_data)
  99. elif lines[i][0] == "侧":
  100. li = []
  101. dic_data = {"title": "侧面分析如下"}
  102. dic_1 = {}
  103. i += 1
  104. dic_1["name"] = "颈椎分析"
  105. if lines[i][4] != ":":
  106. dic_1["value"] = lines[i][0:len(lines[i]) - 1]
  107. else:
  108. dic_1["value"] = lines[i][5:len(lines[i]) - 1]
  109. dic_1["level"] = int(lines[i + 1].strip())
  110. i += 2
  111. dic_2 = {"name": "站姿分析", "value": lines[i][5:len(lines[i]) - 1]}
  112. dic_2["level"] = int(lines[i + 1].strip())
  113. i += 2
  114. dic_3 = {"name": "髋部分析", "value": lines[i][5:len(lines[i]) - 1]}
  115. dic_3["level"] = int(lines[i + 1].strip())
  116. i += 2
  117. dic_4 = {"name": "膝盖分析", "value": lines[i][7:len(lines[i]) - 1]}
  118. dic_4["level"] = int(lines[i + 1].strip())
  119. li.append(dic_1)
  120. li.append(dic_2)
  121. li.append(dic_3)
  122. li.append(dic_4)
  123. dic_data["detail"] = li
  124. li_last.append(dic_data)
  125. else:
  126. i += 1
  127. print(li_last)
  128. dict_total[cur_file] = li_last
  129. f.close()
  130. global li_return
  131. li_return = dict_total[(str(global_index[0]) + ".txt")]
  132. def run_the_process(index: int = 0, height: float = 110):
  133. # sys.path.append("../analyse_func.py")
  134. # import analyse_func
  135. #print(global_index[0])
  136. do_analysis(global_index[0], height)
  137. # 把list转化为可以直接返回的json格式
  138. def list_to_json(li):
  139. #print(li)
  140. aJson = json.dumps(li, ensure_ascii=False)
  141. print(aJson)
  142. # dict1={}
  143. # dict1["front"]="/home/seecoder/Documents/pose-correction/pc-demo/pose_processed_images/"+str(global_index[0])+"-0-result.jpg"
  144. # dict1["right"] = "/home/seecoder/Documents/pose-correction/pc-demo/pose_processed_images/" + \
  145. # str(global_index[0] )+ "-1-result.jpg"
  146. # print(dict1)
  147. return aJson
  148. # print(dic_data)
  149. app = Flask(__name__)
  150. def save_file(filed):
  151. base = "pose_source_images/"
  152. filename = filed.filename
  153. index = global_index[0]
  154. #global_index[0] = index
  155. suffix = ".png"
  156. if filename.find("jpg") > 0:
  157. suffix = ".jpg"
  158. elif filename.find("png") > 0:
  159. suffix = ".png"
  160. save_name = ""
  161. print(str(index)+"index")
  162. print(filename+"filename")
  163. if "front" in filename:
  164. save_name = base + str(index) + str("-0") + suffix
  165. print(filename+"filename_front")
  166. print(save_name+"savename_front")
  167. elif "right" in filename:
  168. save_name = base + str(index) + str("-1") + suffix
  169. print(filename+"filename_right")
  170. print(save_name+"savename_right")
  171. else :
  172. print("nope")
  173. filed.save(save_name)
  174. print(filename)
  175. print(save_name)
  176. #运行动态分析的入口
  177. def run_video(mode,num,ana=1):
  178. q="./video/"+str(num)+".mp4"
  179. re= api_dyna(q,mode,ana)
  180. return re
  181. def lookup_video(num,ana=0):
  182. q="./video/"+str(num)+".mp4"
  183. mode=lookup_data(num)
  184. re= api_dyna(q,mode,ana)
  185. process_db(num)
  186. return re
  187. ###send a video and return a id marked the video (identical)
  188. @app.route('/get_videoid',methods=['POST'])
  189. @cross_origin()
  190. def get_videoid():
  191. dict_video_=request.form.to_dict()
  192. dict_video_mp4=request.files.to_dict()
  193. print(dict_video_mp4)
  194. ff=dict_video_mp4["13"]
  195. mode=dict_video_["mode"]
  196. global global_video_index
  197. global_video_index=int(add_new_data_dyna(mode))
  198. base="./video/"
  199. filename=base+str(global_video_index)+".mp4"
  200. ff.save(filename)
  201. return {"id":str(global_video_index)}
  202. @app.route('/get_video_data',methods=['POST'])
  203. @cross_origin()
  204. def get_video_data():
  205. dict_video_=request.form.to_dict()
  206. global global_video_index
  207. global_video_index=int(dict_video_["id"])
  208. mode=str(lookup_data(global_video_index))#get database mode
  209. re=run_video(mode,global_video_index,1)
  210. return re
  211. @app.route('/get_video_status',methods=['POST'])
  212. @cross_origin()
  213. def get_video_status():
  214. dict_video_=request.form.to_dict()
  215. global global_video_index
  216. global_video_index=int(dict_video_["id"])
  217. return {"result":get_status(global_video_index)==1}
  218. @app.route('/query_video',methods=['POST'])
  219. @cross_origin()
  220. def query_video():
  221. dict_video_=request.form.to_dict()
  222. global global_video_index
  223. global_video_index=int(dict_video_["id"])
  224. print(global_video_index)
  225. return lookup_video(global_video_index,0)
  226. @app.route('/get_3D',methods=['POST'])
  227. @cross_origin()
  228. def get_3D():
  229. return "404"
  230. @app.route('/query_3D',methods=['POST'])
  231. @cross_origin()
  232. def query_3D():
  233. return 404
  234. #result={xx:xx,xx:xx}
  235. #result={power:{val:xx,path:xx},strength:{val:xx,path:xx}}
  236. #1.锻炼建议
  237. #2.发送视频
  238. #3.
  239. @app.route('/send_form', methods=['POST'])
  240. @cross_origin()
  241. def send_form():
  242. text_data = request.form.to_dict()
  243. fileList = request.files.to_dict()
  244. global global_index
  245. global_index[0]=int(add_new_data())
  246. for filed in fileList.values():
  247. save_file(filed)
  248. height = float(text_data["height"]) if text_data["height"] != "undefined" else None
  249. run_the_process(global_index[0], height)
  250. process_db(int(global_index[0]))
  251. return {
  252. "id":global_index[0],
  253. "status": True if height is not None else False
  254. }
  255. def get_base64(path):
  256. with open(path, "rb") as f:
  257. base64_data = base64.b64encode(f.read())
  258. return base64_data.decode()
  259. @app.route('/get_result', methods=['POST'])
  260. @cross_origin()
  261. def run_project():
  262. id = request.form.to_dict()["id"]
  263. print(id)
  264. base = "pose_processed_images"
  265. global_index[0]=int(id)
  266. read_pose_processes_txt_result()
  267. print(base + "/" + str(global_index[0]) + "-0-result.png")
  268. return {
  269. "front": get_base64(base + "/" + str(global_index[0]) + "-0-result.png"),
  270. "right": get_base64(base + "/" + str(global_index[0]) + "-1-result.png"),
  271. "data": list_to_json(li_return),
  272. }
  273. if __name__ == '__main__':
  274. # read_pose_processes_txt_result()
  275. # print(list_to_json(li_return))
  276. #app.run()
  277. app.run(host="0.0.0.0", port=8090,debug=True)
  278. #app.run(host="0.0.0.0", port=8090)
  279. CORS(app, resouces=r'/*')
  280. #run_video("gaotaitui",27,0)