90 lines
3.1 KiB
Python
90 lines
3.1 KiB
Python
import requests
|
|
import os
|
|
from flask import Flask, jsonify, request, send_from_directory
|
|
|
|
app = Flask(__name__, static_folder='static')
|
|
|
|
|
|
@app.route('/')
|
|
def index():
|
|
return send_from_directory(app.static_folder, 'index.html')
|
|
|
|
|
|
@app.route('/static/<path:filename>')
|
|
def static_files(filename):
|
|
return send_from_directory(app.static_folder, filename)
|
|
|
|
|
|
@app.route('/change_cloth_base64', methods=['POST'])
|
|
def change_cloth_base64():
|
|
|
|
data = request.get_json()
|
|
print(f"change_cloth_base64 input data keys:{list(data.keys()) if data else None}")
|
|
if not data:
|
|
return jsonify({"ret": -1, "state": -1, "msg": "No JSON data provided"}), 400
|
|
|
|
human_img = data.get('human_img')
|
|
cloth_img = data.get('cloth_img')
|
|
|
|
if not human_img or not cloth_img:
|
|
return jsonify({"ret": -1, "state": -1, "msg": "Both human_img and cloth_img are required"}), 400
|
|
|
|
kuzi_img = data.get('kuzi_img')
|
|
|
|
try:
|
|
if kuzi_img:
|
|
payload = {
|
|
'model_image': human_img,
|
|
'shirt_image': cloth_img,
|
|
'pants_image': kuzi_img,
|
|
}
|
|
response = requests.post('http://127.0.0.1:12223/try-on', json=payload, timeout=360)
|
|
else:
|
|
payload = {
|
|
'model_image': human_img,
|
|
'shirt_image': cloth_img,
|
|
}
|
|
response = requests.post('http://127.0.0.1:12222/try-on', json=payload, timeout=360)
|
|
|
|
response.raise_for_status()
|
|
result = response.json()
|
|
result_image = result.get('result_url')
|
|
|
|
if not result_image:
|
|
return jsonify({"ret": -1, "state": -1, "msg": "Backend returned no image"}), 500
|
|
|
|
except requests.exceptions.Timeout:
|
|
return jsonify({"ret": -1, "state": -1, "msg": "Backend service timeout"}), 504
|
|
except requests.exceptions.ConnectionError:
|
|
return jsonify({"ret": -1, "state": -1, "msg": "Cannot connect to backend service"}), 502
|
|
except requests.exceptions.HTTPError as e:
|
|
return jsonify({"ret": -1, "state": -1, "msg": f"Backend error: {e}"}), 502
|
|
|
|
return jsonify({
|
|
"ret": 0,
|
|
"state": 0,
|
|
"msg": "success",
|
|
"data": result_image,
|
|
})
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.run(host="0.0.0.0", port=28888, debug=True)
|
|
|
|
# if __name__ == '__main__':
|
|
# # 证书路径(替换为你的域名)
|
|
# ssl_cert = '/etc/letsencrypt/live/change.xiangsilian.com/fullchain.pem'
|
|
# ssl_key = '/etc/letsencrypt/live/change.xiangsilian.com/privkey.pem'
|
|
|
|
# # 检查证书文件是否存在
|
|
# if not os.path.exists(ssl_cert) or not os.path.exists(ssl_key):
|
|
# print("❌ 证书文件不存在,请检查路径是否正确!")
|
|
# else:
|
|
# # 启动HTTPS服务(443端口需要root权限,所以运行时要加sudo)
|
|
# app.run(
|
|
# host='0.0.0.0', # 允许外网访问
|
|
# port=443, # HTTPS默认端口(非443需加端口访问,如8443)
|
|
# ssl_context=(ssl_cert, ssl_key), # 加载Let's Encrypt证书
|
|
# debug=True # 生产环境务必关闭debug
|
|
# )
|