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)