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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/49507.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI一分钟就能生成个性动漫头像?分享一个超好用的AI卡通头像生成器

你是否常常在社交媒体或短视频平台上看到一些精美的卡通风格头像,但是找遍全网都找不到完全相同的,其实这些动漫卡通风格的头像大多都是利用AI绘制的,不仅精美漂亮而且独一无二,不会与其他人的头像重复,所以今天就来给…

AI绘图第二弹!绘制专属动漫头像

上次推出AI绘图的文章后,热爱绘画的同志们,积极性很高!文章详情可以点击《最近非常火的AI绘图(附操作方法)》查看 这次,推荐一种绘制自己专属动漫头像的AI绘制方法! 这个AI绘制头像项目&#…

AI免费生成3D卡通头像,真香~

Midjourney 5.1 已经发布,官方搞活动免费送25张图,我用Mid Journey生成了我和孩子们的3D卡通头像,大家看像吗? 整个过程非常简单,只需1分钟: 首先,上传了自己照片 然后输入对照片的描述&#xf…

AI动漫头像生成神器来了

AnimeGANv3是一款二次元漫画风格迁移工具,它的处理能力让我们由衷感叹科技力量之强大:只要挑选到正确的照片,该工具的成像效果真的可以用「惊艳」来形容了,只要有合适的图片,再也不用找人设计头像啦,自己轻…

ChatGPT 能够取代架构师吗?

ChatGPT目前的能力来看,已经可以取代不少岗位了,例如客服、教师、文员等,那是否意味着随着ChatGPT的发展,以后任何岗位都可以被ChatGPT取代呢?比如说有了ChatGPT,架构师还有必要继续存在吗? 我们…

chatgpt赋能python:Python中的关键词提取工具:Jieba

Python中的关键词提取工具:Jieba 在自然语言处理领域,关键词提取是一个非常重要的任务。在Python中,可以使用Jieba库来进行中文分词和关键词提取。本文将介绍Jieba库的用法和功能,以及如何在SEO中使用它提高网站排名。 什么是Ji…

利用pandoc把latex文件转换为word的基本操作

pandoc是很强大的文本转换工具,我是用它来把latex转换为word。弥补了latex不能直接生成word的不足。 具体操作: 首先下载安装pandoc,具体略过 winR之后cmd进入命令行 输入pandoc,不报错,也就说明可以用了 ctrlc退…

chatgpt赋能python:Python复制到word:如何实现高效无误的文档传递

Python复制到word:如何实现高效无误的文档传递 在日常工作中,我们经常需要将Python代码和数据转换到Word文档中共享和展示。然而,Python和Word之间存在着很多兼容性方面的问题,如何实现高效无误的文档传递是我们需要掌握的关键技…

利用IText导出Word

生成Word文档的类库有很多,常用的有jacob,poi,itext等等,jacob操作office的能力是不错的,但是对于我个人来说,我不喜欢它的两方面:一、jacob只能应用于windows平台。二、除了要把相应的ar包加载到类路径下&…

本地Word图文直接复制到富文本编辑器中

当前功能基于PHP,其它语言流程大致相同 1.新增上传word json配置 在ueditor\php\config.json中新增如下配置: /* 上传word配置 */ "wordActionName": "wordupload", /* 执行上传视频的action名称 */ "wordFieldName": &q…

【成为架构师课程系列】怎样进行物理架构、运行架构、开发架构的设计?

我认识一些架构师,他们的生活都是失控的。因为架构天性范围宽广,涉及人、工作量都非常多。一些架构师把他们的时间整天整天的花在跟“项目干系人”开会上,然后夜以继日,再搭上周末去实际的架构工作。 -- Eric Brechner, 《代码之道》 多重软件架构视图之所以必不可少,是因…

如何在一个中文大模型上,加入招投标字段标注的数据,搭建一个招投标字段解析的Transformer模型?

ChatGPT方案1 在一个中文大模型上加入招投标字段标注的数据,并搭建招投标字段解析的Transformer模型可以通过以下步骤实现: 收集并标注招投标相关的数据。可以使用现有的数据集,也可以通过爬虫技术获取相关数据,然后进行人工标注。…

程序员兼职网站(自由职业)

1、程序员客栈 www.proginn.com 2、码市 codemart.com 3、开源众包 4、智城外包 5、实现网 6、猿急送 7、人人开发 8、开发邦 9、电鸭社区 10、快码 11、英选 12、外包大师 13、我爱方案网 14、自由职客 15、智筹 16、SXsorft 17、猪八戒

程序员如何向自由职业过渡

点击上方“程序人生”,选择“置顶公众号” 第一时间关注程序猿(媛)身边的故事 未来一定会是一个从事自由职业越来越多的时代。当我们还不能放手一搏到自由职业中去的时候,我们实际上可以为其做一些准备。当然不是所有人都适合自由…

4大国外自由职业者项目外包网站

4大国外自由职业者项目外包网站 http://www.asfreelancer.com/articles/50.html 2011-06-27 / 分类:推荐专题, 职业资源 / 没有评论 这里介绍四个在国外自由职业圈中很流行的项目外包网站,很多个人和团队都会在上面开始自己的商业服务,尤…

程序员适合做自由职业者吗?

企业基于自身的弹性用工需求,雇佣兼职或自由职业者来解决用人难题,这种灵活用工模式效率更高、成本更低,企业把灵活用工与固定全职结合起来使用,正在变成一种常态。有数据指出,全球灵活用工业务总收入高达3万亿&#x…

如何迅速成为一个能够养活自己的自由职业者?

自由职业者,意味着自己的时间可以自由的安排,不用被强迫996,但是也同时意味着收入的不稳定,特别是在成为自由者的初期。 飞援 平台上也有一些自由职业者活跃,综合他们的经历经验,分享几点建议给想成为自由…

一个自由职业者兼职程序员对未来的畅想以及对目前生活的改变

最近一直在思考一个问题,未来是什么样子的,或者说,当我七老八十的时候,我希望日子是什么样子的。 关于自由 这里所谓的自由,肯定不是如同丰县的铁链女子亦或是缅北的血奴一般完全失去人身自由,而是能够自由…

自由职业,如何做好?

自由职业现实很骨感。 网络高速发达的今天,一个人一台电脑一个技能就是一家公司;不用早起不用打卡,甚至不必参加无聊的会议,这应该是多数职场人羡慕的“自由”。 近两年,自由职业一度中层和应届生追求,数…