| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- import json
- import os
- from flask import Flask, request
- from flask_cors import *
- from PIL import Image
- import base64
- from analyse_func import do_analysis
- from classify import api_dyna
- from db_project import get_status,process_db,lookup_data ,add_new_data_dyna,add_new_data,create_table_dynamic,create_table,create_db
- # str_res=""
- # a dict contains the txt
- dict_total = {}
- li_last = []
- # store dic_data's json format
- bJson = ""
- global_index = [6]
- global_video_index=0
- li_return = []
- img_return = []
- flag_run=False
- ##jump
- ##result["jump_power"]["level"]/["path"]/["val"]
- ##result["core_strength"]["level"]/["path"] 1 2 3 4
- ##result["landing_position"]["level"]/["path"]["val"]
- ##juanfu
- ## result["head_power"]["level"]/["path"]/["val"]
- #result["core_strength"]["level"]/["path"]
- ##result["body_stability"]["level"]/["val"]
- ##pingban
- """
- result["arm_strength"]["level"]/["path"]/["val"]
- result["stability"]["level"]/["path"]/["val"]
- result["standard"]["level"]/["path"]/["val"]
- """
- ##shendun
- """
- result["leg_strength"]["level"]/["path"]
- """
- ##gaotaitui
- """
- result["standard"]["level"]/["path"]
- """
- # read txt file and change it to the list format
- def read_pose_processes_txt_result():
- file_dir = "pose_processed_txt" # the file's path
- dir_list = os.listdir(file_dir) # dir_list=["1.txt","2.txt","3.txt","4.txt"]
- global li_last # 分析的最后结果
- global dict_total # list的字典
- li_last = []
- dict_total = {}
- for cur_file in dir_list:
- if (cur_file[0:len(cur_file) - 4] != str(global_index[0])):
- # print(cur_file[0:len(cur_file)-4])
- # print(global_index[0])
- continue
- path = os.path.join(file_dir, cur_file) # path="pose_processed_txt/1.txt"
- f = open(path, encoding='utf-8')
- lines = f.readlines()
- # process logic,{"正面分析":{“头部分析”:{},"肩部分析": {}}
- dic_data = {}
- for i in range(len(lines)):
- if lines[i][0] == '-':
- continue
- elif lines[i][0] == "正":
- dic_data = {"title": "正面分析如下"}
- li = []
- dic_1 = {}
- i = i + 1 # i是头部分析那行
- dic_1["name"] = "头部分析"
- dic_1["value"] = lines[i][5:len(lines[i]) - 1]
- i = i + 1 # 头部数字级别
- dic_1["level"] = int(lines[i].strip())
- li.append(dic_1)
- dic_2 = {}
- i += 2 #第六行 i=6
- dic_2["name"] = "肩部分析"
- #num_risk_1 = int(lines[i + 1].strip())
- dic_2["value"] = lines[i][:-1] + " " + lines[(i + 1)][:-1]
- num_risk_2 = int(lines[i + 2].strip())
- dic_2["level"] = int(num_risk_2)
- li.append(dic_2)
- i += 4 #i=10
- dic_3 = {}
- dic_3["name"] = "髋部分析"
- dic_3["value"] = lines[i][:-1] + " " + lines[(i + 1)][:-1]
- num_risk_1 = int(lines[i + 2].strip())
- #num_risk_2 = int(lines[i + 3].strip())
- dic_3["level"] = int(max(num_risk_1, 0))
- i += 4 #i=14
- dic_4 = {"name": "腿型分析", "value": lines[i][:-1]}
- li.append(dic_3)
- li.append(dic_4)
- dic_data["detail"] = li
- if ("非" in lines[i][:-1]):
- dic_4["level"] = 0
- else:
- dic_4["level"] = 1
- li_last.append(dic_data)
- elif lines[i][0] == "侧":
- li = []
- dic_data = {"title": "侧面分析如下"}
- dic_1 = {}
- i += 1
- dic_1["name"] = "颈椎分析"
- if lines[i][4] != ":":
- dic_1["value"] = lines[i][0:len(lines[i]) - 1]
- else:
- dic_1["value"] = lines[i][5:len(lines[i]) - 1]
- dic_1["level"] = int(lines[i + 1].strip())
- i += 2
- dic_2 = {"name": "站姿分析", "value": lines[i][5:len(lines[i]) - 1]}
- dic_2["level"] = int(lines[i + 1].strip())
- i += 2
- dic_3 = {"name": "髋部分析", "value": lines[i][5:len(lines[i]) - 1]}
- dic_3["level"] = int(lines[i + 1].strip())
- i += 2
- dic_4 = {"name": "膝盖分析", "value": lines[i][7:len(lines[i]) - 1]}
- dic_4["level"] = int(lines[i + 1].strip())
- li.append(dic_1)
- li.append(dic_2)
- li.append(dic_3)
- li.append(dic_4)
- dic_data["detail"] = li
- li_last.append(dic_data)
- else:
- i += 1
- print(li_last)
- dict_total[cur_file] = li_last
- f.close()
- global li_return
- li_return = dict_total[(str(global_index[0]) + ".txt")]
- def run_the_process(index: int = 0, height: float = 110):
- # sys.path.append("../analyse_func.py")
- # import analyse_func
- #print(global_index[0])
- do_analysis(global_index[0], height)
- # 把list转化为可以直接返回的json格式
- def list_to_json(li):
- #print(li)
- aJson = json.dumps(li, ensure_ascii=False)
- print(aJson)
- # dict1={}
- # dict1["front"]="/home/seecoder/Documents/pose-correction/pc-demo/pose_processed_images/"+str(global_index[0])+"-0-result.jpg"
- # dict1["right"] = "/home/seecoder/Documents/pose-correction/pc-demo/pose_processed_images/" + \
- # str(global_index[0] )+ "-1-result.jpg"
- # print(dict1)
- return aJson
- # print(dic_data)
- app = Flask(__name__)
- def save_file(filed):
- base = "pose_source_images/"
- filename = filed.filename
- index = global_index[0]
- #global_index[0] = index
- suffix = ".png"
- if filename.find("jpg") > 0:
- suffix = ".jpg"
- elif filename.find("png") > 0:
- suffix = ".png"
- save_name = ""
- print(str(index)+"index")
- print(filename+"filename")
- if "front" in filename:
- save_name = base + str(index) + str("-0") + suffix
- print(filename+"filename_front")
- print(save_name+"savename_front")
- elif "right" in filename:
- save_name = base + str(index) + str("-1") + suffix
- print(filename+"filename_right")
- print(save_name+"savename_right")
- else :
- print("nope")
- filed.save(save_name)
- print(filename)
- print(save_name)
- #运行动态分析的入口
- def run_video(mode,num,ana=1):
- q="./video/"+str(num)+".mp4"
- re= api_dyna(q,mode,ana)
- return re
- def lookup_video(num,ana=0):
- q="./video/"+str(num)+".mp4"
- mode=lookup_data(num)
- re= api_dyna(q,mode,ana)
- process_db(num)
- return re
- ###send a video and return a id marked the video (identical)
- @app.route('/get_videoid',methods=['POST'])
- @cross_origin()
- def get_videoid():
- dict_video_=request.form.to_dict()
- dict_video_mp4=request.files.to_dict()
- print(dict_video_mp4)
- ff=dict_video_mp4["13"]
- mode=dict_video_["mode"]
-
- global global_video_index
- global_video_index=int(add_new_data_dyna(mode))
-
- base="./video/"
- filename=base+str(global_video_index)+".mp4"
-
- ff.save(filename)
-
-
- return {"id":str(global_video_index)}
- @app.route('/get_video_data',methods=['POST'])
- @cross_origin()
- def get_video_data():
- dict_video_=request.form.to_dict()
- global global_video_index
- global_video_index=int(dict_video_["id"])
- mode=str(lookup_data(global_video_index))#get database mode
- re=run_video(mode,global_video_index,1)
- return re
- @app.route('/get_video_status',methods=['POST'])
- @cross_origin()
- def get_video_status():
- dict_video_=request.form.to_dict()
- global global_video_index
- global_video_index=int(dict_video_["id"])
- return {"result":get_status(global_video_index)==1}
- @app.route('/query_video',methods=['POST'])
- @cross_origin()
- def query_video():
- dict_video_=request.form.to_dict()
- global global_video_index
- global_video_index=int(dict_video_["id"])
- print(global_video_index)
- return lookup_video(global_video_index,0)
- @app.route('/get_3D',methods=['POST'])
- @cross_origin()
- def get_3D():
- return "404"
- @app.route('/query_3D',methods=['POST'])
- @cross_origin()
- def query_3D():
- return 404
- #result={xx:xx,xx:xx}
- #result={power:{val:xx,path:xx},strength:{val:xx,path:xx}}
- #1.锻炼建议
- #2.发送视频
- #3.
- @app.route('/send_form', methods=['POST'])
- @cross_origin()
- def send_form():
- text_data = request.form.to_dict()
- fileList = request.files.to_dict()
- global global_index
- global_index[0]=int(add_new_data())
- for filed in fileList.values():
- save_file(filed)
- height = float(text_data["height"]) if text_data["height"] != "undefined" else None
- run_the_process(global_index[0], height)
- process_db(int(global_index[0]))
- return {
- "id":global_index[0],
- "status": True if height is not None else False
- }
- def get_base64(path):
- with open(path, "rb") as f:
- base64_data = base64.b64encode(f.read())
- return base64_data.decode()
- @app.route('/get_result', methods=['POST'])
- @cross_origin()
- def run_project():
- id = request.form.to_dict()["id"]
- print(id)
- base = "pose_processed_images"
- global_index[0]=int(id)
- read_pose_processes_txt_result()
- print(base + "/" + str(global_index[0]) + "-0-result.png")
- return {
- "front": get_base64(base + "/" + str(global_index[0]) + "-0-result.png"),
- "right": get_base64(base + "/" + str(global_index[0]) + "-1-result.png"),
- "data": list_to_json(li_return),
- }
- if __name__ == '__main__':
- # read_pose_processes_txt_result()
- # print(list_to_json(li_return))
- #app.run()
- app.run(host="0.0.0.0", port=8090,debug=True)
- #app.run(host="0.0.0.0", port=8090)
- CORS(app, resouces=r'/*')
- #run_video("gaotaitui",27,0)
|