| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- 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
- # 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 = []
- ip_ad = "106.15.1.178"
- import pymysql
- db = pymysql.connect(host=ip_ad,
- user="root",
- password="root",
- port=3306, # 端口
- charset='utf8')
- cursor = db.cursor()
- def create_db():
- db = pymysql.connect(host=ip_ad,
- user="root",
- password="root",
- # port=3306, # 端口
- # charset='utf8')
- )
- cursor = db.cursor()
- # 使用 execute() 方法执行 SQL,如果表存在则删除
- # cursor.execute("DROP TABLE IF EXISTS pose")
- # 使用预处理语句创建表
- cursor.execute("create database if not exists pose")
- db.commit()
- db.close()
- cursor.close()
- def create_table():
- db = pymysql.connect(host=ip_ad,
- user="root",
- password="root",
- port=3306, # 端口
- charset='utf8',
- database="pose")
- cursor = db.cursor()
- sql = """CREATE TABLE pose(
- id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
- status INT)
- """
- insert_table_sql = """INSERT INTO `pose` (`status`) VALUES ('0')"""
- cursor.execute(sql)
- db.commit()
- cursor.execute(insert_table_sql)
- version = cursor.fetchone()
- print(version)
- db.commit()
- db.close()
- def add_new_data():
- db = pymysql.connect(host=ip_ad,
- user="root",
- password="root",
- port=3306, # 端口
- database="pose",
- charset='utf8')
- cursor = db.cursor()
- insert_table_sql = """INSERT INTO `pose` (`status`) VALUES ( '0')"""
- cursor.execute(insert_table_sql)
- db.commit()
- db.close()
- cursor.close()
- return_id = cursor.lastrowid
- return return_id
- def process_db(id):
- db = pymysql.connect(host=ip_ad,
- user="root",
- password="root",
- port=3306, # 端口
- database="pose",
- charset='utf8')
- sql = "update pose set status = 1 where id = %d " % id
- cursor = db.cursor()
- cursor.execute(sql)
- db.commit()
- cursor.close()
- db.close()
- def get_status(id):
- db = pymysql.connect(host=ip_ad,
- user="root",
- password="root",
- port=3306, # 端口
- database="pose",
- charset='utf8')
- sql = "select status from pose where id =%d" % id
- cursor = db.cursor()
- status = cursor.execute(sql)
- cursor.close()
- db.close()
- if str(status) == "1":
- return True
- return False
- # 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
- dic_2["name"] = "肩部分析"
- num_risk_1 = int(lines[i + 1].strip())
- dic_2["value"] = lines[i][:-1] + " " + lines[(i + 2)][:-1]
- num_risk_2 = int(lines[i + 3].strip())
- dic_2["level"] = int(max(num_risk_1, num_risk_2))
- li.append(dic_2)
- i += 5
- dic_3 = {}
- dic_3["name"] = "髋部分析"
- dic_3["value"] = lines[i][:-1] + " " + lines[(i + 2)][:-1]
- num_risk_1 = int(lines[i + 1].strip())
- num_risk_2 = int(lines[i + 3].strip())
- dic_3["level"] = int(max(num_risk_1, num_risk_2))
- i += 5
- dic_4 = {"name": "腿型分析", "value": lines[i][:-1] + " " + lines[(i + 1)][:-1] + " " + lines[(i + 2)][:-1]}
- li.append(dic_3)
- li.append(dic_4)
- dic_data["detail"] = li
- if ("非" in lines[(i + 2)][:-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_images(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 save_videos(file):
- base = "3d_pose/input/"
- filename = file.filename
- # global_index[0] = index
- save_name = base + filename
- print(filename)
- print(save_name)
- file.save(save_name)
- @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_images(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
- }
- @app.route('/submit_video', methods=['POST'])
- @cross_origin()
- def send_video():
- # text_data = request.form.to_dict()
- fileList = request.files.to_dict()
- for file in fileList.values():
- save_videos(file)
- 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'/*')
|