Python使用AI photo2cartoon制作属于你的漫画头像

  • 1. 效果图
  • 2. 原理
  • 3. 源码
  • 参考
git clone https://github.com/minivision-ai/photo2cartoon.git
cd ./photo2cartoon
python test.py --photo_path images/photo_test.jpg --save_path images/cartoon_result.png

1. 效果图

官方效果图如下:


效果图1如下:

效果图2如下:


效果图3如下:

2. 原理

人像卡通风格渲染的目标是,在保持原图像 ID 信息和纹理细节的同时,将真实照片转换为卡通风格的非真实感图像。

但是图像卡通化任务面临着一些难题:

  • 卡通图像往往有清晰的边缘,平滑的色块和经过简化的纹理,与其他艺术风格有很大区别。使用传统图像处理技术生成的卡通图无法自适应地处理复杂的光照和纹理,效果较差;基于风格迁移的方法无法对细节进行准确地勾勒。
  • 数据获取难度大。绘制风格精美且统一的卡通画耗时较多、成本较高,且转换后的卡通画和原照片的脸型及五官形状有差异,因此不构成像素级的成对数据,难以采用基于成对数据的图像翻译(Paired Image Translation)方法。
  • 照片卡通化后容易丢失身份信息。基于非成对数据的图像翻译(Unpaired Image Translation)方法中的循环一致性损失(Cycle Loss)无法对输入输出的 id 进行有效约束。

小视科技的研究团队提出了一种基于生成对抗网络的卡通化模型,只需少量非成对训练数据,就能获得漂亮的结果。卡通风格渲染网络是该解决方案的核心,它主要由特征提取、特征融合和特征重建三部分组成。

3. 源码

源码及示例文件模型等见资源:https://download.csdn.net/download/qq_40985985/87739184

  • 代码下载 https://github.com/minivision-ai/photo2cartoon

  • 模型下载 https://drive.google.com/uc?id=1eDNGZT3jszHLXQ9XGIUPtcu72HdBmHuX&export=download

    人像卡通化预训练模型:photo2cartoon_weights.pt,存放在 models 路径下。
    头像分割模型:seg_model_384.pb,存放在 utils 路径下。
    人脸识别预训练模型:model_mobilefacenet.pth,存放在 models 路径下。
    卡通画开源数据:cartoon_data,包含 trainB 和 testB

# 使用预训练的模型生成漫画头像
# python test.py --photo_path images/ml.jpg --save_path images/cartoon_ml_result.pngimport argparse
import osimport cv2
import numpy as np
import torchfrom models import ResnetGenerator
from utils import Preprocessparser = argparse.ArgumentParser()
parser.add_argument('--photo_path', type=str, default='images/photo_test.jpg', help='input photo path')
parser.add_argument('--save_path', type=str, default='images/photo_test_cartoon.jpg', help='cartoon save path')
args = parser.parse_args()os.makedirs(os.path.dirname(args.save_path), exist_ok=True)class Photo2Cartoon:def __init__(self):self.pre = Preprocess()self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")self.net = ResnetGenerator(ngf=32, img_size=256, light=True).to(self.device)assert os.path.exists('./models/photo2cartoon_weights.pt'), "[Step1: load weights] Can not find 'photo2cartoon_weights.pt' in folder 'models!!!'"params = torch.load('./models/photo2cartoon_weights.pt', map_location=self.device)self.net.load_state_dict(params['genA2B'])print('[Step1: load weights] success!')def inference(self, img):# face alignment and segmentationface_rgba = self.pre.process(img)if face_rgba is None:print('[Step2: face detect] can not detect face!!!')return Noneprint('[Step2: face detect] success!')face_rgba = cv2.resize(face_rgba, (256, 256), interpolation=cv2.INTER_AREA)face = face_rgba[:, :, :3].copy()mask = face_rgba[:, :, 3][:, :, np.newaxis].copy() / 255.face = (face * mask + (1 - mask) * 255) / 127.5 - 1face = np.transpose(face[np.newaxis, :, :, :], (0, 3, 1, 2)).astype(np.float32)face = torch.from_numpy(face).to(self.device)# inferencewith torch.no_grad():cartoon = self.net(face)[0][0]# post-processcartoon = np.transpose(cartoon.cpu().numpy(), (1, 2, 0))cartoon = (cartoon + 1) * 127.5cartoon = (cartoon * mask + 255 * (1 - mask)).astype(np.uint8)cartoon = cv2.cvtColor(cartoon, cv2.COLOR_RGB2BGR)print('[Step3: photo to cartoon] success!')return cartoonif __name__ == '__main__':img = cv2.cvtColor(cv2.imread(args.photo_path), cv2.COLOR_BGR2RGB)c2p = Photo2Cartoon()cartoon = c2p.inference(img)if cartoon is not None:cv2.imwrite(args.save_path, cartoon)print('Cartoon portrait has been saved successfully!')origin = cv2.resize(cv2.imread(args.photo_path), (256, 256))res = cv2.imread(args.save_path)print(origin.shape, res.shape)cv2.imshow("origin VS cartoon", np.hstack([origin, res]))cv2.waitKey(0)

参考

  • https://blog.csdn.net/weixin_47196664/article/details/106542463
  • 代码下载 https://github.com/minivision-ai/photo2cartoon
  • 模型下载 https://drive.google.com/uc?id=1eDNGZT3jszHLXQ9XGIUPtcu72HdBmHuX&export=download
  • https://blog.csdn.net/kexuanxiu1163/article/details/105858528

Python使用AI photo2cartoon制作属于你的漫画头像相关推荐

  1. Python使用AI animegan2-pytorch制作属于你的漫画头像/风景图片

    Python使用AI animegan2-pytorch制作属于你的漫画头像 1. 效果图 2. 原理 3. 源码 参考 git clone https://github.com/bryandlee/ ...

  2. 人脸变漫画脸!AI 教你轻松 Pick 胡歌漫画头像

    作者 | 李秋键 责编 | Carol 出品 | AI科技大本营(ID:rgznai100) 近几天一个GitHub项目火遍了朋友圈,那就是卡通头像AI生成小程序.如下图所见: 而这个项目的基本原理是 ...

  3. 男生|女生漫画头像怎么制作,分享3种免费制作方法,不用求人

    大家发现没有,最近特别流行卡通漫画头像!一些小伙伴们通过处理自己的照片,把照片制作成漫画头像,让照片看起来更有趣.那么,男生.女生漫画头像怎么制作呢?需要用到哪些工具?今天给大家分享3种免费制作漫画头 ...

  4. python制作ai小说网_【案例分享】使用Python创建AI比你想象的轻松

    您可能对AI领域,主要开发阶段,成就,结果和产品使用感兴趣.有数百个免费源和教程描述使用Python的AI.但是,没有必要浪费你的时间看他们.这里是一个详细的指南,你需要知道在使用Python构建人工 ...

  5. python国际象棋ai程序_使用Python创建属于你的国际象棋AI

    使用Python创建属于你的国际象棋AI Python3 最后更新 2020-10-23 16:23 阅读 120 最后更新 2020-10-23 16:23 阅读 120 Python3 ##Fly ...

  6. python人工智能的重要性_为什么说Python是AI时代必备技能?

    如今,人工智能作为一项划时代的技术,它将催生时代的变革,带来划时代的机遇. 而Python作为当下最为简洁.优雅的语言,近年来和人工智能一样,地位逐渐上升,甚至被专家称为"AI时代必备技能& ...

  7. 如何用 Python 爬取网页制作电子书

    本文来自作者 孙亖 在 GitChat 上分享 「如何用 Python 爬取网页制作电子书」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 0 前言 有人爬取数据分析黄金周旅游景点,有人爬 ...

  8. ai人工智能制作视频_建立一个人工智能驱动的可搜索视频档案

    ai人工智能制作视频 In this post, I'll show you how to build an AI-powered, searchable video archive using ma ...

  9. python模型训练框架_以Python撰写 AI模型框架

    以Python撰写 AI模型框架 by 高焕堂 1. 前言: 在AI(人工智慧)方面,由于当今的机器学习本质是一种<大数据相关性支撑的>归纳性推理.软体框架的复用(Reuse)性愈高,对于 ...

最新文章

  1. Java调用Oracle存储Package
  2. 大数据构建模块:选择体系结构和开源框架
  3. Java: IE Firefox下载文件中文乱码的兼容代码
  4. java cygwin 乱码_Cygwin中文乱码的解决方案
  5. html图片等比例拉伸,CSS控制图片等比例缩放
  6. MySQL数据库的恢复-mysql数据库的恢复
  7. 计算机网络:第四章 网络层
  8. 由磁场数据和加速度数据计算初始姿态角
  9. vivo手机计算机怎么开语音,vivo怎么打开语音助手
  10. TLS SNI(TLS Server Name Indication)配置:F5、Nginx和IIS
  11. 手把手教你入门第一步!做西瓜头条自媒体,每天稳定收入200多
  12. 计算机平时测试零分,计算机二级最全攻略 就快考试了不看等什么呢!
  13. 解决Android Studio不提示控件的XML属性
  14. zbrush软件介绍
  15. 字节跳动测开实习面试题
  16. ICPC 2022西安回顾
  17. 番茄花园系统剖析 下
  18. 洛谷 1203 [USACO1.1]坏掉的项链Broken Necklace
  19. 卸载 cube ui_如何还原Windows 8附带的已卸载现代UI应用程序
  20. (20210208已解决)numexpr.utils:NumExpr defaulting to 4 threads

热门文章

  1. 最大公约数的四种方法
  2. python浮点数保留两位小数_python中保留两位小数
  3. ios 地图 自定义标注
  4. 输入法无法启动的常见原因及解决方案
  5. JZOJ5904 刺客信条
  6. XSS跨站脚本攻击介绍
  7. 程序员过中秋的一百种方式
  8. 拓扑优化科研(持续更新帖)
  9. 每日一问之鞍点(saddle point)
  10. Vue3:显示 markdown 文档