Python使用AI photo2cartoon制作属于你的漫画头像
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制作属于你的漫画头像相关推荐
- Python使用AI animegan2-pytorch制作属于你的漫画头像/风景图片
Python使用AI animegan2-pytorch制作属于你的漫画头像 1. 效果图 2. 原理 3. 源码 参考 git clone https://github.com/bryandlee/ ...
- 人脸变漫画脸!AI 教你轻松 Pick 胡歌漫画头像
作者 | 李秋键 责编 | Carol 出品 | AI科技大本营(ID:rgznai100) 近几天一个GitHub项目火遍了朋友圈,那就是卡通头像AI生成小程序.如下图所见: 而这个项目的基本原理是 ...
- 男生|女生漫画头像怎么制作,分享3种免费制作方法,不用求人
大家发现没有,最近特别流行卡通漫画头像!一些小伙伴们通过处理自己的照片,把照片制作成漫画头像,让照片看起来更有趣.那么,男生.女生漫画头像怎么制作呢?需要用到哪些工具?今天给大家分享3种免费制作漫画头 ...
- python制作ai小说网_【案例分享】使用Python创建AI比你想象的轻松
您可能对AI领域,主要开发阶段,成就,结果和产品使用感兴趣.有数百个免费源和教程描述使用Python的AI.但是,没有必要浪费你的时间看他们.这里是一个详细的指南,你需要知道在使用Python构建人工 ...
- python国际象棋ai程序_使用Python创建属于你的国际象棋AI
使用Python创建属于你的国际象棋AI Python3 最后更新 2020-10-23 16:23 阅读 120 最后更新 2020-10-23 16:23 阅读 120 Python3 ##Fly ...
- python人工智能的重要性_为什么说Python是AI时代必备技能?
如今,人工智能作为一项划时代的技术,它将催生时代的变革,带来划时代的机遇. 而Python作为当下最为简洁.优雅的语言,近年来和人工智能一样,地位逐渐上升,甚至被专家称为"AI时代必备技能& ...
- 如何用 Python 爬取网页制作电子书
本文来自作者 孙亖 在 GitChat 上分享 「如何用 Python 爬取网页制作电子书」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 0 前言 有人爬取数据分析黄金周旅游景点,有人爬 ...
- ai人工智能制作视频_建立一个人工智能驱动的可搜索视频档案
ai人工智能制作视频 In this post, I'll show you how to build an AI-powered, searchable video archive using ma ...
- python模型训练框架_以Python撰写 AI模型框架
以Python撰写 AI模型框架 by 高焕堂 1. 前言: 在AI(人工智慧)方面,由于当今的机器学习本质是一种<大数据相关性支撑的>归纳性推理.软体框架的复用(Reuse)性愈高,对于 ...
最新文章
- C#语言与面向对象技术(1)
- 图像滤镜艺术---(Nostalgla Filter)老照片滤镜
- HK-2000 数采仪 航空头接口定义
- 增强for循环之删除
- 张小龙做微信公众号APP,对自媒体是祸还是福?
- 探索 .Net Core 的 SourceLink
- Oracle中Select语句完整的执行顺序
- std list/vector sort 自定义类的排序就是这么简单
- 基于YOLOv5的车辆识别系统
- 图解R树的内部结构及操作
- 什么是java框架结构_Java框架概述
- “无法为保留分区分配驱动器号”的解决
- App开发国内常用的应用市场
- python批量转换图片格式:JPEG到jpg
- 2021年中国果蔬汁行业供需分析:产量同比增长2.4%[图]
- 电脑可以上网但网络显示感叹号无Internet的解决办法
- PL2303驱动不支持Win11及以上版本解决方案
- 小米删除了文件无网络无服务器,小米手机里的文件删了怎么恢复?超详细解决方法...
- flappy+bird+c语言程序,C语言实现flappy bird游戏
- 速领电商:怎么制作视频短片