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://xiahunao.cn/news/256520.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

php 照片变成卡通照片,怎么把照片做成q版卡通 照片变q版卡通人物 q版卡通头像制作...

想要把自己的头像变成真人q版卡通漫画,偷偷问了一个漫画家怎么制作的,他说用电脑手绘,得有画画基础才行,小编这下子就打了退堂鼓了,照片制作视频容易,但是自己画画太难了。有什么比较容易方法把照片做成q版…

刘诗诗吴奇隆大婚热吻头像

吴奇隆刘诗诗巴厘岛甜蜜完婚,现场布置鲜花簇拥,碧海蓝天,宛若仙境。想知道他们的两人结婚头像吗?小编为你采撷一些婚礼头像,重点新娘子美的不要不要的!

Python实用案例,Python脚本实现快速卡通化人物头像,让我想起了QQ秀时光!

往期回顾 Python脚本实现天气查询应用 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 Python实现每日更换“必应图片”为“桌面壁纸” Python实现批量加水印 Python实现破译zip压缩包 Python实现批量下载百度图片 前言…

怎么制作真人qq秀_一分钟简单制作一个专属于自己的卡通头像

点击蓝字关注我们 制作一个专属于自己的卡通头像很简单,我们常用的美图秀秀软件就可以轻松制作。 首选在应用市场搜索美图秀秀下载后选择工具箱打开,找到实用工具中的动漫化身这个选项; 打开后点击绘制动漫形象,可以在相册中选择一…

带你读AI论文丨ACGAN-动漫头像生成

摘要:ACGAN-动漫头像生成是一个十分优秀的开源项目。 本文分享自华为云社区《【云驻共创】AI论文精读会:ACGAN-动漫头像生成》,作者:SpiderMan。 1.论文及算法介绍 1.1基本信息 • 论文题目:《Conditional Image Sy…

Docker镜像更新通知器DIUN

什么是 DIUN ? Docker Image Update Notifier 是一个用 Go 编写的 CLI 应用程序,可作为单个可执行文件和 Docker 映像交付,用于当 Docker 映像在 Docker registry中更新时接收通知。 和老苏之前介绍过的 watchtower 不同,DIUN 只是通知&…

idea连接Linux服务器

一、 介绍 配置idea的ssh会话和sftp可以实现对linux远程服务器的访问和文件上传下载,是替代Xshell的理想方式。这样我们就能在idea里面编写文件并轻松的将文件上传到linux服务器中。而且还能远程编辑linux服务器上的文件。掌握并熟练使用,能够大大提高我…

聊聊企业无线网络安全

新钛云服已累计为您分享749篇技术干货 不知不觉无线网络已经成为了办公网主流。最早接触无线网络的时候是2001年,那时候笔记本电脑还比较少见,标配也不支持无线网络,要使用无线网络需要另外加一块PCMIA接口的无线网卡。第一次体验无线网络的时…

千牛中文件已存在于服务器上,千牛登陆在云服务器上

千牛登陆在云服务器上 内容精选 换一换 如果Windows操作系统云服务器未安装密码重置插件,可以参见本节内容重新设置密码。本节操作介绍的方法仅适用于修改Windows本地账户密码,不能修改域账户密码。Linux操作系统请参见重置Linux云服务器密码(未安装重置…

mac安装旺旺启动台找不到_如何正确安装和卸载Mac软件?

Windows和Mac是两个截然不同的系统,很多操作逻辑都有本质上的区别,管家针对刚接触Mac系统的朋友做了一份简单的“Mac软件的安装和卸载”教程,希望对大家有所帮助。 1 如何安装软件? Mac系统安装软件的方法有两种,一种是…

获取千牛聊天记录(此方法新版千牛已失效,7.1之前的版本应该有效,各位自行测试咯)...

分析UI: 分析千牛UI控件,我们用Visual Studio自带的SPY++查找窗口,得到聊天记录的控件信息发现 窗口类名:Aef_RenderWidgetHostHWND ,上网搜了一下说是Chrominum 的窗口。确定一下我们直接选中千牛的聊天窗口按F12,发现会弹出Chrome的开发者工具。到此我们确定了千牛的聊天窗…

千牛2015卖家版官方电脑版

千牛2015卖家版 v2.08 官方电脑版 软件大小:54.9MB 软件语言:简体中文 软件类别:管理工具 软件授权:免费版 更新时间:2015-01-06 应用平台:/Win8/Win7/WinXP 千牛2015卖家版是阿里巴巴专为淘宝、天猫卖家量…

千牛文件在服务器上,千牛挂在云服务器

千牛挂在云服务器 内容精选 换一换 云耀云服务器(Halo Elastic Cloud Server,HECS)是可以快速搭建简单应用的新一代云服务器,具备独立、完整的操作系统和网络功能。提供快速地应用部署和简易的管理能力,适用于网站搭建、开发环境等低负载应用…

pc端网页唤起本地的咚咚和千牛

前段时间接手了一个需求,需求大概就是pc端的产品需要做一个点击按钮唤起咚咚和千牛,并且需要打开对应的顾客聊天窗口。 当时接到这个需求人都不好了,大牛们都没接触过这个需求,不知道咚咚和千牛的协议,去看淘宝和京东开发平台的文档也没发现什么有用的,然后就一直考古呀…

七牛云工具类

首先我们需要创建一个oss.properties文件存储七牛云的必须属性,可在七牛云官网查看 #qiniu.bucket xxx #qiniu.access_key xxx #qiniu.secret_key xxx #qiniu.base_url xxx七牛工具类QiniuOssUtils import com.google.gson.Gson; import com.qiniu.common.QiniuExce…

1688获得店铺的所有商品教程

onebound.1688.item_search_shop 获取key和secret API文档说明 完整返回数据 { "user": { "id": null, "nick": null, "good_num": "", "level": "", …

无限重启-千牛app

一. 问题描述 1.1 问题JIRA XXX 1.2 现象 手机无限重启,清数据后能开机,恢复数据的时候还是会无限重启. 1.3 结论 1.无限重启的原因: 由于每次开机AccessibilityManagerService都会去解析每个有辅助功能…

千牛服务器网站,千牛平台远程服务器

千牛平台远程服务器 内容精选 换一换 云堡垒机与RADIUS服务器对接,认证登录系统的用户身份。本小节主要介绍如何配置RADIUS域认证模式,并可对配置的RADIUS认证进行用户有效性测试。用户已获取系统模块管理权限。已获取RADIUS服务器相关信息。若需修改认证…

「从零入门推荐系统」19:HM推荐系统代码实战案例

作者 | gongyouliu 编辑 | gongyouliu 我们在上一章中利用Netflix prize数据集讲解了最基础、最简单的一些推荐系统召回、排序算法,大家应该对怎么基于Python实现推荐算法有了一些基本的了解了。接着上一章的思路,本章我们会基于一个更复杂、更近代一点的…

python clicknium 库自动化千牛桌面端

python clicknium 库自动化千牛桌面端 千牛是阿里巴巴集团卖家工作台,商家经营的必备工具,今天我们使用python来自动化千牛桌面端。 clicknium 是基于 python 实现的一套 免费的UI 自动化的库,功能强大、简单易用,可以用来操作桌…