flask_api.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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. li_return = []
  18. img_return = []
  19. # read txt file and change it to the list format
  20. def read_pose_processes_txt_result():
  21. file_dir = "pose_processed_txt" # the file's path
  22. dir_list = os.listdir(file_dir) # dir_list=["1.txt","2.txt","3.txt","4.txt"]
  23. global li_last # 分析的最后结果
  24. global dict_total # list的字典
  25. li_last = []
  26. dict_total = {}
  27. for cur_file in dir_list:
  28. if (cur_file[0:len(cur_file) - 4] != str(global_index[0])):
  29. # print(cur_file[0:len(cur_file)-4])
  30. # print(global_index[0])
  31. continue
  32. path = os.path.join(file_dir, cur_file) # path="pose_processed_txt/1.txt"
  33. f = open(path, encoding='utf-8')
  34. lines = f.readlines()
  35. # process logic,{"正面分析":{“头部分析”:{},"肩部分析": {}}
  36. dic_data = {}
  37. for i in range(len(lines)):
  38. if lines[i][0] == '-':
  39. continue
  40. elif lines[i][0] == "正":
  41. dic_data = {"title": "正面分析如下"}
  42. li = []
  43. dic_1 = {}
  44. i = i + 1 # i是头部分析那行
  45. dic_1["name"] = "头部分析"
  46. dic_1["value"] = lines[i][5:len(lines[i]) - 1]
  47. i = i + 1 # 头部数字级别
  48. dic_1["level"] = int(lines[i].strip())
  49. li.append(dic_1)
  50. dic_2 = {}
  51. i += 2 #第六行 i=6
  52. dic_2["name"] = "肩部分析"
  53. #num_risk_1 = int(lines[i + 1].strip())
  54. dic_2["value"] = lines[i][:-1] + " " + lines[(i + 1)][:-1]
  55. num_risk_2 = int(lines[i + 2].strip())
  56. dic_2["level"] = int(num_risk_2)
  57. li.append(dic_2)
  58. i += 4 #i=10
  59. dic_3 = {}
  60. dic_3["name"] = "髋部分析"
  61. dic_3["value"] = lines[i][:-1] + " " + lines[(i + 1)][:-1]
  62. num_risk_1 = int(lines[i + 2].strip())
  63. #num_risk_2 = int(lines[i + 3].strip())
  64. dic_3["level"] = int(max(num_risk_1, 0))
  65. i += 4 #i=14
  66. dic_4 = {"name": "腿型分析", "value": lines[i][:-1]}
  67. li.append(dic_3)
  68. li.append(dic_4)
  69. dic_data["detail"] = li
  70. if ("非" in lines[i][:-1]):
  71. dic_4["level"] = 0
  72. else:
  73. dic_4["level"] = 1
  74. li_last.append(dic_data)
  75. elif lines[i][0] == "侧":
  76. li = []
  77. dic_data = {"title": "侧面分析如下"}
  78. dic_1 = {}
  79. i += 1
  80. dic_1["name"] = "颈椎分析"
  81. if lines[i][4] != ":":
  82. dic_1["value"] = lines[i][0:len(lines[i]) - 1]
  83. else:
  84. dic_1["value"] = lines[i][5:len(lines[i]) - 1]
  85. dic_1["level"] = int(lines[i + 1].strip())
  86. i += 2
  87. dic_2 = {"name": "站姿分析", "value": lines[i][5:len(lines[i]) - 1]}
  88. dic_2["level"] = int(lines[i + 1].strip())
  89. i += 2
  90. dic_3 = {"name": "髋部分析", "value": lines[i][5:len(lines[i]) - 1]}
  91. dic_3["level"] = int(lines[i + 1].strip())
  92. i += 2
  93. dic_4 = {"name": "膝盖分析", "value": lines[i][7:len(lines[i]) - 1]}
  94. dic_4["level"] = int(lines[i + 1].strip())
  95. li.append(dic_1)
  96. li.append(dic_2)
  97. li.append(dic_3)
  98. li.append(dic_4)
  99. dic_data["detail"] = li
  100. li_last.append(dic_data)
  101. else:
  102. i += 1
  103. print(li_last)
  104. dict_total[cur_file] = li_last
  105. f.close()
  106. global li_return
  107. li_return = dict_total[(str(global_index[0]) + ".txt")]
  108. def run_the_process(index: int = 0, height: float = 110):
  109. # sys.path.append("../analyse_func.py")
  110. # import analyse_func
  111. #print(global_index[0])
  112. do_analysis(global_index[0], height)
  113. # 把list转化为可以直接返回的json格式
  114. def list_to_json(li):
  115. #print(li)
  116. aJson = json.dumps(li, ensure_ascii=False)
  117. print(aJson)
  118. # dict1={}
  119. # dict1["front"]="/home/seecoder/Documents/pose-correction/pc-demo/pose_processed_images/"+str(global_index[0])+"-0-result.jpg"
  120. # dict1["right"] = "/home/seecoder/Documents/pose-correction/pc-demo/pose_processed_images/" + \
  121. # str(global_index[0] )+ "-1-result.jpg"
  122. # print(dict1)
  123. return aJson
  124. # print(dic_data)
  125. app = Flask(__name__)
  126. def save_file(file):
  127. base = "pose_source_images/"
  128. filename = file.filename
  129. index = global_index[0]
  130. #global_index[0] = index
  131. suffix = ".png"
  132. if filename.find("jpg") > 0:
  133. suffix = ".jpg"
  134. elif filename.find("png") > 0:
  135. suffix = ".png"
  136. save_name = ""
  137. print(str(index)+"index")
  138. print(filename+"filename")
  139. if "front" in filename:
  140. save_name = base + str(index) + str("-0") + suffix
  141. print(filename+"filename_front")
  142. print(save_name+"savename_front")
  143. elif "right" in filename:
  144. save_name = base + str(index) + str("-1") + suffix
  145. print(filename+"filename_right")
  146. print(save_name+"savename_right")
  147. else :
  148. print("nope")
  149. file.save(save_name)
  150. print(filename)
  151. print(save_name)
  152. #运行动态分析的入口
  153. def run_video(mode,ana=1):
  154. num=add_new_data_dyna(mode)
  155. q="./video/"+str(num)+".mp4"
  156. #qqq=os.path.abspath(q)
  157. #r="capture_image"+str(re["2"]["num"])+".png"
  158. #a=os.path.join(qqq,r)
  159. video_path=q
  160. re= api_dyna(q,mode,ana)
  161. return re
  162. def lookup_video(num,ana=0):
  163. q="./video/"+str(num)+".mp4"
  164. video_path=q
  165. mode=lookup_data(num)
  166. re= api_dyna(q,mode,ana)
  167. return re
  168. @app.route('/send_form', methods=['POST'])
  169. @cross_origin()
  170. def send_form():
  171. text_data = request.form.to_dict()
  172. fileList = request.files.to_dict()
  173. global global_index
  174. global_index[0]=int(add_new_data())
  175. for file in fileList.values():
  176. save_file(file)
  177. height = float(text_data["height"]) if text_data["height"] != "undefined" else None
  178. run_the_process(global_index[0], height)
  179. process_db(int(global_index[0]))
  180. return {
  181. "id":global_index[0],
  182. "status": True if height is not None else False
  183. }
  184. def get_base64(path):
  185. with open(path, "rb") as f:
  186. base64_data = base64.b64encode(f.read())
  187. return base64_data.decode()
  188. @app.route('/get_result', methods=['POST'])
  189. @cross_origin()
  190. def run_project():
  191. id = request.form.to_dict()["id"]
  192. print(id)
  193. base = "pose_processed_images"
  194. global_index[0]=int(id)
  195. read_pose_processes_txt_result()
  196. print(base + "/" + str(global_index[0]) + "-0-result.png")
  197. return {
  198. "front": get_base64(base + "/" + str(global_index[0]) + "-0-result.png"),
  199. "right": get_base64(base + "/" + str(global_index[0]) + "-1-result.png"),
  200. "data": list_to_json(li_return),
  201. }
  202. if __name__ == '__main__':
  203. # read_pose_processes_txt_result()
  204. # print(list_to_json(li_return))
  205. #app.run()
  206. app.run(host="0.0.0.0", port=8090,debug=True)
  207. CORS(app, resouces=r'/*')