微信小程序:使用photo2cartoon库,实现人像照片转卡通

2022-05-02  本文已影响0人  我的小小笔尖

主要步骤

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,好像不能自定义文件名。

上一篇 下一篇

猜你喜欢

热点阅读