主要步骤
1)安装paddlepaddle(百度的AI平台)
2)安装paddlehub(AI模型的开发/管理工具)
3)下载photo2cartoon模型库
4)写服务器端程序
5)写微信端程序
很多时候遇到AI、模型、对抗网络,等等专业词汇,会感觉头疼、不会、放弃了。
其实我们不需要知道很专业的东西,我们只需要会使用模型即可。
模型可以简单理解为一个函数,或者一个黑匣子,他有输入和输出,我们只需要会用即可。
服务器端程序(tornado+flask)
flask app.py 代码
使用flask_uploads实现照片上传,调用photo2.py进行转换
@app.route('/366/uploadphoto2', methods=['POST'])
def uploadphoto2():
if request.method == 'POST' and 'photo' in request.files:
try:
openid = request.form['openid']
new_file_name = openid+'.jpg'
upload_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), photo2_upload_path, new_file_name)
if os.path.isfile(upload_file_path):
os.remove(upload_file_path) # 文件已存在,则删除该文件(同名文件只能有1个)
uploaded_file_name = photos.save(request.files['photo'], name=new_file_name) # 上传后的文件
uploaded_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), photo2_upload_path, uploaded_file_name) # 上传后的文件绝对路径
# 人像转卡通
ins = photo2.Photo2(uploaded_file_path, openid)
result = ins.photo2cartoon()
except:
return {'status': -2}
else:
return result
return {'status':-1}
photo2.py代码,实现具体的转换功能
# -*- coding: utf-8 -*-
import paddlehub as hub
import os.path
# 模型加载
photo2cartoon_model = hub.Module(name='Photo2Cartoon')
class Photo2:
def photo2cartoon(self):
try:
# 照片转卡通,并保存到自己的openid目录下
result = photo2cartoon_model.Cartoon_GEN(
images=None,
paths=[self.filepath],
batch_size=1,
output_dir=self.ouput_dir,
visualization=True,
use_gpu=False
)
except:
return {'status':0, 'except':'photo2cartoon error'}
return {'status':1, 'photo2cartoonImage': os.path.join(self.ouput_dir, 'result_0.png')}
def __init__(self, filepath, openid):
# 待转换的原图
self.filepath = filepath
# 用户openid
self.openid = openid
self.ouput_dir = os.path.join('static','366','photo2',self.openid)
小程序界面效果
捕获52-1.JPG捕获52-2.JPG
补充信息
1)photo2cartoon 好像不支持serving,即不能通过hub serving start启动作为服务端。
2)转换后生产的图片文件名是result_0.png,好像不能自定义文件名。
网友评论