3步就能制作漫画头像的机器人,想拥有一个吗?
摘要:3步就能制作漫画头像的机器人,想拥有一个吗?
作者:胡琦
只需要发送关键字,就能出发聊天机器人头像漫画化处理程序,生成动漫图片。怎么实现呢?总的思路就是基于 ModelArts AI Gallery 快速验证 AnimateGanv2 现实照片动漫化能力,基于 Flask 快速部署动漫化服务,基于 Wechaty 快速开发动漫化聊天机器人。
为什么是 AnimeGAN?
动漫(Animation & Comic)作为日常生活中一种常见的艺术表现形式,在儿童教育、影视、广告等领域中应用十分广泛;但动漫创作困难、周期长、开发难度大,对创作者要求也十分苛刻,一般来说好的动漫作品需要创作者掌握线条、纹理、颜色和阴影等绘画技巧;普通人想要快速创造自己的动漫作品不得不借助工具。近年来,随着元宇宙的不断发展,人们对动漫的需求越来越多,比如生成二次元自画像、制作 NFT 艺术品等等,因此动漫风格迁移似乎成为“炼丹师”们喜爱的研究方向之一。
图像风格迁移还得从 pix2pix 和 CycleGAN 说起,这两个基于 GAN 的风格迁移算法为动漫画图片生成奠定了技术基础,后续的 CartoonGAN 通过语义内容损失函数和边缘增强的对抗性损失函数使生成的动漫图片质量更高。而 AnimeGAN基于 CartoonGAN 改进,并提出了一个更加轻量级的生成器架构以及灰度风格损失、灰度对抗损失和颜色重建损失三个新的损失函数,使其风格化的视觉效果能超越 CartoonGAN。
毕竟,AnimeGAN 让新海诚本人都感觉很有趣;而对于我们普通人来说,多了一种创作的可能,只需一张现实照片就能通过 AI 输出大师级的动漫作品!
什么是 AnimeGAN ?
提到 AnimeGAN ,不得不说说它的发展历程,一作Asher Chan从 2019 年提交第一个 Git Commit 至今,已经迭代了三个版本,AnimeGANv3放出了可执行程序和刚出炉还热乎的肖像素描(点我快速体验:Run in ModelArts - AnimeGANv3 肖像素描生成)。
AnimeGAN 实现了将现实世界场景的照片转换为动漫风格图像。 AnimeGANv1 提出了三种损失函数:灰度样式损失、颜色重建损失和灰度对抗损失。
解决了:
1.生成的图像没有明显的动画风格纹理
2.生成的图像丢失了原始图像的内容;
3.网络的参数需要大的存储容量。
AnimeGANv2 修复了上个版本中存在的问题,例如模型生成的图像中存在高频伪影;更容易训练且直接能到达论文效果;进一步减少网络参数使生成器更小;尽可能多地使用更高画质的风格数据。作者觉得创新性不大因此就没重新发表论文。
AnimeGANv3 基于与 Google 的商业许可,作者暂时不提供源码。不过目前提供了图形用户界面程序 (AnimeGANv3.exe) 和预训练模型 (onnx.zip) ,目前我们可以直接在 Windows 上体验图片或视频转动漫风格。截止笔者发文,作者由更新了 AnimeGANv3_PortraitSketch 用于生成肖像画,也就是上图的效果。
笔者有幸体验了 AnimeGAN 带来的乐趣,下图中左边是在华为云 ModelArts 上运行的结果,通过识别人脸关键点之后再进行风格迁移能获得动漫化头像;右边是 AnimeGANv3.exe 在本地运行的结果,我们无需关系环境和代码执行,简单操作就能生成动漫 图片;中间是本次分享的主角–一个能将图片动漫化的聊天机器人。
在 AI Gallery 上提前验证
我们通常认为“数据、算法、算力”是人工智能的三要素,现如今,处在大数据时代,可靠高质量的数据的获得变得简洁;优质的算法随着开源文化的发展也变得普及;然而算力确成了制约人工智能普及的“拦路虎”,就连 AnimeGAN 的作者也感叹“论文的延迟发表只因只借到了一年的 2080ti”。对于笔者而言,幸亏有普惠 AI 的华为云 ModelArts,AI Gallery 是在 ModelArts 的基础上构建的开发者生态社区,提供了 Notebook 代码样例、数据集、算法、模型、Workflow 等 AI 数字资产的共享,姑且理解为 AI 届的 Github。
- 数据方面,AI Gallery 的数据模块支持数据集的共享和下载;而且数据集是支持 License 声明的,这一点类似于开源社区;
- 算法方面,AI Gallery 的算法模块支持算法的共享和订阅;并且算法支持变现,类似于一个算法商城;
- 算力方面,用户在 AI Gallery 中通过点击“Run in ModelArts”可以将 Notebook 案例在 ModelArts 控制台快速打开、运行以及进行二次开发等操作,目前提供有限的免费算力。
通过学习改造 AI Gallery 已有的 AnimeGAN 案例,我们能够快速运行 NoteBook 并得到动漫化头像。
基于 Wechaty 快速构建机器人
提到聊天机器人的开发,作为前端工程师,笔者认为最快捷的方式莫过于import {Wechaty} from "wechaty";,是的,Wechaty 是一个开源的的对话机器人 SDK,支持 个人号 微信。它是一个使用 Typescript 构建的 Node.js 应用。支持多种微信接入方案,包括网页,ipad,ios,windows, android 等。同时支持 Linux, Windows, Darwin(OSX/Mac) 和 Docker 多个平台。因此我们要实现聊天机器人就十分简单了!(PS:除了 token 有点小贵,当然有能力有创意可以加入官方资助计划)。
聊天机器人有了,接下来怎么接入 AnimeGAN 的能力呢?为了给机器人提供服务,我们需要部署一个应用给前端提供接口,暂且使用 Flask 快速部署头像动漫化服务。
from flask import * # import request import os import uuid import numpy as np from animeGANv2 import * app = Flask(__name__,template_folder='view') app.config['MAX_CONTENT_LENGTH'] = 0.5 * 1024 * 1024 # 3MB # 转换图片文件 @app.route('/postdata', methods=['POST']) def postdata(): print(request) f = request.files['content'] print(f) user_input = request.form.get("name") basepath = os.path.dirname(__file__) # 当前文件所在路径 src_imgname = str(uuid.uuid1()) + ".jpg" upload_path = os.path.join(basepath, 'static/srcImg/') if os.path.exists(upload_path)==False: os.makedirs(upload_path) f.save(upload_path + src_imgname) # img = cv2.imread(upload_path + src_imgname, 1) save_path = os.path.join(basepath, 'static/resImg/') if os.path.exists(save_path) == False: os.makedirs(save_path) fileSize = os.path.getsize(upload_path+src_imgname) if(fileSize / 1024 / 1024 > 1): resSets = dict() resSets["value"] = 10 resSets["resurl"] = "http://127.0.0.1:5000" +'/static/resImg/' + src_imgname else: inference_from_file(upload_path+src_imgname,os.path.join(save_path, src_imgname)) resSets = dict() resSets["value"] = 10 resSets["resurl"] = "http://127.0.0.1:5000" +'/static/resImg/' + src_imgname return json.dumps(resSets, ensure_ascii=False) # 转换图片链接 @app.route('/postdataUrl', methods=['POST']) def postdataUrl(): url = request.values['content'] print(url) user_input = request.form.get("name") basepath = os.path.dirname(__file__) # 当前文件所在路径 src_imgname = str(uuid.uuid1()) + ".jpg" save_path = os.path.join(basepath, 'static/resImg/') if os.path.exists(save_path) == False: os.makedirs(save_path) inference_from_url(url,os.path.join(save_path, src_imgname)) resSets = dict() resSets["value"] = 10 resSets["resurl"] = "http://127.0.0.1:5000" +'/static/resImg/' + src_imgname return json.dumps(resSets, ensure_ascii=False) if __name__ == '__main__': app.run(threaded=True)
完整代码详见:https://github.com/hu-qi/MDG-AnimeGANv2
大致的效果如下图:
了解更多内容,欢迎来直播间和作者交流
直播时间:7月27日 20:00-21:00
直播老师:胡琦,华为云年度十佳博主
直播主题:三步开发聊天机器人,一秒生成漫画头像
直播介绍:
1、基于 ModelArts 快速验证AnimateGanv2 现实照片动漫化能力
2、基于 Flask 快速部署动漫化服务
3、基于 Wechaty 快速开发漫画头像的聊天机器人
直播链接:https://bbs.huaweicloud.com/signup/aaf6f0369810487eb21cb162bc8ac154

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
参与开源社区还有证书拿?
咦?咋回事?发生了啥? 领导:“DevStream 社区贡献者证书又双叒升级了,胡涛,你写一篇文章宣传一下吧!” 胡涛:“不就是个破证书嘛,有啥好宣传的。素材都没有。” 领导:“你也想要证书了?” 胡涛:“你懂我。这不,新版那么酷,净看别人秀,我能不羡慕吗?!” 领导:“那你选一张吧。” 胡涛:“小娃娃才做选择。” 领导:“……,批准了,你自己去挑。” …… 来,秀证书,看我首页! 我的 GitHub <https: github.com daniel-hutao> 自定义首页: 不行不行,飘了飘了,冷静冷静…… 下面,我来非常严肃地介绍下如何实现这个自定义首页效果。 要?第一步,收集证书! 严肃?严肃不起来。严肃的事情留给文档,我只负责“搞笑”。 要想有一个“秀出天际”的 GitHub 首页,第一步你需要准备几张 Credly 证书(徽章),就像这样: 啥?你问我,到哪领证? 这是一个严肃的问题。 来,先看看,证书分类。 DevStream 社区目前有4大类证书(徽章),分别是: 贡献者证书(徽章) 演说家证书(徽章) 布道师证书(徽章) 卷王类证书(徽章) 感受下圆滚滚...
- 下一篇
开源之夏专访|带着问题去学习,Apache DolphinScheduler 王福政
开源之夏项目开发如当下的骄阳一般如火如荼推进中,开源之夏人物专访专栏也未停歇脚步,专栏将持续为大家带来开源之夏参与者的系列分享。欢迎已从开源之夏毕业以及正在参与的学生、导师一起加入专栏行动,有兴趣的小伙伴请联系开源小助手:kaiyuanzhixia 或小编姐姐:damengshiye(备注“专栏投稿”加速通过) 本期专访来自 Apache DolphinScheduler Contributor 王福政。 1、自我介绍 我与开源 深入体验 OSPP:你眼中的开源是什么?是什么让你决定参与开源? WFZ:大家好,我是王福政。目前是开源社正式成员,也在白鲸开源担任实习生。 起初我对于开源的理解,可能只是一些技术大神把自己的代码公开,或者说作为一些开源项目的使用者从 GitHub 之类的代码托管平台来查阅代码。但实际深入了解之后就会发现,开源不仅仅是代码,更多的是“社区”。说大一点的话,可以是一种文化,或者说是一种信仰也不为过!引用 Florian Effenberger 在《开源 Community 对我来说意味着什么》中的一段话:“我对开源所带来的一切都充满了好奇和兴奋,这不仅仅是在项目...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS关闭SELinux安全模块
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路