创新实训第三周团队博客
这一周主要完成了剩余的App前端代码和后端接口,PSGAN模型的微调和flask上妆接口。具体工作参考每个团队成员的个人博客。
前端App工作
整合后端接口和PSGAN的上妆接口,修复App的一些bug。
最终效果如下所示:
后端工作
和前端协调接口开发,实现动态相关接口,部分文档如下:
1,发布动态(需要验权)
1)方法:POST
2)URL:/star/publish
3)参数:content动态内容, images动态图片,目前只支持一张
4)响应:内部错误返回状态码 500,发布成功返回状态码 200,并携带动态信息
2,转发动态(需要验权)
1)方法:POST
2)URL:/star/forward/:starID
3)参数:content和images同上,starID是转发动态的id
4)响应:内部错误返回状态码 500,发布成功返回状态码 200,并携带动态信息
3,更新动态(需要验权)
1)方法:POST
2)URL:/star/update/:starID
3)参数:参数同1
4)响应:内部错误返回状态码 500,发布成功返回状态码 200,并携带动态信息
4,删除动态(需要验权)
1)方法:GET
2)URL:/star/delete/:starID
3)参数:starID是动态id
4)响应:内部错误返回状态码 500,发布成功返回状态码 200
5,点赞动态(需要验权)
1)方法:GET
2)URL:/star/like/:starID
3)参数:starID是动态id
4)响应:内部错误返回状态码 500,发布成功返回状态码 200
6,取消点赞动态(需要验权)
1)方法:GET
2)URL:/star/cancel_like/:starID
3)参数:starID是动态id
4)响应:内部错误返回状态码 500,发布成功返回状态码 200
7,动态详情
1)方法:GET
2)URL:/star/details/:starID
3)参数:starID是动态id
4)响应:内部错误返回状态码 500,动态已被删除返回状态码400,发布成功返回状态码 200,携带动态详情数据
8,获取点赞用户列表
1)方法:GET
2)URL:/star/like_users/:starID
3)参数:starID是动态id
4)响应:内部错误返回状态码 500,发布成功返回状态码 200,携带点赞用户列表
9,获取转发动态列表
1)方法:GET
2)URL:/star/forward_stars/:starID
3)参数:starID是动态id
4)响应:内部错误返回状态码 500,发布成功返回状态码 200,携带转发动态列表
10,获取用户全部动态
1)方法:GET
2)URL:/user/:id/stars
3)参数:id是用户id
4)响应:内部错误返回状态码 500,发布成功返回状态码 200,携带动态列表
PSGAN 模型搭建
通过flask框架完成模型上妆接口。
flask相关代码如下:
from flask import Flask, request, render_template, Response
from data_loaders.makeup_utils import *
from solver_psgan import Solver_PSGAN
app = Flask(__name__)
@app.route('/generate_makeup', methods=['POST', 'GET'])
def generate_makeup():
if request.method == 'POST':
try:
example_image = request.files.get('example_image')
user_image = request.files.get('user_image')
shade_alpha = request.form.get("shade_alpha")
local_flag = request.form.get("local_flag")
lip_flag = request.form.get("lip_flag")
eye_flag = request.form.get("eye_flag")
face_flag = request.form.get("face_flag")
if str(local_flag) == '1':
print('local flag')
images = [user_image, example_image]
mask2use = get_mask(Image.open(images[1]), lip_flag, eye_flag, face_flag)
images = [Image.open(image) for image in images]
images = [preprocess_image(image) for image in images]
transferred_image = Solver_PSGAN.partial_test(*(images[0]), *(images[1]), *(images[0]), mask2use, shade_alpha=float(shade_alpha))
else:
images = [user_image, example_image]
images = [Image.open(image) for image in images]
images = [preprocess_image(image) for image in images]
transferred_image = Solver_PSGAN.image_test(*(images[0]), *(images[1]), shade_alpha=float(shade_alpha))
transferred_image.save('./static/images/transferred_image.png')
with open('static/images/transferred_image.png', 'rb') as f:
image = f.read()
resp = Response(image, status=200, mimetype="image/png")
return resp
except Exception as e:
print(str(e))
resp = Response(response='Exception', status=500, content_type='text/html;charset=utf8')
return resp
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
用于测试接口的HTML页面如下: