这一周主要完成了剩余的App前端代码和后端接口,PSGAN模型的微调和flask上妆接口。具体工作参考每个团队成员的个人博客。
整合后端接口和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,携带动态列表通过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页面如下: