multi-style_portrait_stylization|人像多风格漫画

本项目用于将人像照片转换为卡通风格。采用DCT-Net模型,支持GPU/CPU推理,适用于包含人脸的人像照片,推理流程包括预处理、人脸关键点检测、人脸提取和对齐,以及背景融合得到最终效果。

multi-style_portrait_stylization|人像多风格漫画

模型描述

街拍,人像,团建照片…随意上传您心仪的照片,选择对应风格(日漫风,3D风,手绘风等等),一键即可转换为不同风格的卡通化图片!多风格的人像模型已经内置好,点点鼠标就可以抢占朋友圈的C位。

期望模型使用方式以及适用范围

该任务采用一种全新的域校准图像翻译模型DCT-Net(Domain-Calibrated Translation),利用小样本的风格数据,即可得到高保真、强鲁棒、易拓展的人像风格转换模型,并通过端到端推理快速得到风格转换结果。

使用方式和范围

使用方式:

  • 支持GPU/CPU推理,在任意真实人物图像上进行直接推理;

使用范围:

  • 包含人脸的人像照片(3通道RGB图像,支持PNG、JPG、JPEG格式),人脸分辨率大于100×100,总体图像分辨率小于3000×3000,低质人脸图像建议预先人脸增强处理。

目标场景:

  • 艺术创作、社交娱乐、隐私保护场景,自动化生成卡通肖像。

模型局限性以及可能的偏差

  • 低质/低分辨率人脸图像由于本身内容信息丢失严重,无法得到理想转换效果,可预先采用人脸增强模型预处理图像解决;
  • 小样本数据涵盖场景有限,人脸暗光、阴影干扰可能会影响生成效果。

模型推理流程

预处理

  • 人脸关键点检测
  • 人脸提取&对齐,得到256×256大小的对齐人脸

推理

  • 为控制推理效率,人脸及背景resize到指定大小分别推理,再背景融合得到最终效果;
  • 亦可将整图依据人脸尺度整体缩放到合适尺寸,直接单次推理

数据评估

使用CelebA公开人脸数据集进行评测,在FID/ID/用户偏好等指标上均达SOTA结果:

MethodFIDIDPref.APref.B
CycleGAN57.080.557.11.4
U-GAT-IT68.400.585.01.5
Toonify55.270.623.74.2
pSp69.380.601.62.5
Ours35.920.7182.690.5

部署教程

如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键后,在弹出的新窗口内输入CMD并按下回车,打开CMD窗口,按顺序执行如下的每一条命令。

首先我们需要确认一个工作目录,用来存放multi-style_portrait_stylization的相关环境依赖文件。本站所选择的目录为D盘的根目录下openai.wiki文件夹,完整路径为:D:\openai.wiki\multi-style_portrait_stylization

检测D盘是否在openai.wiki目录下有没有multi-style_portrait_stylization文件夹,没有则创建该文件夹。

if not exist D:\openai.wiki\multi-style_portrait_stylization mkdir D:\openai.wiki\multi-style_portrait_stylization

强制切换工作路径为D盘的openai.wiki\multi-style_portrait_stylization文件夹。

cd /d D:\openai.wiki\multi-style_portrait_stylization

为不影响电脑中的现有环境,请一定要安装Conda,如果您不知道什么是Conda,或者未安装过Conda,请参考如下文章,安装部署Conda之后再继续以下步骤。

在CMD中执行下面的命令行,创建Conda虚拟环境至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。

conda create -p D:\openai.wiki\multi-style_portrait_stylization\ENV python=3.7

执行完成上面的命令之后,将会在CMD窗口中看到Proceed ([y]/n)?提示,我们直接按下回车即可。

初始化Conda环境,避免后续可能报错。

conda init cmd.exe

激活已创建的Conda环境,这样我们可以将我们后续所需要的所有环境依赖都安装至此环境下。

conda activate D:\openai.wiki\multi-style_portrait_stylization\ENV

执行如下命令,安装阿里达摩院相关依赖。

pip install modelscope

执行如下命令,安装torch依赖。

pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

执行如下命令,安装CV2依赖库。

pip install opencv-python

关于tensorflow的安装,支持CPU和GPU双版本,以下两行代码选择其中一个执行安装即可。

  • 如果你想用CPU来计算,请复制第一行内容执行。
  • 如果你想用GPU来计算,请复制第二行内容执行。
pip install --upgrade tensorflow==1.15
pip install --upgrade tensorflow-gpu==1.15

执行如下命令,卸载较新的protobuf版本依赖库。

pip uninstall protobuf

执行如下命令,安装3.20.0版本的protobuf依赖库。

pip install --force-reinstall protobuf==3.20.0

执行如下命令,安装easydict依赖库。

pip install easydict

使用教程

⚠️注意:您所使用的图片必须为PNG格式,如果使用其它格式基本必会报错!

推荐下载VS Code代码编辑器,然后在代码编辑器器内新建一个Python文件,粘贴如下代码,在代码编辑器的右下角选择Python环境为D:\openai.wiki\multi-style_portrait_stylization\ENV

素描

本次本站先以素描模型为例,让您先将代码能够正常运行,以下是运行时所需要的代码和输出示例。

该模型官方并未给了示例,本站已经帮您写好了相关的代码,复制粘贴即可使用。

注意:请自行修改相应名称和路径为自己项目结构,然后再执行,否则会报错。

# 此脚本由openai.wiki提供,转载请注明出处,谢谢配合。

import cv2
from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

img_cartoon = pipeline(Tasks.image_portrait_stylization, 
                       model='damo/cv_unet_person-image-cartoon-sketch_compound-models')
# 图片路径
resultIMGName = 'Beauty_Girl'
# 原图格式 | 尽量不要改
resultIMGFormat = '.png'
# 原图路径
resultIMGPath = 'D:\openai.wiki\multi-style_portrait_stylization'
# 输出图像名称
outputIMGName = 'Beauty_Girl_FX'
# 输出格式 | 尽量不要改
outputFormat = '.png'
# 输出路径
outputIMGPath = 'D:\openai.wiki\multi-style_portrait_stylization'

result = img_cartoon(('%s/%s%s'%(resultIMGPath,resultIMGName,resultIMGFormat)).replace('\\', '/'))
cv2.imwrite((('%s/%s%s'%(outputIMGPath,outputIMGName,outputFormat)).replace('\\', '/')), result[OutputKeys.OUTPUT_IMG])
print ('输出完成')

效果展示

可以看到效果还可以,中规中矩吧。

其它效果

代码示例

为方便大家使用,本站已经将所有效果的代码整到了一起,大家只使用这一段代码,就可以生成各种效果啦。只需要修改Fun的参数即可。

# 此脚本由openai.wiki提供,转载请注明出处,谢谢配合。

from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import cv2

# 文本识别
class DCT_Net():
    def __init__(self, Fun):
        if Fun == 'SuMiao':
            # 素描模型
            self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-sketch_compound-models')
        elif Fun == 'YiShu':
            # 艺术模型
            self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-artstyle_compound-models')
        elif Fun == '3D':
            # 3D模型
            self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-3d_compound-models')
        elif Fun == 'ShouHui':
            # 手绘模型
            self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-handdrawn_compound-models')
        elif Fun == 'KaTong':
            # 卡通模型
            self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon_compound-models')

    # 读取本地文件
    def file_models(self):
        result = self.img_cartoon(IMG_File)
        cv2.imwrite(OUT_File, result[OutputKeys.OUTPUT_IMG])

# 自定义配置
Fun = '3D'                # 素描=SuMiao;艺术=YiShu;3D;手绘=ShouHui;卡通=KaTong。
IMG_File = 'D:/openai.wiki/multi-style_portrait_stylization/Beauty_Girl.png'              # 本地文件路径
OUT_File = 'D:/openai.wiki/multi-style_portrait_stylization/Beauty_Girl_%s.png'%Fun       # 文件输出路径

# 以下内容无需修改
DCTNet = DCT_Net(Fun)
DCTNet.file_models()

效果展示

All in one

如果您希望直接一次性通过一张图输出所有效果,可以使用如下代码,将会自动处理输入的图片,将其循环输出所有特效,非常方便。

# 此脚本由openai.wiki提供,转载请注明出处,谢谢配合。

from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import cv2

# 文本识别
class DCT_Net():
    def __init__(self, Fun):
        if Fun == 'SuMiao':
            # 素描模型
            self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-sketch_compound-models')
        elif Fun == 'YiShu':
            # 艺术模型
            self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-artstyle_compound-models')
        elif Fun == '3D':
            # 3D模型
            self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-3d_compound-models')
        elif Fun == 'ShouHui':
            # 手绘模型
            self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon-handdrawn_compound-models')
        elif Fun == 'KaTong':
            # 卡通模型
            self.img_cartoon = pipeline(Tasks.image_portrait_stylization, model='damo/cv_unet_person-image-cartoon_compound-models')

    # 读取本地文件
    def file_models(self):
        result = self.img_cartoon(IMG_File)
        cv2.imwrite(OUT_File, result[OutputKeys.OUTPUT_IMG])

# 自定义配置
resultIMGName = 'Beauty_Girl'                                          # 图片名称
resultIMGFormat = '.png'                                               # 原图格式 | 尽量不要改
resultIMGPath = 'D:\openai.wiki\multi-style_portrait_stylization'      # 原图路径

# 以下内容无需修改
IMG_File = ('%s/%s%s'%(resultIMGPath,resultIMGName,resultIMGFormat)).replace('\\', '/')
FX = ['SuMiao','YiShu','3D','ShouHui','KaTong']
for i in range(len(FX)):
    OUT_File = ('%s/%s_%s%s'%(resultIMGPath,resultIMGName,FX[i],resultIMGFormat)).replace('\\', '/')       # 文件输出路径
    DCTNet = DCT_Net(FX[i])
    DCTNet.file_models()

此文章由OpenAI开源维基百科原创发布,如若转载请注明出处:https://openai.wiki/multi-style_portrait_stylization.html

(0)
上一篇 2023-04-12 01:18
下一篇 2023-04-13 21:17

相关推荐

  • Geometrize|图像转几何图形

    Geometrize是将图像生成几何图形重绘的工具,该项目可以用圆形、三角形、矩形等几何图形重新绘制图像,并将结果导出为SVG、PNG、JPG、GIF等格式,可以快速生成特定图形的风格图像或动画文件。

    2023-06-29
    001.2K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(1条)

微信