| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- 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]
- li_return = []
- img_return = []
- # 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(file):
- base = "pose_source_images/"
- filename = file.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")
- file.save(save_name)
- print(filename)
- print(save_name)
- #运行动态分析的入口
- def run_video(mode,ana=1):
- num=add_new_data_dyna(mode)
- q="./video/"+str(num)+".mp4"
- #qqq=os.path.abspath(q)
- #r="capture_image"+str(re["2"]["num"])+".png"
- #a=os.path.join(qqq,r)
- video_path=q
- re= api_dyna(q,mode,ana)
- return re
- def lookup_video(num,ana=0):
- q="./video/"+str(num)+".mp4"
- video_path=q
- mode=lookup_data(num)
- re= api_dyna(q,mode,ana)
- return re
- @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 file in fileList.values():
- save_file(file)
- 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)
- CORS(app, resouces=r'/*')
|